Оператори циклу з умовою
Як було відмічено раніше, оператор циклу виду For...Nextзастосовуєтьсяувипадках, коли кількість повторень тіла циклу відома.
Для програмування циклічних процесів із заздалегідь невідомим числом повторень використовують різні форми оператора циклу з умовою.
Оператор циклу з умовою – це багаторядковий оператор, перший рядок якого починається з ключового слова Do(виконати), а останній – з ключового слова Loop(цикл).
Нехай, наприклад, в задачі прикладу 1 (ст. 58) потрібно не тільки знаходити квадрати натуральних чисел від 1 до 100, але й додавати їх. Результат на кожному кроці циклу будемо присвоювати змінній Сума типу Integer. Чи обчислиться сума всіх 100 доданків?
При встановленому числі повторень, рівному 100, на одному із кроків циклу виникне помилка, викликана спробою присвоїти змінній Сума значення, що перевищує число 32767, яке є максимальним значенням змінної типу Integer. Ця спроба викличе появу на екрані попередження, зображеного на рис. 4.3.
Чи можна уникнути такої ситуації? Один із способів полягає у використанні операторів циклу з умовою. Чотири можливих варіанти використання таких операторів циклу наведено в таблиці 4.1.
Рис. 4.3. Повідомлення про помилку Overflow
Розглянемо більш детально роботу циклів з умовою.
При використанні конструкції типу Whileтіло циклувиконується (випадок 1) або повторюється виконання тіла циклу (випадок 3), якщо значення <ЛогічнийВираз> дорівнює True (Істинне). В іншому випадку відбувається завершення циклу.
При використанні конструкції типу Untilтіло циклувиконується (випадок 2) або повторюється виконання тіла циклу (випадок 4), якщо значення <ЛогічнийВираз> дорівнює False (Хибне). В іншому випадку цикл завершується.
Таблиця 4.1
Оператори циклу з умовою
Do While<ЛогічнийВираз> <Тіло циклу> Loop | Do Until<ЛогічнийВираз> <Тіло циклу> Loop |
Do <Тіло циклу> Loop While<ЛогічнийВираз> | Do <Тіло циклу> Loop Until<ЛогічнийВираз> |
Якщо умова записана після Loop While(Until) (випадки 3і4), тіло циклу виконуватиметься хоча б один раз.
Якщо ж умова записана після Do While(Until) (випадки 1і2), то тіло циклу може і не виконатись жодного разу
Очевидно, що завжди можна замінити умову While умовою Until і навпаки, використавши логічне заперечення логічного виразу.
При програмуванні коду інколи виникає ситуація, коли необхідно перервати виконання циклу до його повного завершення. Це можна зробити за допомогою команди Exit. Ця команда завершує виконання циклу і передає управління наступній за циклом конструкції. Синтаксис цього оператора всередині циклу For:Exit For, авсередині циклу Do – Exit Do.
Приклад 6.
Умова X > 100 Or Time > 600 завершення циклу рівнозначна умові Not (X> 100 Or Time> 600) продовження циклу або X<= 100 And Time<= 600.
Приклад 7.
Розглянемо наступну задачу. Петро Петрович купив мішок цукру масою 50 кг і вирішив кожного разу брати з цього мішка десяту частину його вмісту доти, поки в мішку залишиться менше 30 кг цукру.
Один з варіантів програмного коду, що визначає номер звертання Петра Петровича до мішка і масу цукру, що залишається в мішку, може бути таким:
Private Sub Command1_Click()
Dim Маса As Single, i As integer
Маса =5 0: i=0
Print “Номер:”, “Залишок:”
Do ’ Перший рядок циклу
i = i + 1
Маса= Маса- Маса / 10
Print i, Маса
Loop Until Маса<30 ’ Останній рядок циклу
End Sub
Очевидно, що замість Until Maca < 30 можна написати:
WhileMaca >= 30.
У випадку, якщо початкова маса цукру буде не 50, а 25 кг, то результатом виконання програмного коду буде:
Номер: | Залишок: |
22.5 |
Незважаючи на те, що маса цукру менше 30 кг, Петро Петрович одного разу все-таки відсипле собі 2.5 кг цукру.
Щоб програма працювала коректно, потрібно записати таку конструкцію оператора циклу:
Do Until Маса < 30 ... Loop
В цьому випадку результат роботи програми матиме вигляд:
Номер | Залишок |
40.5 | |
36.45 | |
... | ... |
Приклад 8.
Розглянемо програмний код задачі обчислення суми квадратів натуральних чисел від 1 до 100 до тих пір, поки ця сума буде меншою від деякого заданого числа.
’ Максимальне значення змінної типу Integer
Const Max As Integer=32767
Private Sub Command1_Click()
Dim i As Integer, Sum As Integer
i=0: Sum=0
Do ‘ Перший рядок циклу
i=i+1
Sum=Sum+i^2
’ Останній рядок циклу
Loop While Sum < Max – i^2
Print “i :”, “Sum :”
Print i, Sum
End Sub
Обчислення суми буде продовжуватися до тих пір, поки значення змінної Sum не досягне встановленого нами значення.
Програмування циклічних обчислювальних процесів неможливе без організації вікон для введення інформації, що можна зробити за допомогою функції InputBox.
Функція InputBox забезпечує формування вікна для введення інформації з відображенням його заголовка і запрошенням користувача до введення інформації.
Функція виклику вікна InputBox має наступний синтаксис з відповідними іменованими аргументами:
InputBox(<повідомлення> [,<заголовок вікна>] [,<текст за замовчуванням>] [,<Хпоз>][,<Yпоз>] [,<файл підказки>] [,<контекст>])
<повідомлення>– визначає текст, що відображається в діалоговому вікні як запрошення;
<заголовок вікна>– текст заголовка діалогового вікна; якщо цей параметр не вказано, то відображається назва додатка;
<текст за замовчуванням> – визначає значення, що відображається в рядку введення;
<Хпоз>, <Yпоз> – параметри, що вказують координати верхнього лівого кута вікна; за замовчуванням вікно відображається посередині екрана;
<файл підказки>, <контекст>–два необов’язкові параметри, що дають змогу відкривати певні файли довідкової системи.
Приклад 9.
Розглянемо програмний код з використанням функції InputBox для формування вікна введення:
Private Sub Command1_Click()
Dim strPWD As String
strPWD = InputBox ( “Введіть пароль”, _
“Перевірка доступу”, “*****”)
End Sub
Результатом роботи програми буде вікно введення (рис. 4.5):
Рис. 4.5. Діалогове вікно
Завдання для виконання лабораторної роботи № 4
І. Завантажити середовище Visual Basic для створення нового проекту.
ІІ.Розглянути зразки форм та програмних кодів :
а) задачі табулювання функції , 2.6<=x<=8.8, ∆x=0.2, з використанням оператора FOR…NEXT. У поданих зразках табулювання функцій (рис. 4.6, 4.7, 4.8, 4.9, 4.10) результати виводяться у багаторядкове поле редагування. Для цього властивості MultiLine потрібно задати значення True - дозвіл об’єкту працювати більш ніж з одним рядком, а властивості ScrollBars необхідно задати значення 2 - Vertical – наявність вертикальної смуги прокручування.
Рис. 4.6. Зразок №1 розташування об’єктів на формі
Private Sub Command1_Click()
Dim newline, space As String
Dim x, xp, xk, dx As Single
xp = Val(Text1.Text)
xk = Val(Text2.Text)
dx = Val(Text3.Text)
newline = Chr(13) + Chr(10)
space = Chr(9)
Text4.Text = " x" + space + " y" + newline
For x = xp To xk Step dx
y = x ^ 2 + 10
Text4.Text = Text4.Text + Str(Format$(x, "0.000")) _
+ space + Str(Format$(y, "0.0000")) + newline
Next
End Sub
б) , x>=2.6, n=8, ∆x=0.1
Рис. 4.7. Зразок №2 розташування об’єктів на формі
Private Sub Command1_Click()
Dim newline, space As String
Dim n, i As Integer
xp = Val(Text1.Text)
n = Val(Text2.Text)
dx = Val(Text3.Text)
newline = Chr(13) + Chr(10)
space = Chr(9)
Text4.Text = " x" + space + " y" + newline
For i = 1 To n
x = xp + (i - 1) * dx
y = x ^ 2 + 10
Text4.Text = Text4.Text + Str(Format$(x, "0.000")) _
+ space + Str(Format$(y, "0.0000")) + newline
Next i
End Sub
в) задачі табулювання функції з використанням оператора DO WHILE…LOOP
Рис. 4.8. Зразок №3 розташування об’єктів на формі
Private Sub Command1_Click()
Dim newline, space As String
xp = Val(Text1.Text)
xk = Val(Text2.Text)
dx = Val(Text3.Text)
newline = Chr(13) + Chr(10)
space = Chr(9)
Text4.Text = " x" + space + " y" + newline
x = xp
Do While x <= xk
y = Exp(x) + 10
Text4.Text = Text4.Text + Str(Format$(x, "0.000")) _
+ space + Str(Format$(y, "0.0000")) + newline
x = x + dx
Loop
End Sub
г) задачі обчислення добутку
Рис. 4.9. Зразок №4 розташування об’єктів на формі
Private Sub Command1_Click()
mp = Val(Text1.Text)
mk = Val(Text2.Text)
p = 1
For m = mp To mk
p = p * m ^ 2
Next m
Text3.Text = Str(p)
End Sub
д)задачі обчислення суми
Рис. 4.10. Зразок №5 розташування об’єктів на формі
Private Sub Command1_Click()
ip = Val(Text1.Text)
ik = Val(Text2.Text)
s = 0
For i = ip To ik
s = s + i ^ 2
Next i
Text3.Text = Str(s)
End Sub
ІІІ. Використовуючи подані вище зразки форм та програмних кодів, розробити форми із заголовком “Циклічні процеси”, виконавши модифікацію форми та коду обробки події для командної кнопки для виконання наступних завдань:
1. | , а) , ; б) , , . | , . |
2. | , a) , ; б) , , . | , . |
3. | , a) , ; б) , , . | , . |
4. | , a) , ; б) , , . | , . |
5. | , a) , ; б) , , . | , . |
6. | , a) , ; б) , , . | , . |
7. | , а) , ; б) , , . | , . |
8. | , а) , ; б) , , . | , . |
9. | , а) , ; б) , , . | , . |
10. | , а) , ; б) , , . | , . |
11. | , а) , ; б) , , . | , . |
12. | , а) , ; б) , , . | . |
13. | , а) , ; б) , , . | . |
14. | a) , ; b) , , . | . |
15. | , a) , ; b) , , . | . |
ІV. Кожний із проектів зберегти в окремій папці Lab4_z1, Lab4_z2, Lab4_z3, Lab4_z4. Продемонструвати створені проекти викладачеві. Записати отримані результати.
V.Розглянути зразки форми (рис. 4.11, 4.12) та програмного коду задачі обчислення приросту жителів кожного з N населених пунктів на кінець року, якщо відомо кількість народжених та кількість померлих в населеному пункті на кінець поточного року:
Рис. 4.11. Зразок №6 використання вікон функції InputBox для введення даних
Рис. 4.12. Зразок №7 форми з результатами задачі
Програмний код задачі можна записати таким чином:
Private Sub Command1_Click()
Const N% = 3
Dim Nazva As String * 10
For i% = 1 To 50
Print "_";
Next i%
Print "Населений", "Кількість", "Кількість", "Приріст"
Print "пункт", "народжених", "померлих", "населення"
For i% = 1 To 50
Print "_";
Next i%
For i% = 1 To N%
Title$ = "Населений пункт"
Prt$ = "Назва " & i% & "-го населеного пункту"
Nazva = InputBox(Prt$, Title$)
Title$ = "Кількість народжених"
Prt$ = "К-ть народжених в " & i% & "-му населеному пункті"
nar = Val(InputBox(Prt$, Title$))
Title$ = "Кількість померлих"
Prt$ = "К-ть померлих в " & i% & "-му населеному пункті"
pom = Val(InputBox(Prt$, Title$))
r = nar - pom
Print Format(Nazva, "##########"), nar, pom, r
Next i%
For i% = 1 To 50
Print "_";
Next i%
End Sub
VІ. Використовуючи наведені вище зразки, виконати модифікацію форми та коду обробки події для командної кнопки відповідно до свого варіанту для розв’язування наступних задач:
1. Обчислити вартість товару та вартість товару із врахуванням торгової надбавки кожного з N видів товару, якщо задано ціну одиниці товару (грн.), кількість товару (шт.) та торгову надбавку (%) кожного виду товару.
2. Обчислити для кожного з N клієнтів залишок на банківському рахунку після проведення банківської операції, якщо відомо залишок на рахунку до операції, надходження та зняття коштів з рахунку кожного клієнта.
3. Обчислити для кожного з N об’єктів суму оплати виконаних будівельних робіт, якщо відомо відсоток виконання запланованого осягу робіт та загальна вартість будівельного проекту кожного об’єкта.
4. Обчислити для кожної з N груп відсоток студентів, що склали іспити, якщо відомо загальну кількість студентів групи; кількість студентів, що склали іспити без задовільних оцінок; кількість студентів, що склали іспити із задовільними оцінками в кожній групі.
5. Обчислити для кожної з N груп відсоток студентів, що не склали іспити, якщо відомо загальну кількість студентів; кількість студентів, що склали іспити без задовільних оцінок; кількість студентів, що склали іспити із задовільними оцінками в кожній групі.
6. Обчислити кількість жителів кожного з N населених пунктів на кінець року, якщо відомо кількість жителів на початку року, кількість прибулих, вибулих, народжених та померлих кожного населеного пункту.
7. Обчислити рівень виконання навчального навантаження (у відсотках) кожним з N вчителів школи, якщо відомо заплановану та фактично виконану кількість годин кожного вчителя.
8. Обчислити вартість товару кожного з N видів, якщо задано ціну одиниці товару та кількість товару кожного виду.
9. Обчислити вартість товару та вартість товару із врахуванням торгової знижки кожного з N видів товару, якщо задано ціну одиниці товару (грн.), кількість товару (шт.) та торгова знижка (%) кожного виду товару.
10. Обчислити суму оплати комунальних послуг кожного з N об’єктів, якщо задано місячну вартість комунальних послуг та кількість місяців, за які потрібно провести розрахунок для кожного об’єкта.
11. Обчислити урожайність (ц/га) зернових кожного з N фермерських господарств, якщо задано площу посівів (га) та валовий збір (т) кожного фермерського господарства.
12. Обчислити для кожного з N об’єктів суму оплати за водопостачання за звітний період, якщо задано вартість 1 м3 води та початкові і поточні покази лічильника кожного об’єкта.
13. Обчислити для кожного з N клієнтів суму оплати за електроенергію за звітний період, якщо задано вартість 1 кВт-год та початкові і поточні покази лічильника кожного клієнта.
14. Обчислити для кожного з N клієнтів вартість пального (грн), якщо задано ціну 1 л (грн) та витрати пального (л) кожним клієнтом.
15. Обчислити для кожного з N об’єктів суму оплати за опалення, якщо задано вартість опалення 1 м2 та опалювальна площа кожного об’єкта.
VІІ. Зберегти проект у папці Lab4_z5. Продемонструвати створений проект викладачеві. Записати отримані результати.
VІІІ. Захистити виконану роботу.
Контрольні запитання
1. Дайте визначення циклу.
2. Що необхідно знати для організації циклу?
3. Синтаксис оператора FOR…NEXT та його використанняу Visual Basic.
4. Дати визначення ”початкового значення”, ”кінцевого значення”, ”кроку” параметра циклу.
5. Синтаксис операторів DO WHILE…LOOPтаDO…LOOP WHILE і їх використання у Visual Basic.
6. Синтаксис операторів DO UNTIL…LOOPта DO…LOOP UNTIL і їх використання у Visual Basic.
7. Вкажіть відмінності між циклом з умовою і циклом з параметром.
8. Призначення команди EXIT.
9. Метод Print, його синтаксис та використання.
10. Функція Tab та її застосування.
11. Функція Spc та її застосування.
12. Функція Format, її синтанксис та застосування.
Дата добавления: 2016-07-27; просмотров: 1588;