Інструкція (цикл) while використовується в тому випадку, якщо деяку послідовність дій (інструкцій програми) треба виконати кілька разів, причому необхідне число повторень під час розробки програми невідомо і може бути визначено тільки під час роботи програми.
Типовими прикладами використання циклу while є обчислення із заданою точністю, пошук в масиві або в файлі.
У загальному вигляді інструкція while записується в такий спосіб:
while умова do begin // тут інструкції, які треба виконати кілька разів end
де умова – вираз логічного типу, визначальна умова виконання інструкцій циклу.
- Інструкція while виконується наступним чином:
- спочатку обчислюється значення виразу умова.
- Якщо значення виразу умова одно False (умова не виконується), то на цьому виконання інструкції while завершується.
- Якщо значення виразу умова одно True (умова виконується), то виконуються розташовані між begin і end інструкції тіла циклу. Після цього знову перевіряється виконання умови. Якщо умова виконується, то інструкції циклу виконуються ще раз. І так до тих пір, поки умова не стане хибним (False).
Алгоритм, відповідний інструкції while, представлений на рис. 2.14.
Увага!
Для того щоб інструкції циклу while, які знаходяться між begin і end, були виконані хоча б один раз, необхідно, щоб перед виконанням інструкції while значення виразу умова було істинно.
Рис. 2.14. Алгоритм інструкції while
Для того щоб цикл завершився, потрібно, щоб послідовність інструкцій між begin і end впливала на значення виразу умова (змінювала значення змінних, що входять у вираз умова).
Розглянемо програму, яка обчислює значення числа л з точністю, що задається користувачем під час роботи програми. В основі алгоритму обчислення лежить той факт, що сума ряду 1 – 1/3 + 1/5 -1/7 + 1/9 + … наближається до значення л / 4 при досить великій кількості членів ряду.
Кожен член ряду з номером n обчислюється за формулою: 1 / (2 * n – 1) і множиться на мінус один, якщо n парне (визначити, чи є п парних, можна перевіркою залишку від ділення п на 2). Обчислення закінчується тоді, коли значення чергового члена ряду стає менше, ніж задана точність обчислення.
Вид діалогового вікна програми під час її роботи наведено на рис. 2.15. Користувач вводить точність обчислення в поле введення (Editi). Після клацання на командній кнопці Обчислити (Buttonl) програма обчислює значення числа л і виводить результат в поле мітки (Labeii).
Текст програми приведений в лістингу 2.6. Як і в попередніх прикладах, основну роботу виконує процедура обробки події OnClick.
Рис. 2.15. Діалогове вікно програми Обчислення ПІ
Лістинг 2. 6. Обчислення числа я
unit pi_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = Class (TForm) Edit1: TEdit; // точність обчислення Button1: TButton; // кнопка Обчислити Label1: TLabel; Label2: TLabel; // поле виведення результату procedure ButtonlClick (Sender: TObject); private {Private declarations} public {Public declarations) end; var Form1: TForm1; implementation {$ R * .DFM} procedure TForm1.Button1Click (Sender: TObject); var pi: real; // обчислюється значення ПІ t: real; // точність обчислення n: integer; // номер члена ряду elem: real; // значення члена ряду begin i : = 0; n : = 1; t : = StrToFloat (editl.text); elem : = 1; // щоб почати цикл while elem & gt; = t do begin elem : = 1 / (2 * n - 1); if n MOD 2 = 0 then pi : = pi - elem else pi: = pi + elem; n: = n + 1; end; pi: = Pi * 4; labell.caption: = 'ПІ одно' + FloatToStr (pi) + # 13 + 'Підсумувати' + IntTostr (n) + 'членів ряду.'; end; end.