
Задачник на VBA (часть I)*
.pdf
21
прибавлять. Обойти этот недостаток можно, используя условные операторы, которые будут рассмотрены в следующем параграфе.
1.4. Задания для программирования задач с неявно заданным линейным алгоритмом
1.Вычислить общее сопротивление трех резисторов, соединенных последовательно и параллельно.
2.Дана длина ребра куба. Найти объем куба и площадь его боковой поверхности.
3.Даны два действительных положительных числа. Найти среднее арифметическое и среднее геометрическое этих чисел.
4.Даны катеты прямоугольного треугольника. Найти его гипотенузу и площадь
5.Даны катеты прямоугольного треугольника. Найти радиус вписанной окружности.
6.Дана сторона равностороннего треугольника. Найти площадь этого треугольника.
7.Даны гипотенуза и катет прямоугольного треугольника. Найти второй катет и радиус вписанной окружности.
8.Известна длина окружности. Найти площадь круга, ограниченного этой окружностью.
9.Найти площадь кольца, внутренний радиус которого равен 20, а внешний – заданному числу r (r > 20 ).
10.Треугольник задан величинами своих углов и радиусом описанной окружности. Найти стороны треугольника (по теореме синусов).
11.Найти площадь равнобочной трапеции с основанием а и b и углом α при большем основании а.
12.Вычислить расстояние d между двумя точками с координатами x1,
y1 и х2, y2 ( d = (x2 − x1)2 + (y2 − y1)2 ).
13.Определить периметр правильного n-угольника, описанного около окружности радиуса r.
14.Смешано v1, литров воды температуры t1 с v2 литрами воды
температуры t2. Найти объем и температуру образовавшейся смеси.
15.Определить время падения камня на поверхность земли с высоты h.
16.Вычислить период колебания маятника длины l.
17.Определить силу притяжения F между телами массы m1 и m2 находящимися на расстоянии r друг от друга.

22
18.Определить время, через которое встретятся два тела, равноускоренно движущиеся навстречу друг другу, если известны их начальные скорости, ускорения и начальное расстояние между ними.
19.В группе N студентов. Сколько компьютеров нужно поставить в классе, чтобы за одним ПК работало не более трёх человек.
20.Кластер диска содержит 2048 байт. Составить программу, определяющую число кластеров, обеспечивающих адресацию к файлу объемом V.
21*. Кластер диска содержит 2048 байт. Составить программу, определяющую число свободных секторов последнего незанятого кластера для файла объемом 2 Мбайта.
1.5. Примеры программирования сложных арифметических выражений
Пример 1.5. Составить |
программу, |
вычисляющую |
функцию |
|
y = (a lg 2x + b x ) |
для любого заданного |
x. Параметры: |
а = 1,4 102 , |
|
c2d ln5 − e4x |
|
|
|
|
b = 2,5 10−3 , c = 0,31 104 , d = 4,6 10–2.
Решение:
Программируем заданное выражение, пользуясь таблицей стандартных функций (Табл. 4) и помня о приоритете выполнения арифметических операций.
Function y(x)
a = 1.4E+02: b = 2.5E-03: c = 0.31E+04: D = 4.6E-02
y = (a * Log(2 * x) / Log(10) + b * Sqr(x)) / (с^ 2 * b * с* Log(5) – Exp(4 * x)) End Function
1.6 Задания для самостоятельного программирования арифметических выражений
Составитьподпрограмму-функциюдлявычисленияследующихфункций.
1.z =3 x2 ctg(x +1) − 0,35 10−15
2.y = 3 ctg2x + lg x + 0,47 10−11
3.y = 5 tgex −0,35 10−17 + sin x
4.z = sin tgx −0,71 10−13 + arctgx2 5.

