Завданняз програмування на VBA
2009рiк
Завдання1
Обчислити сумуперших 5-ти членiв арифметичної прогресiї за формулами:
Sn =n*(a1 + an)/2,
a1 =1,3*x2 + 4,8*cos2y,
an = a1+ d*(n-1),
де n = 5, y =1,87, d = 5,83, x = e2,5.
Розв'язок
Програмуємовiдповiдну програму на VBA, спочатку декларуючи потрiбнi змiннi, а потімзадаючи їхні значення. Далi програмуємо задані розрахункові формули. Для виводурезультату розрахунку в документ Word застосовуємо оператор WordBasic.Insert. Нижче наведений текст програмиЗавдання1, скопійований з редактора Visual Basic for Application.
Attribute VB_Name= «Модуль1»
'Iгор Каплик — жовтень, 2006 р.
Sub Завдання1()
Dim S, a1, an, x,y, d
Dim n
n = 5
d = 5.83
y = 1.87
x = Exp(2.5)
a1 = 1.3 * x ^ 2+ 4.8 * Cos(y) ^ 2
an = a1 + d * (n- 1)
S = n * (a1 + an)/ 2
WordBasic.Insert«Sn = „
WordBasic.InsertStr(S)
End Sub
Для виклику цієїпрограми на виконання iз середовища Word набираємо Сервіс → Макрос →Макроси → Завдання1 → Выполнить, або (Alt+F8) → Завдання1 →Выполнить. В результаті отримаємо таке: Sn = 1025.07072799505
Завдання2
Задано дiйснiчисла а, b, с (а ≠ 0). Знайти дiйснi корені рівняння
ax2 +bx + c = 0.
Якщо дiйснiх коренівнемає, на друк вивести повідомлення “Корені комплексні».
Розв'язок
Рішення цьогоповного квадратного рівняння виражаються формулою:
x1,2 =(-b ± D1/2) / 2a,
де D = b2– 4ac — детермінант. Якщо D
У вiдповiдностi зцим i програмуємо це завдання з використанням операторів умовного переходуIf… Then… Else. Оскільки в умові завдання не сказано про конкретні значеннякоефiцiєнтiв рівняння, будемо задавати їх всередині програми довільно.
Текст програмиЗавдання2 наведений нижче.
Attribute VB_Name= «Модуль2»
'Iгор Каплик — жовтень, 2006 р.
Sub Завдання2()
Dim X1, X2, D, a,b, c
a = 5
b = 7
c = -10
D = b ^ 2 — 4 * a* c
If D >= 0 Then
X1 = -b + Sqr(D):X2 = -b — Sqr(D)
WordBasic.Insert«X1 = „
WordBasic.InsertStr(X1)
WordBasic.ParaDown
WordBasic.Insert“X2 = „
WordBasic.InsertStr(X2)
Else:WordBasic.Insert “Корені рівняння комплексні!»
End If
End Sub
Задаючи значенняa = 5, b = 7, c = -10, отримаємо таку вiдповiдь:
X1 = 8.7797338380595
X2 =-22.7797338380595
Якщо ж задатизначення a = 5, b = 7, c = 10 отримаємо вiдповiдь:
Корені рівняння комплексні!
Завдання3
Скластиблок-схему та програму для обчислення вiдповiдних кожному варіанту виразів.Завдання виконати для таких варiантiв:
а) Змінна у приповтореннях циклу змінюється вiд початкового значення у = 1 до кінцевого у = 9з кроком 1.
б) Змінна у, що змінюєтьсяпри повтореннях циклу, є одновимірним масивом у = {1,5; 3; 0,6; 0,9}.
Вивести початковідані та результати обчислень у вигляді таблиці значень X, P, Z, де:
X = (ln y + a*cosc) / (ey – tg a – sin2 c)
sin X + |X – y|1/2* sin2 b при X > у
P = 1,35 * X2при X = у
ln |X + 1,45y| *tg (bc) при X
Z = P + 0,5b2+ cos (P – a)
а = 4,32; b =6,89; c = 171/2
Розв'язок
Не дивлячись нате, що варіанти а) i б) представляють собою два окремих завдання, ми їхпоєднаємо в одній програмі. Для цього нам буде потрібно ввести такі допомiжнiзмiннi:
n — кiлькiстьповторень циклу: для а) n = 9, для б) n = 4;
t(n) — масивзначень змінної у;
i — лічильник: дляа) i = 1, 2, ..., 9, для б) i = 1, 2, 3, 4;
var$ — строковаконстанта, яка може приймати значення «а)» або «б)» в залежностівiд вибраного варіанту розрахунків.
Блок-схемапрограми Завдання3 наведена на рисунку.
/>
Масив t(n)заповнюється в залежності вiд значення константи var$, яке вводиться у вiкнiInputBox «Номер варіанта розрахунку», показаному на рисунку нижче.
/>
Нижче наведенийтекст програми Завдання3.
Attribute VB_Name= «Модуль3»
'Iгор Каплик — жовтень, 2006 р.
Sub Завдання3()
Dim x, z, p, a,b, c, y, t(9), var$
Dim n, i
a = 4.32
b = 6.89
c = Sqr(17)
var$ =InputBox(«Введiть значення а) чи б) для номера варіанта» & var$,
«Номер варiантарозрахунку»)
If var$ ="" Then GoTo EndSub
WordBasic.Insert«a =» & Str(a): WordBasic.InsertPara
WordBasic.Insert«b =» & Str(b): WordBasic.InsertPara
WordBasic.Insert«c =» & Str(c): WordBasic.InsertPara
If var$ =«a)» Then n = 9
For i = 1 To n t(i) = i
Next
End If
If var$ =«б)» Then n = 4
t(1) = 1.5: t(2)= 3: t(3) = 0.6: t(4) = 0.9
End If
WordBasic.Insert«Варiант — » & var$ & "; n =" & Str(n)
WordBasic.InsertPara:WordBasic.Insert «y = „
For i = 1 To n
WordBasic.InsertStr(t(i)) & “; „
Next
WordBasic.InsertPara:WordBasic.InsertPara
WordBasic.Insert“| y | x | p | z |»
WordBasic.InsertPara
For i = 1 To n
y = t(i)
x = (Log(y) + a *Cos(c)) / (Exp(y) — Tan(a) — Sin(c) ^ 2)
If x > y Thenp = Sin(x) + Sqr(Abs(x — y)) * Sin(b) ^ 2
If x = y Then p =1.35 * x ^ 2
If x
z = p + 0.5 * b ^2 + Cos(p — a)
WordBasic.InsertStr(y) & "|" & Str(x) & "|" & Str(p) &"|" _
& Str(z)& "|"
WordBasic.InsertPara
Next
End Sub
При виборі варіантаа) отримаємо такий результат:
a = 4.32
b = 6.89
c =4.12310562561766
Варіант — a); n =9
y = 1; 2; 3; 4; 5;6; 7; 8; 9;
y| x | p | z |
1|6.16921036251777 | .625618747883335|23.5106051035047|
2|-.398860206108572 | .123457564548993| 23.3662361501907|
3|-7.67044472021885E-02|.195591633792759| 23.3769597339635|
4|-1.97047675076656E-02|.236271096733771| 23.3842595618880|
5|-5.44692028846779E-03|.266678755930375| 23.3903486513538|
6|-1.52164514501239E-03|.291309521209447| 23.3956949504055|
7|-4.16081978834523E-04|.312086912073758| 23.4005023378817|
8|-1.07952008248923E-04|.330073751199657| 23.4048895849838|
9|-2.51459877725051E-05|.345936497380926| 23.4089361125556|
При виборі варіантаб) розрахунку результат буде іншим:
a = 4.32
b = 6.89
c =4.12310562561766
Варіант — б); n =4
y = 1.5; 3; .6; .9;
y | x | p | z |
1.5|-1.45204156144273|-.04368718002541 | 23.3506847944415|
3 |-7.67044472021885E-02|.195591633792759| 23.3769597339635|
.6 |2.26534231611546 | 1.18799513455253| 23.9240910970412|
.9 |3.86856538687228 |-.104324993260116| 23.3476284888521|
Завдання4
Обчислитинаближене значення суми спадного ряду
S(t) = Σhn(t), n = 1 ÷ ∞,
hn(t)= [(n-1)/(n+1)]n(n-1)*(t2-1,6)1/2/(4,8c2+cosd)
з точністю ε= 10-5 для значень параметру t0≤ t ≤ t1iз крокомΔt.
Точністьобчислень визначається умовою R = |hn(t)| ≤ ε. При розробціпрограми передбачити переривання обчислень при n > n0на випадок,якщо виконання умови R ≤ ε не відбудеться при прогумованих n0 членівряду, де n0 — обмежувач просумованих членів ряду.
Вихiднi дані:
с = 2,9; d =0,41; t0= 2,5; t1 = 3,5; Δt = 0,01
Розв'язок
Визначимообмежувач просумованих членів ряду:
n0=(t1 — t0) / Δt = (3,5-2,5)/0,01 = 100
Нижче наведенапрограма Завдання4 даного завдання на язику VBA. Для забезпечення безумовноговиходу з програми ми використали мітку EndSub. Щоб простежувати процесобчислень, ми вивели на друк поточні значення величин n, t, hn та Sn.
Attribute VB_Name= «Модуль4»
'Iгор Каплик — жовтень, 2006 р.
Sub Завдання4()
Dim c!, d!, t0!,t!, t1!, dt!, ht!, S!, eps!, n, n0
c! = 2.9: d! =0.41: t0! = 2.5: t1 = 3.5: dt = 0.01
eps! = 0.00001:n0 = (t1! — t0!) / dt n = 0: S= 0
WordBasic.Insert" n t hn Sn"
WordBasic.InsertPara
For t! = t0! Tot1! Step dt
n = n + 1
If n = n0 ThenGoTo EndSub
ht! = ((n — 1) /(n + 1)) ^ (n * (n — 1)) * _
Sqr(t ^ 2 — 1.6)/ (4.8 * c ^ 2 + Cos(d))
S! = S! + ht!
WordBasic.InsertStr(n) & "; " & Str(t!) & "; " & _
Str(ht!) &"; " & Str(S!)
WordBasic.InsertPara
If ht!
Next
EndSub: End Sub
Після викликупрограми на виконання отримаємо такі результати:
n t hn Sn
1; 2.50; 5.223155E-02;5.223155E-02
2; 2.51; 5.834686E-03;5.806623E-02
3; 2.52; 8.248814E-04;5.889111E-02
4; 2.53; 1.155269E-04;5.900664E-02
5; 2.54; 1.604442E-05;5.902269E-02
6; 2.55; 2.216024E-06;0.0590249
Завдання5
Скластиблок-схему та програму для персонального комп’ютера за такої умови. Заданомасив Х = {x} з n = 20 чисел:
Х = {-20; 15; 3;-9; 7; -6; 14; -13; 6; -7;
9; -12; 5; 7; -2;17; 10; -1; 16; -3}
Знайти мiнiмальнепо модулю значення х та його номер k.
Розв'язок
Блок-схема даногоалгоритму представлена нижче на рисунку.
/>
Нижче наведенарозроблена програма на VBA.
Attribute VB_Name= «Модуль5»
'Iгор Каплик — жовтень, 2006 р.
Sub Завдання5()
Dim x(20), t, i,k
x(1) = -20: x(2)= 15: x(3) = 3: x(4) = -9: x(5) = 7
x(6) = -6: x(7) =14: x(8) = -13: x(9) = 6: x(10) = -7
x(11) = 9: x(12)= -12: x(13) = 5: x(14) = 7: x(15) = -2
x(16) = 17: x(17)= 10: x(18) = -1: x(19) = 16: x(20) = -3
t = Abs(x(1))
For i = 2 To 20
If Abs(x(i))
t = Abs(x(i)): k= i
End If
Next
WordBasic.Insert«Мiнiмальне абсолютне значення — х =» & Str(t) & _
"; k ="& Str(k)
End Sub
Після викликупрограми Завдання5 на виконання отримаємо такий результат:
Мiнiмальнеабсолютне значення — х = 1; k = 18
Завдання6
Скластиблок-схему та програму, яка б виводила на друк сгенерований, сформований тавпорядкований масиви. Генерувати i вивести на друк одновимірний масив Х = {xi},i = 1 ÷ n, n = 13 в дiапазонi цілих чисел [-30; 40]. Сформувати iвивести на друк масив Y iз елементів масиву Х, які стоять на парних місцях. Впорядкуватимасив Y за спаданням модулів його елементів.
Розв'язок. МасивХ має 13 елементів, з яких х1 = -30, хn = 40, а iншi змінюютьсявiд х1 з кроком величин dx = (хn — х1) / (n –1).
Формування масивуZ за спаданням модулів елементів масиву Y представляє собою процедуру сортування,для реалiзацiї якої є багато різних спецiалiзованих підпрограм. Але тут ми реалізуємонайпростіший алгоритм сортування вибором. Блок-схема алгоритму програмиЗавдання6 представлена на рисунку нижче.
/>
Текст програмиЗавдання6, скопійований з редактора Visual Basic, наведений нижче.
Attribute VB_Name= «Модуль6»
'Iгор Каплик — жовтень, 2006 р.
Sub Завдання6()
Dim x!(13),y!(6), z!(6), dx!, x1!, xn!, v!, n, m, i, j, k
n = 13: m = n / 2
x1! = -30: xn! =40
dx! = (xn! — x1!)/ (n — 1)
x!(1) = x1!
WordBasic.Insert«Масив Х:»: WordBasic.InsertPara
WordBasic.InsertStr(x!(1)): WordBasic.InsertPara
For i = 2 To n
x!(i) = x!(i — 1)+ dx!
WordBasic.InsertStr(x!(i)): WordBasic.InsertPara
Next
WordBasic.InsertPara
WordBasic.Insert«Масив Y:»: WordBasic.InsertPara
For i = 1 To m
y!(i) = x!(2 *i): z!(i) = y!(i)
WordBasic.InsertStr(y!(i)): WordBasic.InsertPara
Next
WordBasic.InsertPara
WordBasic.Insert«Масив Z:»: WordBasic.InsertPara
For i = 1 To m
k = i
For j = i + 1 Tom
If Abs(z!(j))> Abs(z!(k)) Then
k = j: v! =z!(i): z!(i) = z!(k): z!(k) = v!
End If
Next
WordBasic.InsertStr(z!(i)): WordBasic.InsertPara
Next
End Sub
Після викликупрограми Завдання6 на виконання отримаємо такi результати:
Масив Х:
-30
-24.16667
-18.33333
-12.5
-6.666665
-.8333311
5.000002
10.83334
16.66667
22.5
28.33334
34.16667
40
Масив Y:
-24.16667
-12.5
-.8333311
10.83334
22.5
34.16667
Масив Z:
34.16667
-24.16667
22.5
-12.5
10.83334
-.8333311
Завдання7
Скластиблок-схему та програму. Заданомасив Y = {yi}, i = 1÷ n, n = 8. Обчислити середнєарифметичне елементів цього масиву, менших заданого числа А. Розв'язок
Оскільки в завданніне вказані числа уi та А, візьмемо їх довільно:
Y = {-2; 15; 3;-9; 7; -6; 14; -13}, А = 6
/>
Програма будескладатися з алгоритму вибору з масиву Y елементів yk, менших А, iобчислення їх середнього арифметичного С за формулою:
С = Σ yk/ n, k = 1÷ n,
де n — кiлькiстьелементів масиву Y, менших А.
Блок-схемапрограми Завдання7 наведена на рисунку вище.
Текст програмиЗавдання7 наведено нижче.
Attribute VB_Name= «Модуль7»
'Iгор Каплик — жовтень, 2006 р.
Sub Завдання7()
Dim y!(8), a!,c!, i, j, k
y!(1) = -2: y!(2)= 15: y!(3) = 3: y!(4) = -9
y!(5) = 7: y!(6)= -6: y!(7) = 14: y!(8) = -13
n = 8: a! = 5
k = 0: c! = 0
For i = 1 To n
If y!(i)
End If
Next c! = c! / k
WordBasic.Insert«Середнє арифметичне С = » & Str(c!)
WordBasic.Insert", k =" & Str(k)
End Sub
Після викликупрограми на виконання отримаємо такий результат:
Середнєарифметичне С = -5.4, k = 5