Тема: Организация циклов в программе.
Цель: Научиться составлять простейшие программы с использованием операторов цикла для решения финансовых, инженерных и научных задач (на языке VBA).
Время: 160 мин.
Задание: Решить задачу согласно варианта - составить блок-схему алгоритма, написать программу, отладить её и выполнить на ЭВМ.
Задачу решить с использованием двух-трёх операторов цикла.
Л -
Элизабет Бунин. Excel Visual Basic для приложений. M.: Восточная книжная компания, 1996.
итература:
Содержание отчёта:
-
Ответы на вопросы, поставленные в пунктах описания последовательности выполнения работы.
-
Блок-схема алгоритма и текст программы.
-
Выводы по работе (что изучили, чему научились).
Варианты задания:
-
Найти сумму чётных натуральных чисел, меньших 100.
-
Найти сумму нечётных натуральных чисел, меньших 100.
-
Найти сумму целых положительных чисел, больших 20, меньших 100 и кратных 3.
-
Вычисление F = 10! выполнить каждым из трёх операторов цикла.
-
Начав тренировки, спортсмен в первый день пробежал 10 км, каждый последующий день он увеличивал дневную норму на 10% от нормы предыдущего дня. Какой суммарный путь пробежит спортсмен за 7 дней?
-
Напечатать в одну строку (через пробел) все буквы от ‘A’ до ‘Z’.
-
Напечатать в одну строку (через пробел) все буквы от ‘a’ до ‘z’.
-
Кинетическая энергия движущегося тела , где m – масса тела, v – его скорость.
Составить программу для расчёта зависимости Wk от v при значениях v, изменяющихся от v1 до v2 с шагом Δv. Решить задачу при v1 = 10.37, v2 = 15.44, Δv = 0.23, m = 1.004.
-
Т раектория снаряда, вылетающего из орудия под углом α с начальной скоростью vo, описывается уравнениями
x = vo˙ cosα˙t,
y = vo˙ sinα˙t – gt2/2,
где g = 9.8 м/с2 – ускорение свободного падения, t – время. Вводя n заданных пар vo и α, определить, сколько снарядов поразит цель высотой P, расположенную в вертикальной плоскости ствола орудия на расстоянии R на высоте H (см. рис.). Задачу решить при R = 5400 м; H = 100 м; P = 30 м для пяти пар vo и α: 180 м/с и 45˚; 252 м/с и 30˚; 280 м/с и 40˚; 233 м/с и 48˚; 260 м/с и 25˚.
Варианты следующих пятнадцати задач следующих сведены в таблицу. Необходимо найти значения функции Y(x) для всех Х, изменяющихся от Хн до Хк с шагом ΔХ. Вывод результатов оформить в виде таблицы с двумя столбцами и следующим заголовком:
Результаты вычислений.
-
№
варианта
|
Функция Y(x)
|
Хн
|
Хк
|
ΔХ
|
10
|
|
0
|
5
|
0.5
|
11
|
|
π/2
|
2π
|
0.47
|
12
|
|
-π/2
|
π/2
|
π/10
|
13
|
|
0
|
1
|
0.1
|
14
|
|
0
|
2π
|
π/10
|
15
|
|
0
|
10
|
1
|
16
|
|
0
|
15
|
1
|
17
|
|
1.1
|
6.35
|
0.35
|
18
|
|
π/2
|
3π/2
|
π/10
|
19
|
|
0
|
2
|
0.2
|
20
|
|
0
|
5
|
0.5
|
21
|
|
0
|
5
|
0.25
|
22
|
|
0
|
π
|
π/15
|
23
|
|
1.5
|
15
|
1.35
|
24
|
|
0
|
2π
|
π/10
|
-
Самолёт летит из пункта А в пункт Б со средней скоростью v. Найти время полёта t, если есть встречный ветер, скорость которого vв изменяется от 0 до 15 м/с с шагом Δvв = 0.5 м/с. Расстояние между пунктами А и Б S = 437 км, v = 720 км/ч.
(Для тех, кто плохо знает физику: t = S / (v-vв) )
-
Составить программу, печатающую таблицу значений градусов температуры по Цельсию и Фаренгейту. Значения градусов температуры по Цельсию изменяются от 0˚ до 20˚ с шагом 1˚. (˚F = ˚C * 1.8 + 32)
-
Пользователь сберегательной кассы внёс в неё вклад S0 = 3000 грн. До какой суммы он возрастёт через N = 5 лет, если процент годовых начислений P = 30 % ?
-
Вскоре после рождения ребёнка родители решили внести в сберкассу вклад S0 с тем, чтобы через 16 лет, к моменту окончания школы, вклад вырос до 50000 грн. Каким должен быть вклад S0, если процент годовых начислений P = 30 % ?
-
Через сколько лет начальный вклад S0 = 2 000 грн. увеличится до суммы S = 30 000 грн., если процент годовых начислений P = 30 % ?
-
Вкладчик сберегательной кассы решил ежегодно вносить вклад S1 = 500 грн. в течение N = 5 лет. Сколько денег он получит в конце этого срока, если процент годовых начислений P = 30 % ?
Пример №1.
Найти сумму первых 15-и натуральных чисел.
Задача сводится к организации цикла по i. Для циклического накапливания сумм при составлении соответствующих алгоритмов используется предписание стандартного вида:
Сумма = сумма + слагаемое
Перед началом цикла сумма должна иметь нулевое значение. Понимать эту формулу следует так:
Пусть значение переменной «сумма» хранится в ячейке памяти № 1, а значение переменной «слагаемое» – в ячейке памяти № 2. Все выражения выполняются по правилам приоритета арифметических операций справа налево, т.е. из ячейки памяти № 2 извлекается значение переменной «слагаемое», из ячейки № 1 извлекается значение переменной «сумма», оба числа складываются (за такие операции отвечает процессор, а именно, арифметико – логическое устройство), а результат помещается в ячейку № 1 вместо старого значения переменной «сумма». Таким образом, в ячейке № 1 происходит накопление суммы. Если в качестве слагаемого используется переменная цикла, то с каждой итерацией (шагом) цикла значение этой переменной будет меняться.
Словесная запись этого алгоритма (цикл «До», с постусловием):
-
i = 1, S = 0
-
S = S + i
-
i = i + 1
-
если i 15, перейти к шагу 2
-
вывести на экран значение S.
-
конец
Блок-схема алгоритма, соответствующая этой записи, изображена на рис.1.Согласно ГОСТ 19.701-90 схему этого алгоритма можно изобразить так, как на рис. 2.
Текст программы:
Sub example()
i = 1
S = 0
Do
S = S + i
i = i + 1
Loop While i <= 15
MsgBox (" S = " & S)
End Sub
Результат выполнения программы: S = 120.
Р ис. 1 Рис. 2
Для решения этой задачи можно использовать и цикл с предусловием. Словесная запись этого алгоритма (цикл «Пока»):
-
i = 1, S = 0
-
если i > 15, перейти к шагу 6
-
S = S + i
-
i = i + 1
-
вернуться к шагу 2
-
вывести на экран значение S.
-
конец
Блок-схема алгоритма, соответствующая этой записи, изображена на рис.3. Согласно ГОСТ 19.701-90 схему этого алгоритма можно изобразить так, как на рис. 4.
Текст программы:
Sub example()
i = 1
S = 0
Do While i <= 15
S = S + i
i = i + 1
Loop
MsgBox (" S = " & S)
End Sub
|
Sub example()
i = 1
S = 0
While i <= 15
S = S + i
i = i + 1
Wend
MsgBox (" S = " & S)
End Sub
|
Или:
|
|
Рис. 3 Рис. 4
При использовании цикла с параметром блок-схема алгоритма изображена на рис. 5.
Р ис. 5
Текст программы:
Sub Auto_0pen()
Beep
a = MsgBox ("Найти сумму натуральных чисел от 0 до 15”,vbYesNo, "Задание")
if a = vbNo Then Exit Sub
S=0
For i= 1 To 15
S = S + i
Next
a = МsgВох ("Сумма заданных чисел = " & S, "Ответ")
ThisWorkbook.Sheets ("Лист1").Activate
Range ("a1").Select
i = Len ("Сумма заданных чисел = ")
Columns ("A:A").ColumnWidth = i
Range ("a1 ").Value = "Сумма заданных чисел = "
Range ("b1 ").Value = S
End Sub
В этом примере программа несколько «приукрашена»:
-
Процедура названа Auto_Open, благодаря этому она запускается автоматически при открытии книги;
-
В окне сообщения с заголовком «Задание» появляется условие задачи и две кнопки: «Yes» и «No». Если нажимается кнопка «No», задача решаться не будет, последует выход из процедуры. Если нажимается кнопка «Yes», задача решается и в окне сообщения с заголовком «Ответ» появляется ответ: S = 120.
-
Затем открывается 1-й лист рабочей книги, в ячейке А1 появляется надпись «Сумма заданных чисел = », причём ширина столбца А становится равной длине этой надписи;
-
В ячейке В1 появляется результат вычислений (120).
Пример № 2.
В этом примере условие задачи оформлено на листе «Задание» в виде надписи с управляющей кнопкой Старт, которая вызывает процедуру, решающую поставленную задачу:
Исходные данные заносятся с помощью формы UserForm1:
Текст программы:
Dim Xn, Xk, dX, X As Variant
Sub Auto_Open()
Sheets("задание").Visible = True
Sheets("задание").Select
End Sub
Sub Start()
Sheets("задание").Visible = False
UserForm1.Show
Xn = Val(UserForm1.TextBox1.Value)
Xk = Val(UserForm1.TextBox2.Value)
dX = Val(UserForm1.TextBox3.Value)
Range("A1").Value = "Хн"
Range("B1").Value = "Хк"
Range("C1").Value = "dX"
Range("A1:C4").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.ShrinkToFit = False
.MergeCells = False
End With
With Selection.Font
.Name = "Arial Cyr"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Selection.Font.Bold = True
Range("A2") = Xn
Range("B2") = Xk
Range("C2") = dX
Range("b4").Select
Range("b4").Value = "X"
Range("c4").Value = "Y"
Columns("C:C").ColumnWidth = 20.86
i = 4
For X = Xn To Xk Step dX
If Abs(Cos(X) – 1) < 0.001 Then
Y = "Функция не определена"
Else
Y = (1 + Sin(X)) / (1 - Cos(X))
End If
i = i + 1
Cells(i, 2).Value = X
Cells(i, 3).Value = Y
Next
Range("b4").Select
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(0, 0).Resize(tbl.Rows.Count, tbl.Columns.Count).Select
With Selection.Borders(xlLeft)
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlRight)
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlTop)
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlBottom)
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.BorderAround Weight:=xlThin, ColorIndex:=xlAutomatic
Range("A4").Select
End Sub
Sub Auto_Close()
Cells.Select
Selection.Clear
Range("A1").Select
End Sub
Результат выполнения этой программы:
Хн
|
Хк
|
dX
|
0,00
|
6,28
|
0,314
|
|
|
|
|
X
|
Y
|
|
0
|
Функция не определена
|
|
0,314
|
26,76929732
|
|
0,628
|
8,320557201
|
|
0,942
|
4,391966734
|
|
1,256
|
2,825787841
|
|
1,57
|
2,001593605
|
|
1,884
|
1,491735644
|
|
2,198
|
1,140393997
|
|
2,512
|
0,878639707
|
|
2,826
|
0,671778656
|
|
3,14
|
0,500796644
|
|
3,454
|
0,354914388
|
|
3,768
|
0,228580251
|
|
4,082
|
0,120922727
|
|
4,396
|
0,03785636
|
|
4,71
|
0
|
|
5,024
|
0,069452838
|
|
5,338
|
0,457025076
|
|
5,652
|
2,127445718
|
|
5,966
|
13,79442665
|
|
6,28
|
Функция не определена
|
При закрытии книги лист с решением очищается (процедура Auto_Close).
Достарыңызбен бөлісу: |