23
5.y = a + 7 b3 + ln x3 + 0,11 105 ctgb
6.Q = sin2 y − cos3 x + 5 ln y −0,3 10−12
7.y = arctgx2 − 0,53 1033 + arcsin x
8.y =3 ln cos x + x a+ c + 0,71 10−15 + ctg x
9.y = arctg3 x − 0,75 10−15 + e2x − e− x + ctg x3
10.y = arcsin3x + ctg2 x + lg x + 5,87 10−21
11.S =3 ln cos3 x + x a+ c + 0,71 10−15 + lg x
12.y = arctgx2 −0,75 10−15 +ex −e−x +ctgx
13.y = ctg2x + cos x +lg x2 +3.5 10−11
14.y = arcsin x + ctgx + lg x +8.57 10−11
15. y = e x + cos x + ctgx + 0,35 10−12 + lg x e x − cos x
16.y = ctg2 x + lg x + 0,78 10−13 + ad−cb
17.y = arctgx +0,17 10−11 +ctgx +lg x + ca ++db
18.y = arcsin x + 0,37 10−12 + lg x + ctgx
19.y = arctgx −0,45 10−15 + e x −12 + ctgx
20. |
y = 5 |
|
|
x7 |
|
|
+ 0,35 10−17 |
+ ctgx + ln2 x |
|
|
|||||||
21. |
y = |
|
|
x7 |
|
|
+ 0,78 10−18 |
+ ctgx + lgx |
|
|
|
|
22.y = 3 arctgx + ca ++db +ctgx +lg x +0,35 10−11
23.y = 3 sinx + arctgx + 0,3 10−5 + lg x / 2
24.y = 5 cosx + ctgx2 + 0,7 10−11 + arctgx
25. |
y = 3 cos2 x + |
ex −e−x |
+ ctgx + 0,35 10−11 |
+ lg x |
||||
|
|
|
||||||
|
2 |
|
|
|||||
26. |
y = 5 x7 + |
|
cos3 x |
|
+ ctgx + lg x + 0,7 10−13 |
|
||
|
|
|
24
II. Алгоритмическая структура «ветвление»
2.1. Операции отношения и логические операции
Операции отношения могут иметь результатом только два значения – True (Истина) и False (Ложь), которые могут быть присвоены переменным типа Boolean (Табл. 1.7).
Таблица 1.7. Операции отношения
Операция |
Описание |
Операция |
|
|
Описание |
сравнения |
|
сравнения |
|
|
|
A = B |
Равно. True, если A = B |
A > B |
|
True, если А больше В |
|
A < > B |
True, если A не равно B |
A <= B |
|
А меньше или равно В |
|
A < B |
True, если A меньше B |
A >= B |
|
А больше или равно В |
|
Например: выражения 25 < > 30 |
→ True; 25 < 30 |
→ True; |
|||
25 > 30 |
→ False; Number = 2E+02, тогда |
Number |
> 100 → True. |
Логические операции используются в логических выражениях и их результатом являются логические значения. Некоторые, наиболее часто используемые, логические операции представлены в табл. 1.8
Таблица 1.8 Логические операции
Логическая операция |
Действие |
A And B |
Если связываемые значения имеют значение |
|
True, то и результат тоже True |
A Or B |
Если хотя бы одно из значений A или B будет |
|
True, то результат тоже True |
Not A |
Если A True, то результат False |
Операции отношения имеют бóльший приоритет, чем логические операции. Например: если а = 2: b = 2: c = 3, то
a |
= |
b And a |
< > c → True; |
a |
< |
b And a |
<> c → False; |
a |
= |
b Or a |
> c → True |
a |
< |
b Or a |
> c → False; |
Not (a = b) → False. |
|
|
|
|

25
2.2. Условный оператор IF … THEN
Линейная форма
Истина
Если условие ТО операторы1 [Иначе операторы2]
Ложь
Например: a = 0: b = 1
IF a < b THEN t = 15: v = 16 ELSE t = 17: v = 17
Результат: t =15, v = 16
Блочная форма IF условие1 THEN Блок операторов 1
ELSEIF условие2 THEN
Блок операторов 2
ELSE
Блок операторов 3
END IF
Например: a = 0: b = 1
IF a < b THEN t = 15: v = 16
ELSE t = 17: v = 17 END IF
Врезультатеработыэтогофрагментапрограммыполучитсяt = 15, v = 16
2.3. Примеры чтения программ с алгоритмом «ветвление»
Пример 2.1. Прочесть программу, написанную в модуле, сопровождающем лист Excel, записать результат, который появится после выполнения программы в ячейке листа A1.
A
1 = z(1; 4)
Function z(a, b) IF b * a < 3 THEN
z = Sqr(a) Mod Sqr(b) ELSE
z = Sqr(a) \ Sqr(b) End If
End Function

