Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП Конспект лекций - Паскаль.doc
Скачиваний:
20
Добавлен:
30.11.2018
Размер:
1.46 Mб
Скачать

Тема 12: Оператор циклу з перед- і з постумовою

Оператор циклу з передумовою має загальний вид:

while логічне вираження do

begin

оператори тіла циклу

end;

де While (доки) і Do (виконувати) службові слова.

Робота оператора. Спочатку обчислюється логічне вираження і, якщо воно приймає значення True, то виконуються оператори тіла циклу, а якщо False , то керування передається на оператор після End.

Значення логічного вираження перевіряється перед кожним виконанням операторів тіла циклу.

Оператори тіла циклу, укладені в операторные дужки, являють собою складений оператор.

При використанні в циклічній частині оператора переходу Goto, що передає керування за межі циклу, можна перервати виконання циклу до його природного завершення.

Якщо в циклічній частині знаходиться лише один оператор, то операторні дужки Begin ... End можна опускати. Оператор циклу прийме вигляд:

while логічне вираження do оператор;

Іноді виникає ситуація, коли логічне вираження правдиве чи неправдиве при будь-яких вхідних у нього параметрах. Таке явище називається тавтологією. При тавтології True оператор зациклиться, при тавтології False – ніколи не виконається. Щоб таке не трапилося, параметри логічного вираження повинні змінюватися в тілі циклу.

Приклад, у якому логічне вираження завжди щире, тобто маємо тавтологію True, при якій оператор зациклиться:

var x: real;

begin

x :=0;

while x<>2 do

begin

writeln (x:6:2);

x:=x+0.3

end

end.

Тавтологія тут виникла через помилку в логічному вираженні: замість x<>2 потрібно було написати x<=2.

Приклад. Обчислити y=x2 при x=2, 4, 6, 8, 10.

var x,y: integer;

begin

x:=2;

while x<=10 do

begin

y:=x*x;

writeln(x:3,y:5);

x:=x+2;

end;

end.

При введенні даних в операторі циклу можна використовувати стандартну функцію EoLn. Вона має значення False поки не натиснута кл.Enter.

Наприклад:

var a,n:integer;

begin

n:=0;

writeln(‘кл.Enter не натиснута і знач. Функції EoLn=’,eoln);

while not eoln do {поки немає кінця рядка, виконувати цикл)

begin

read(a);

n:=n+a;

end;

writeln(‘n=’,n);

writeln(‘кл.Enter натиснута і значення функції EoLn=’,eoln);

end.

У цьому прикладі тіло циклу буде виконуватися доти, поки не буде натиснута кл. Enter, тобто поки при читанні даних не зустрінеться символ кінця рядка. При цьому функція EoLn прийме значення True і цикл припиниться.

Приклад. Підрахувати у введеному рядку кількість символів. Ознакою кінця рядка вважати натискання кл.Enter.

var

simbol: char;{символ введеного рядка}

n: integer;

begin

writeln(‘Введіть довільний рядок:’);

while not eoln do {поки немає кінця рядка, виконувати цикл}

begin

read(simbol);

n:=n+1;

end;

writeln;

writeln(‘У введеному рядку усього’,n’,символів’);

end.

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

repeat

оператори тіла циклу

until логічне вираження;

де Repeat(повторити) і Until(доти) службові слова.

Робота оператора. Спочатку виконуються оператори циклічної частини, а потім перевіряється умова виходу з циклу. Якщо значення логічного вираження False, то виконання циклу повториться. Вихід з циклу здійснюється при правдивому значенні логічного вираження. У зв'язку з тим, що умова перевіряється після виконання циклічної частини, оператори циклу з постумовою завжди виконуються хоча б один раз. Цим оператор циклу з постумовою відрізняється від оператора циклу з передумовою.

Нижня границя операторів тіла циклу чітко позначена словом Until, тому циклічну частину не укладають в операторні дужки Begin...End, але якщо їх і поставити – помилки не буде.

При використанні в циклічній частині оператора переходу Goto, що передає керування за межі циклу, можна перервати виконання циклу до його природного завершення.

Приклад 1.Обчислити y=x^2 при x=0,2,4,6,8,10.

var x,y:integer;

begin

repeat

y:=x*x;

writeln(‘x=’,x,’y=’:5,y);

x:=x+2

until x>10

end.

Приклад 2.Обчислити y=x^2 при x=2,2.5,3,3.5.

var x,y:real;

begin

x:=2;

repeat

y:=x*x;

writeln(‘x=’,x:1:1,’y=’:3,y:2:3);

x:=x+0.5

until x>3.5

end.

Після Repeat і перед Until “;” можна не ставити, тому що ці слова є й операторними дужками. Але, якщо “;” і поставити, те це не буде помилкою.

В прикладі 1 перше значення аргументу x=0 не задано, тому що нульове значення привласнюється автоматично.

Питання для контролю.

1. Які оператори циклу маються в Pascal-і?

2. Як відбувається вхід у цикл і вихід з циклу?

3. Оператор циклу з передумовою. Робота оператора.

4. Як можна перервати виконання циклу до його природного завершення?

5. Явище тавтології і її попередження.

6. Використання функції Eoln при введенні даних.

7. Оператор циклу з постумовою. Робота оператора.

8. Чому циклічну частину в операторі циклу з постумовою не потрібно укладати в операторні дужки?

9. У чому полягає відмінність оператора з постумовою від оператора циклу з передмовою?

10. Чи можна ставити “;” після Repeat і перед Until?