Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PASСAL_a4_2007.doc
Скачиваний:
32
Добавлен:
13.09.2019
Размер:
2.51 Mб
Скачать

2. Цикл с предусловием while

Если какое-то действие или несколько действий необходимо выполнить много раз, но заранее неизвестно сколько раз и это зависит от какого-то условия, то тогда следует воспользоваться циклом с предусловием, имеющим вид:

WHILE <условие> DO <оператор>

Конструкция читается: пока выполняется условие делать ...

Условие - это логическое выражение, истинность которого проверяется в начале каждой итерации (повторения).

Оператор, следующий за ключевым словом DO, называется телом цикла. На месте тела цикла может быть записан как простой оператор, так и составной (т.е. группа операторов, ограниченная операторными скобками BEGIN ... END). В этом случае цикл с предусловием будет иметь вид:

WHILE <условие> DO

BEGIN

<операторы>

END

Перед каждым новым выполнением тела цикла проверяется условие и если оно истинно (TRUE), то выполняется тело цикла, а иначе цикл заканчивается и выполняется команда, следующая за данной алгоритмической конструкцией.

Рассмотрим пример.

program SUM1;

uses Crt;

var N,sum,I,M:integer;

begin { - начало тела главной программы}

clrscr; writeln;

writeln('<<< вычисления суммы квадратов первых N чисел >>>');

writeln('<<< до тех пор пока сумма не превысит число М >>>');

writeln;

write('М = ? '); readln(M);

sum:=0; N:=1;

while sum<M do

begin

sum:=sum+N*N;

N:=N+1

end;

sum:=sum-N*N; N:=N-1; {Попробуйте сами определить, что это за операция}

writeln('Сумма квадратов ',N:4,' первых чисел равна ',sum);

readln

end.

3. Цикл с постусловием repeat

Рассмотренный выше цикл с предусловием устроен так, что проверка условия производится до первой итерации (до первого выполнения тела цикла). Иногда это не соответствует логике алгоритма. Например, в тех случаях, когда проверка условия актуальна лишь после завершения предыдущего шага. Тогда нам идеально подходит цикл с постусловием REPEAT.

Оператор цикла REPEAT организует выполнение цикла, состоящего из любого числа операторов, с неизвестным заранее числом повторений. Тело цикла выполняется хотя бы один раз. Выход из цикла осуществляется при истинности (!) некоторого логического выражения.

Общий вид цикла с постусловием:

REPEAT

<оператор1>;

<оператор2>;

...

<операторN>;

UNTIL <условие>;

Операторы, записанные между ключевыми словами REPEAT и UNTIL, составляют тело цикла. Так как слова REPEAT и UNTIL являются своеобразными операторными скобками, то точку с запятой перед словом UNTIL ставить не нужно. Тело цикла может быть пустым или содержать один или более операторов.

Условие, записанное после ключевого слова UNTIL, проверяется в конце каждой итерации (после выполнения тела цикла). Условие - это логическое значение, переменная или выражение с логическим результатом. Но важно обратить внимание, что оно работает здесь не совсем так, как в цикле WHILE. Если в цикле WHILE подразумевается алгоритм "пока условие истинно, выполнять операторы тела цикла", то цикл REPEAT соответствует алгоритму "выполнять тело цикла, пока не станет истинным условие". Иными словами, если условие является истинным (True), то выполнение цикла завершается. Если условие не выполняется (является ложным - False), то вновь выполняется тело цикла.

Иллюстрацией к вышесказанному может быть конструкция вечного цикла:

REPEAT UNTIL False;

Этот цикл пустой и никогда не прекращающийся. Он хорош только тогда, когда нужно заблокировать программу. Но вообще на совести программиста лежит выбор корректного условия, т.е. такого, которое на каком-то шаге итерации станет False.

Рассмотрим пример программы с использованием цикла REPEAT.

program MAX_repeat;

uses Crt; { подключение библиотеки }

var A,B:integer;

begin { - начало тела главной программы}

clrscr; gotoXY(10,5); TextColor(Green);

writeln('<<НАХОЖДЕНИЕ МАКСИМАЛЬНОГО ИЗ ДВУХ ЦЕЛЫХ ЧИСЕЛ>>');

writeln; writeln(' программа закончит работу, если оба числа равны 0');

repeat { начало цикла }

write('Первое число = ? '); readln(A);

write('Второе число = ? '); readln(B);

if A=B then writeln('Числа равны')

else begin

write('Максимальное из двух чисел ');

if A>B then writeln(A)

else writeln(B)

end

until (A=0) and (B=0); { конец цикла }

end.

Данная программа будет выполняться до тех пор, пока оба введенных числа не станут равны 0. Вообще цикл REPEAT достаточно часто используется с целью многократного повторения выполнения программы с различными данными.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]