26
Решение:
1.Сопоставляем формальные параметры a, b при вызове программы с фактическими значениями, передаваемыми в программу при ее вызове:
a = 1; b = 4.
2.Переходим к выполнению логического оператора
а) b * a 4 1 = 4.
б) Полученное значение 4 меньше трех ?
в) Если ответ «да», то выполняем действия после слова Then(Тогда), в противном случае – после слова Else (Иначе). В данном случае ответ «да», следовательно:
г) z = a Mod
b = 1 Mod 2 =1
д) в ячейке A1 появится число 1
Пример 2.2. Программа-процедура сопровождает лист Excel. Оценить какой результат появится после завершения работы программы.
Sub main( ): Call prog (6, 2, 1):End Sub Sub prog (k, i, j)
Pi = Cells(1, 1) a = Pi / k
If a > Pi / 2 Then t = k * Cos(a) Else t = k * Sin(a) Cells(i, j) = t
End Sub
Решение:
1.Процедура main( ) предназначена для вызова программы-процедуры prog() для передачи в п/п фактических параметров. В результате, сопоставляя фактические и формальные параметры, получаем: k = 6; i = 2; j = 1
2.Управление передано п/ф Prog(6, 2, 1)
3.ИзячейкиА1 считываетсязначениепеременнойPi = ПИ() = 3,1415…
4.Рассчитывается переменная a = Pi / 6
5.Переходим к проверке условия в If: a > Pi / 2? Ответ: Нет!. Следовательно, выполняем действия после слова Else (Иначе), а именно:
t = 6 sin π6 = 6 12 = 3.
6. Результат записывается в ячейку Cells(2,1). В ней появляется число
3.
7. Управление возвращается в процедуру main( ), где работа программы заканчивается.

27
Пример 2.3. Составить программу для вычисления неэлементарной функции, заданной выражением:
|
|
x |
|
,если x < 0 |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y = x3,если 0 ≤ x ≤5 |
||||
|
x,если x >5 |
|||
4 |
||||
|
|
|
|
|
Решение:
Программируем заданное выражение, пользуясь таблицей стандартных функций (Табл. 4):
Function y(x) If x < 0 Then
y = Sqr(Abs(x))
ElseIf x >= 0 And x <= 5 Then y = x ^ 3
Else: y = x ^ (1 / 4) End Function
2.4. Задания для самостоятельного чтения программ со структурой «ветвление»
На рисунке представлен фрагмент листа Excel. Справа представлен текстподпрограммыфункцииz(а, b). ЧемубудетравенрезультатвячейкеС1?
Задание 1.
|
A |
B |
C |
1 |
2250,0E–01 |
1,21E+02 |
= z(7;5) |
Задание 2.
|
A |
B |
C |
1 |
103,0E–01 |
0,03E+02 |
=z(3;2E-02) |
|
|
|
|
Function z(a, b)
x = Cells(1, 1): y = Cells(1, 2) If a * b < 3.5E+01 Then
z = Sqr(x) Mod Sqr(y) Else
z = Sqr(x) \ Sqr(y) End If
End Function
Function z(t, u)
x = Cells(1, 1): y = Cells(1, 2) If t/u>2E+01 Then
z=x*y
Else z=x \ y End If
End Function

|
|
|
28 |
Задание 3. |
|
|
|
|
A |
B |
C |
1 |
1000,0E–01 |
0,49E+02 |
=z(4E0;20E-01) |
Задание 4.
|
A |
B |
C |
1 |
203,0E–01 |
0,051E+02 |
=z(6E+11;3E-02) |
Function z(a, b)
x = Cells(1, 1): y = Cells(1, 2) If b / a < 3 Then
z = Sqr(x) Mod Sqr(y) Else
z = Sqr(x) \ Sqr(y) End If
End Function
Function z(t, u)
x = Cells(1, 1): y = Cells(1, 2) If t/u < 2E+03 Then
z=x*y
else z=x \ y End If
End Function
Задание 5. Прочесть программу и определить, где на листе Excel и какой результат появится после ее выполнения.
Sub main(): Cells(1, 2) = prog4( - 6.6E+02;2): End Sub Function prog4(c; k)
If c < 0 Then t = k * Abs(c) Else t = k *Sqr(c) prog4 = t
End Function
Задание 6. Прочесть программу и определить, где на листе Excel и какой результат появится после ее выполнения.
Sub a(): t = prog1(-1, 0.2, 1, 1): End Sub Function prog1(a, b, i, j)
If a * b <= 0 Then t = a * Exp(b) Else t = a * Sqr(Abs(b)) Cells(i, j) = a * b
prog1 = t End Function
В следующих заданиях на рисунках представлен фрагмент листа Excel. Справа представлен текст программ. Где на листе Excel и какой результат появится после их выполнения?
Задание 7. |
Sub main(): Call prog2(2, 1, 3):End Sub |
|
sub prog2(k, i, j) |
|
PiK = Cells(1, 1):a = PiK / k |
|
If a < Pi Then t = k * Tan(a) Else t = k * Tan(a) ^ 2 |
|
Cells(i, j) = t |
|
End Sub |

