Вміст тіла циклу має обов’язково впливати на умову циклу для уникнення за циклювання (в середині тіла циклу має бути зміна параметру циклу);
Про попередню коректність умови, як у випадку циклу с while турбуватися не обов’язково (до початку циклу необов’язкові початкові установки змінних які управляють умовою циклу).
program Celsius_Repeat_Until;
{$APPTYPE CONSOLE}
var C_f,C_L,T,K,shag:real;
i:integer;
begin
writeln('Enter first temperature');
readln(C_f);
writeln('Enter last temperature');
readln(C_L);
writeln('Enter shag');
readln(shag);
T:=C_f;
For i:=1 to 20 do write('*');writeln;
writeln('* Celcius *','Kelvin':7,'*':2);
For i:=1 to 20 do write('*');writeln;
repeat
K:=T+273.15;
writeln('*',T:6:1,'*':4,K:7:2,'*':2);
T:=Shag+T;
Until T>C_L;
For i:=1 to 20 do write('*');writeln;
readln
end.
Якщо умова в тілі циклу не змінюється, цикли while, repeat перетворюються в нескінченні цикли, наприклад:
while true do ;
repeat until false;
Ці цикли пусті і ніколи не закінчуються. Перервати цикл можна спеціальними операторами або додатковими умовами.
Порівняння роботи операторів while, repeat и for
Відмітимо відмінності та особливості гарного стиля роботи с циклічними операторами
№ |
Цикл з передумовою while (поки умова істинна) |
Цикл з постумовою repeat ... until (доти, доки умова істинна) |
Цикл з лічильником for |
1 |
До початку циклу мають бути зроблені початкові установки змінних, що керують умовою циклу, для коректного входу в цикл |
До початку циклу необов’язкові початкові установки змінних, що керують умовою циклу |
Початкова установка лічильника циклу до заголовку не потребується |
2 |
В тілі циклу мають бути присутніми оператори, що змінюють змінні умови таким чином, щоб цикл через декілька ітерацій закінчився |
Зміна в тілі циклу лічильника не допускається |
|
3 |
Цикл працює, поки умова істина (поки True) |
Цикл працює, доки умова хибна ( поки False) |
Кількість ітерацій циклу незмінна і точно визначена значеннями нижньої і верхньої межі і кроку циклу |
4 |
Цикл завершується, коли умова стає хибною (до False) |
Цикл завершується, коли умова стає істинною (до True) |
|
5 |
Цикл може не виконатися жодного разу, якщо початкове значення умови на вході в цикл дорівнює False |
Цикл обов’язково виконується щонайменше одноразово |
Цикл може не виконатися жодного разу, якщо крок циклу буде змінювати значення лічильника від нижньої межі в напрямку протилежному верхній межі |
6 |
Якщо в тілі циклу більше за один оператор, треба використовувати операторні дужки |
Незалежно від кількості операторів в тілі циклу використання операторних дужок не потребується |
Якщо в тілі циклу більше за один оператор, треба використовувати операторні дужки |
7 |
Нормальний хід роботи циклу може бути порушений спеціальними операторами (наприклад, процедурами Break або Continue) |
Розглянемо наступні завдання.
Задача 1. Визначити значення змінної P після виконання наступних операторів:
P:=1; j:=1; while j<6 do j:=j+1; P:=P*j;
Вірна відповідь 6
Задача 2. Визначити значення змінної P після виконання наступних операторів:
P:=1; j:=2; while j>2 do begin P:=P+j; j:=j–1 end;
Вірна відповідь 1
Задача 3. Визначити значення змінної P після виконання наступних операторів:
P:=1; j:=6; while j>6 do j:=j–1; P:=P*j;
Вірна відповідь 6
Задача 4. Визначити значення змінної P після виконання наступних операторів:
P:=1; j:=2; repeat P:=P*j; j:=j–1 until j<=1;
Вірна відповідь 2
Задача 5. Визначити значення змінної P після виконання наступних операторів:
P:=0; K:=–2; For i:=2 to K do P:=P+i;
Вірна відповідь 0
Задача 6. Визначити значення змінної P після виконання наступних операторів:
P:=1; n:=2; For i:=2 downto n do P:=P*i;
Вірна відповідь 2
Задача 7. Вкажіть номер рядка в якому є помилка. Поясніть свою відповідь.
{01} var k, i :integer; y:real;
{02} begin
{03} k:= 0; y:=1;
{04} for i:=–1 to cos (k) do y:=2*y; //cos(0)=1
{05} writeln(y);
{06} end.
Вірна відповідь: Помилка в рядку 04. За визначенням циклу For, у якості кінцевого значення параметру циклу не може бути використаний вираз cos (k), тому що тип його результату Extended не є порядковим
Задача 8. Вкажіть номер рядка в якому є помилка. Поясніть свою відповідь.
{01} var j, i :integer;
{02} begin
{03} j:=0;
{04} for i:=j-1 to j+4 do i:= i+1;
{05} writeln(j);
{06} end.
Вірна відповідь: Помилка в рядку 04. Забороняється змінювати параметр циклу For зсередини тіла циклу