Завдання з програмування на 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.Insert Str(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 < 0, то рівняння не має дійсних коренів.
У в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.Insert Str(X1)
WordBasic.ParaDown
WordBasic.Insert "X2 = "
WordBasic.Insert Str(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*cos c) / (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кнi InputBox "Номер варіанта розрахунку", показаному на рисунку нижче.
Нижче наведений текст програми Завдання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.Insert Str(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 Then p = Sin(x) + Sqr(Abs(x - y)) * Sin(b) ^ 2
If x = y Then p = 1.35 * x ^ 2
If x < y Then p = Log(Abs(x + 1.45 * y)) * Tan(b * c)
z = p + 0.5 * b ^ 2 + Cos(p - a)
WordBasic.Insert Str(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+cos d)
з точністю ε = 10-5 для значень параметру t0 ≤ t ≤ t1 iз кроком Δ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! To t1! Step dt
n = n + 1
If n = n0 Then GoTo EndSub
ht! = ((n - 1) / (n + 1)) ^ (n * (n - 1)) * _
Sqr(t ^ 2 - 1.6) / (4.8 * c ^ 2 + Cos(d))
S! = S! + ht!
WordBasic.Insert Str(n) & "; " & Str(t!) & "; " & _
Str(ht!) & "; " & Str(S!)
WordBasic.InsertPara
If ht! <= eps! Then GoTo EndSub
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 Then
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.Insert Str(x!(1)): WordBasic.InsertPara
For i = 2 To n
x!(i) = x!(i - 1) + dx!
WordBasic.Insert Str(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.Insert Str(y!(i)): WordBasic.InsertPara
Next
WordBasic.InsertPara
WordBasic.Insert "Масив Z:": WordBasic.InsertPara
For i = 1 To m
k = i
For j = i + 1 To m
If Abs(z!(j)) > Abs(z!(k)) Then
k = j: v! = z!(i): z!(i) = z!(k): z!(k) = v!
End If
Next
WordBasic.Insert Str(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) < a! Then c! = c! + y!(i): k = k + 1
End If
Next c! = c! / k
WordBasic.Insert "Середнє арифметичне С = " & Str(c!)
WordBasic.Insert ", k =" & Str(k)
End Sub
Після виклику програми на виконання отримаємо такий результат:
Середнє арифметичне С = -5.4, k = 5
Похожие работы
... <> 10 Print Loop Різновидом циклу Do є Until-цикл, який виконується, поки умовний вираз помилковий: Do Until Счетчик=10 Print Счетчик=Счетчик+1 Loop 6. Excel VBA: Прийоми програмування Як визначити останній запис в таблиці Excel? Необхідно знайти останній запис в електронній таблиці. Це можна було б організувати функцією Application. SpecialCells (xlLastCell) Як відмінити вид ...
... адміністратор локальної мережі, який є у штатному розкладі і займається усіма проблемами, зв’язаними з комп’ютерами. Рисунок 1.2 – Функціональна схема автоматизованого робочого місця науково-технічної бібліотеки Метою розробки АРМ є - скорочення часу обробки оперативних даних, зменшення кількості помилок при обробці інформації. Основні функціональні вимоги до розроблюваного автоматизованого ...
... ї функції в залежності від значень вхідних даних згідно номера варіанта відповідного розділу „Методичних вказівок до виконання лабораторних робіт на тему “Програмування мовою VBA” із дисципліни “Інформатика”. 4) Розробка алгоритму та програми табуляції функції однієї змінної з використанням ітераційного циклу при розрахунку значень заданої функції згідно номера варіанта відповідного розділу „ ...
... оформления : ДСТУ 3008–95. – Киев: Госстандарт Украины, 1995. – 38 с. – (Государственный стандарт Украины). Додаток До пояснювальної записки дипломного проекту "Розробка автоматизованого робочого місця управління замовленнями у малому бізнесі (ПП "Сігма")" Вихідний код програми Public Class frmГлавная Inherits System.Windows.Forms.Form Private Готов As Boolean = False Private ...
0 комментариев