Задание 8.
Задание 9.
Задание 10.
29
Sub main(): Cells(1, 2) = prog3(3.4E+02): End Sub Function prog3(c)
a = Cells(1, 1)
If a < > 0 Then t = c / a Else t = c / Exp(a) prog3 = t
End Function
Function Чет_нечет (m) As String If m Mod 2 = 0 Then
t$ = "Четное число"
Else: t$ = "Нечетное число" End If
Чет_нечет = t$ End Function
Function Кратность(m%, n%) As String If m% Mod n% = 0 Then
t$ = "Числа кратные"
Else: t$ = " Числа не кратные " End If
Кратность = t$ End Function
2.5. Задания для самостоятельного программирования неэлементарных математических функций
Составить программы для вычисления заданных функций.
|
|
x3 , |
x ≤1 |
|
|
x, |
|
x ≤ 2 |
|||
|
|
|
|
|
|
|
|
|
3 |
|
|
1. |
y = |
|
4 , 1 |
< x <10 |
2. |
y = |
|
, 3 |
≥ x > 2 |
||
x |
x |
|
|||||||||
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
5 |
, |
x ≥10 |
|
|
|
, |
x >3 |
||
|
|
x |
|
|
|
x |
|
||||
|
|
|
|
|
|
|
|
x, |
|
5 < x <10 |
|
|
|
5x, |
x < 0 |
|
|
|
|||||
|
y = |
|
|
|
|
|
y = |
|
2 , |
x ≥10 |
|
3. |
6x, 5 ≥ x ≥ 0 |
4. |
x |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
3 |
|
|
|
|
|
, |
x > 5 |
|
|
|
, |
x ≤5 |
||
|
|
x |
|
|
|
x |
|
|
x −1, |
|
x ≥ 0 |
|||
|
|
+5, |
|
−1 < x < 0 |
||
5. |
y = x |
|
||||
|
|
−7, |
|
x ≤ −1 |
||
|
x |
|
||||
|
1, |
|
|
|
x < 0 |
|
|
|
|
|
0 |
≤ x ≤ 3 |
|
7. |
y = 2, |
|
||||
|
|
|
|
|
x > 3 |
|
|
3, |
|
|
|||
|
sin x, |
|
x < 0 |
|||
|
|
|
|
|
|
30 ≥ x ≥ 0 |
9. |
y = cos x, |
|
||||
|
|
|
|
|
|
x > 30 |
|
tgx, |
|
|
|||
|
x, |
|
|
x ≤1 |
||
|
|
|
|
|
|
|
11. |
|
2 , |
1 < x < 2 |
|||
y = x |
||||||
|
|
3 |
|
|
|
|
|
|
, |
|
|
x ≥ 2 |
|
|
x |
|
|
|
||
|
x, |
|
|
x < 5 |
||
|
|
|
|
|
|
|
13. |
|
2 , |
10 ≥ x ≥ 5 |
|||
y = x |
||||||
|
|
3 |
|
|
|
|
|
|
, |
|
|
x >10 |
|
|
x |
|
|
|
||
|
x −1, |
|
x ≤ 0 |
|||
|
|
−2, |
|
1 ≥ x > 0 |
||
15. |
y = x |
|
||||
|
|
−3, |
|
x >1 |
||
|
x |
|
||||
|
x −1, |
|
x ≤ 2 |
|||
|
|
|
|
|
|
|
17. |
|
2 + 2, |
3 ≥ x > 2 |
|||
y = x |
||||||
|
|
3 |
|
|
|
|
|
|
+3, |
x > 3 |
|||
|
x |
|
||||
|
sin x, |
|
x ≤ 0 |
|||
|
|
|
|
|
|
45 ≥ x > 0 |
19. |
y = cos x, |
|
||||
|
|
|
|
|
|
x > 45 |
|
ctgx, |
|
30
cos x,
6. y = sin x,
сtgx,
ex ,
y = e−x ,
8.
1,
cos x,
10. y = sin x,
ctgx,
x,
y= x −1,
x2 ,
|
x, |
|
|
|
|
|
|
14. |
|
2 , |
|
y = x |
|||
|
|
3 |
|
|
|
, |
|
|
x |
|
|
|
x −1, |
||
|
|
−2, |
|
16. |
y = x |
||
|
|
−3, |
|
|
x |
||
|
− x, |
||
|
|
|
|
18. |
|
2 , |
|
y = x |
|||
|
|
|
|
|
x, |
|
|
|
|
|
|
|
x2 , |
||
|
|
|
|
20. |
|
|
|
y = x3, |
|||
|
|
4 , |
|
|
x |
||
|
|
|
|
x ≤ 0
x ≥ π/ 2
π/ 2 > x > 0
x>1 x < −1
−1 ≤ x ≤1
x≤ 0
x≥ π
0 < x < π
0 < x <1
x≥1
x≤ 0
x≤10
10 < x <15
x≥15
−1 < x < 0 x > 0
x≤ −1
x< 0
0 ≤ x ≤ 20 x > 20
0 ≤ x ≤15
x>15
x< 0