- •3.1. Найпростіші конструкції мови Турбо Паскаль
- •Алфавіт мови.
- •Типи даних.
- •Константи та змінні.
- •Арифметичні вирази.
- •3.2. Лінійні програми в Турбо Паскалі Загальна структура програми.
- •Присвоювання значень.
- •Введення-виведення даних.
- •Лінійні програми.
- •3.3. Розгалужені програми в тп
- •Логічні вирази.
- •Умовний оператор.
- •Оператор вибору case.
- •Оператор безумовного переходу.
- •3.4. Циклічні програми в тп
- •§2. Оператор циклу з параметром.
- •Оператор циклу з передумовою.
- •Оператор циклу з післяумовою.
- •3.5. Нестандартні типи даних
- •Скалярні типи даних.
- •Масиви даних.
- •Двовимірні масиви.
- •3.6. Підпрограми
- •Функції.
- •Процедури .
Оператор циклу з передумовою.
Для організації циклу з визначеною та з невідомою заздалегідь кількістю повторень призначено оператор циклу з передумовою:
WHILE <ЛВ> DO <оператор> ;
Оператор ( простий або складений ), що стоїть за службовим словом DO і зветься тілом циклу, буде виконуватися циклічно, поки виконується логічна умова , тобто поки значення <ЛВ>≡TRUE. Сама умова може бути логічною константою, змінною або виразом з логічним результатом. Умова перевіряється до початку виконання кожного повторення. Тому, якщо умова одразу ж не виконується, тіло циклу не буде виконано жодного разу, а управління передасться оператору, що стоїть одразу за тілом циклу.
При використанні оператора циклу с передумовою треба пам’ятати таке:
щоб цикл мав можливість коли-небудь завершитися, дані. які формують умову, повинні змінюватися в тілі циклу;
умова повинна складатися із коректних виразів та значень, визначених ще до першого виконання тіла циклу.
Приклад. Скласти програму обчислення N! .
PROGRAM FACTOR IAL;
{ Обчислення N! }
VAR
K,N,Factorial : INTEGER;
BEGIN
Factorial:= 1; {0!=1}
K:=1; READ (N) ;
WHILE K<=N DO
BEGIN Factorial:= Factorial*K; K:= K+1 END ;
WRITELN (N,’!= ‘, Factorial)
END.
Поки значення змінної K буде менше за N або буде дорівнювати N , буде накопичуватися добуток, що передбачено складеним оператором , який стоїть за службовим словом DO і є тілом циклу. В тілі циклу також відбувається зміна значення змінної K на 1, що забезпечує закінчення циклічного процесу і вихід із циклу . Наступний оператор , оператор виведення , дає змогу одержати на екрані результат в зручному для розуміння вигляді. Так, якщо , скажімо ви ввели значення N=5, на екрані побачите:5!= 120. Якщо надати змінній N значення 0, тіло циклу не виконається жодного разу і змінна Factorial збереже значення 1.
Оператор циклу з передумовою відповідає базовій структурі “ЦИКЛ ПОКИ”.
Оператор циклу з післяумовою.
Попередній оператор перевіряє умову виходу із циклу перш, ніж виконувати оператори тіла циклу. Базова структура “ЦИКЛ ДО” вимагає виконання тіла циклу до першої перевірки умови виходу із циклу. Такій структурі відповідає оператор циклу з післяумовою:
REPEAT
<оператор 1>;
<оператор 2>;
………………
<оператор n>
UNTIL <ЛВ>;
Службове слово REPEAT оголошує цикл і відкриває його тіло, яке складають наступні оператори. Службове слово UNTIL закриває тіло циклу , а <ЛВ> містить умову виходу із циклу.
Тіло циклу може бути пустим або містити один чи більше операторів. В останньому випадку операторні дужки не потрібні: їх роль виконують службові слова REPEAT…UNTIL.
Умова виходу із циклу – це логічне значення, змінна або вираз з логічним результатом. Але на відміну від оператора циклу з передумовою , алгоритм виконання оператора циклу з післяумовою має такий зміст: виконувати тіло циклу, поки не стане істинною умова, тобто поки <ЛВ> не набере значення TRUE. Якщо це не відбудеться ніколи, цикл буде вічним:
REPEAT UNTIL FALSE;
Це приклад пустого циклу, який ніяких дій не виконує, але і ніколи не припиняється.
В тілі циклу повинні міститися оператори, що змінюють значення змінних, які визначають, в свою чергу, значення <ЛВ>. В наведеному вище прикладі ця вимога не виконана.
Оператор циклу з післяумовою так само, як і оператор з передумовою, зручно використовувати для програмування ітераційних алгоритмів.
Приклад. Скласти програму для обчислення значення функції
…
…
з похибкою ε , тобто знайти суму нескінченого ряду з точністю ε.
аким
чином, умовою виходу із циклу буде
виконання нерівності
<
ε, де загальний член ряду
.
При обчисленні зручно використати
рекурентну формулу:
.
Програма матиме вигляд:
PROGRAM EX ;
VAR
X,EPS,AN,S: REAL;
N: INTEGER;
BEGIN
WRITELN(‘ВВЕСТИ X,EPS);READ(X,EPS);
N:=0;AN:=1;S:=1;
REPEAT
N:=N+1;
AN:=AN*X/N;
S:=S+AN
UNTIL ABS(AN)<EPS;
WRITELN(‘S= ‘,S,’ N=’,N)
END.
Завершуючи цю главу, треба згадати, що в базових структурах блоки “процес” можуть означати не лише лінійний процес обчислення за формулою, а будь-який складний процес, в тому числі розгалужений та циклічний. Тоді в тіло циклу треба вводити не лише оператори присвоювання, а також умовні оператори та оператори циклу. Такі алгоритми та програми звуться “розгалуження в циклі” та “цикл в циклі”. Щодо останніх, то глибина вкладення може бути досить великою і обмежується не можливостями Турбо Паскалю, а можливостями комп’ютера.
