Завдання з програмування на Visual Basic

СОДЕРЖАНИЕ: Обчислення наближеного значення суми спадного ряду. Складання блок-схеми та програми, яка б виводила на друк сгенерований, сформований та впорядкований масиви. Використання операторів умовного переходу If - Then - Else. Розроблення програми на VBA.

Завдання з програмування на VBA

2009 рiк


Завдання 1

Обчислити суму перших 5-ти членiв арифметичної прогресiї за формулами:

Sn = n*(a1 + an )/2,

a1 = 1,3*x2 + 4,8*cos2 y,

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) Thenn = 9

For i = 1 To nt(i) = i

Next

End If

If var$ = б) Thenn = 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!) / dtn = 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 thn 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! Thenc! = c! + y!(i): k = k + 1

End If

Nextc! = c! / k

WordBasic.Insert Середнє арифметичне С = Str(c!)

WordBasic.Insert , k = Str(k)

End Sub

Після виклику програми на виконання отримаємо такий результат:

Середнє арифметичне С = -5.4, k = 5

Скачать архив с текстом документа