
- •Практична робота № 9 Тема:Реалізація циклічних алгоритмів
- •Загальні відомості
- •2.1. Оператор циклу з передумовою (while)
- •2.2. Оператор циклу з постумовою (repeat...Until)
- •2.3. Оператор циклу з параметром (for-do)
- •Практична частина
- •Додаток Приклад програми з використанням операторів повторення
- •Реалізація задачі за допомогою оператора повторення з передумовою
- •Реалізація задачі за допомогою оператора повторення з постумовою
- •Реалізація задачі з використанням оператора повторювання з параметром
- •Варіанти завдань
„Програмування” Практична робота №9
Практична робота № 9 Тема:Реалізація циклічних алгоритмів
Мета роботи: Закріпити навички складання програм для реалізації циклічних алгоритмів
Загальні відомості
2.1. Оператор циклу з передумовою (while)
У практиці програмування цикли — повторювані виконання тих самих простих або складених операторів — грають дуже важливу роль. Існує три стандартних способи організації циклічних обчислень.
Розглянемо оператор циклу з передумовою,
WHILE Умова DO Оператор;
Конструкція WHILE...DO переводиться як «поки...робити». Оператор (простий або складений), що стоит після службового слова DO і має назву тіло циклу, буде виконуватися циклічно, поки виконується логічна умова, тобто поки значення «Умови» дорівнює True. Сама умова циклу може бути логічною константою, перемінної або вираженням з логічним результатом.
Умова виконання тіла циклу WHILE перевіряється до початку виконання кожної ітерації. Тому, якщо умова відразу не виконується, то тіло циклу ігнорується і буде виконуватися оператор, що коштує відразу за тілом циклу.
При написанні циклів із передумовою варто пам'ятати про дві речі. По-перше, щоб цикл мав шанс коли-небудь завершитися, вміст його тіла повинний обов'язково впливати на умову циклу. По-друге, умова повинна складатися з коректних виражень і значень, визначених ще до першого виконання тіла циклу. Пояснимо сказане прикладом, що обчислює значення факторіала 10!
VAR Factorial, N : Integer;
BEGIN
Factorial := 1; { стартове значення факторіала = ПРО! }
N := 1; {стартове значення для умови циклу}
WHILE N<=10 DO
begin { початок тіла циклу WHILE }
Factorial:=Factorial*N;{ обчислення факторіала N! }
N := N + 1 { N повинно мінятися в циклі }
end; { кінець тіла циклу WHILE }
WriteLn( Factorial ); { висновок результату розрахунку }
END.
Зверніть увагу на присвоювання N! перед циклом. Без нього значення N може бути будь-яким, і умова може бути некоректною, не говорячи вже про саме значення факторіала. Значення N міняється усередині циклу. При цьому набагато безпечніше так писати тіло циклу, щоб оператор, що впливає на умову, був останнім у тілі. Це гарантує від небажаних переборів. Якщо, скажемо, поставити рядок N:=N+1; перед обчисленням значення Factorial, то результатом програми буде значення 11!. Виправити помилку можна, замінивши стартове значення N на 0, а умову — на N<10. Але від цього програма навряд чи стане наочніше.
Оскільки циклові WHILE «усе рівно», що відбувається в його тілі, тіло може містити інші, вкладені, цикли.
2.2. Оператор циклу з постумовою (repeat...Until)
Розглянутий вище оператор циклу з передумовою вирішує, виконувати своє чи тіло ні, до першої ітерації. Якщо це не відповідає логіці алгоритму, то можна використовувати цикл із постумовою, в якому вирішуються, робити чи ні чергову ітерацію, лише після завершення попередньої ітерацію. Це має принципове значення лише на першому кроці, а далі цикли поводяться ідентично.
Цикл із постумовою завжди буде виконаний хоча б один раз.
Оформляється такий цикл за допомогою службових слів REPEAT і UNTIL (повторювати до):
REPEAT
Оператор 1;
Оператор2;
- - - - - - - -
Оператор
UNTIL Умова;
Перше з них повідомляє цикл і відкриває його тіло, а друге — закриває тіло і містить умову закінчення циклу. Тіло циклу може бути порожнім або містити один і більш операторів. В останньому випадку слова BEGIN і END не потрібні: їхню роль грають слова REPEAT і UNTIL.
Умова — це логічне значення, перемінна або вираження з логічним результатом. Але працює воно тут зовсім не так, як у циклі WHILE. Якщо в циклі WHILE мається на увазі алгоритм «поки умова виконується, виконувати оператори тіла циклу», то цикл REPEAT...UNTIL відповідає алгоритмові «виконувати тіло циклу, поки не стане дійсною умова».
Іншими словами, у циклі з REPEAT...UNTIL умовою продовження ітерацій буде невиконання умови (його значення False). Гарною ілюстрацією до вищесказаного може бути конструкція «вічного циклу»:
REPEAT UNTIL False;
Цей цикл порожній і ніколи не припиняється. Він гарний тільки у випадку, коли потрібно заблокувати програму, і, можливо, весь комп'ютер. Перервати цикл можна спеціальними операторами: Exit, Halt. Це має сенс, якщо умов завершення програми багато або вони дуже складні.
Якщо умова кінця циклу більш гнучка, чим константа False, то в тілі циклу повинні міститися оператори, що впливають на саму умову. Про попередню коректність умови, як у випадку циклу WHILE, піклуватися вже необов'язково.