Оператори циклу з умовою


 

Як було відмічено раніше, оператор циклу виду 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, авсередині циклу DoExit 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 "Населений", "Кількість", "Кількість", "Приріст"

Print "пункт", "народжених", "померлих", "населення"

For i% = 1 To 50

Print "_";

Next i%

Print

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%

Print

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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.059 сек.