3. Цикл с постусловием
REPEAT
оператор;
...
оператор
UNTIL выражение
Операторы между словами REPEAT и UNTIL повторяются, пока логическое выражение является ложным (False). Как только логическое выражение становится истинным (True), происходит выход из цикла.
Так как выражение оценивается после выполнения операторов, то в любом случае операторы выполнятся хотя бы один раз.
Пример 6.
repeat
WriteLn('Введите положительное число');
ReadLn(x);
until x>0;
Пример 7. Составим программу для вычисления и вывода на печать таблицы значений функции Y=A*X*X при X=5,6,7,...,35; A=10.2.
С использованием оператора WHILE программа имеет вид
Var Y,A : real;
X : integer;
Begin
X:=5;
A:= 10.2;
While X<=35 do
begin
Y:=A*X*X;
Writeln(' X=',X,' Y=',Y);
X:=X+1
end;
End.
С использованием REPEAT программа выглядит так:
Var Y,A : real;
X : integer;
Begin
X:=5;
A:= 10.2;
Repeat
Y:=A*X*X;
Writeln(' X=',X,' Y=',Y);
X:=X+1
Until X>35
End.
С использованием оператора FOR программа имеет вид
Var Y,A : real;
X : integer;
Begin
A:= 10.2;
FOR X :=5 TO 35 DO
begin
Y:=A*X*X;
Writeln(' X=',X,' Y=',Y);
end;
End.
4. Операторы завершения цикла
Для всех операторов цикла выход из цикла осуществляется как вследствие естественного окончания оператора цикла, так и с помощью операторов перехода и выхода.
В версии Турбо Паскаль 7.0 определены стандартные процедуры: Break, Continue.
Процедура Break выполняет безусловный выход из цикла.
Процедура Continue обеспечивает переход к началу новой итерации цикла.
Хотя и существует возможность выхода из цикла с помощью оператора безусловного перехода goto, делать этого не желательно. Во всех случаях можно воспользоваться специально предназначенными для этого процедурами Break и Continue.
Пример 8. Дано натуральное число N. Определить, является ли оно простым.
Алгоритм:
Вводим натуральное число;
В интервале от 2 до N/2 порождаем натуральные числа и проверяем, являются ли они делителями числа N; Если хотя бы одно число является делителем N, то прекращаем итерации и выводим результат «N – не простое», иначе выводим результат «N – простое».
Var I, N : integer;
F : boolean;
Begin
Repeat
write(’Введите натуральное число N=’);
readln(N);
Until N>0;
F:=true;
For I :=2 to N div 2 do
If N mod I = 0 then
begin
F:=false;
Break;
end;
If F
Then writeln(’Число ’, N, ’ простое’)
Else writeln(’Число ’, N, ’ не простое’)
End.
5. Обработка числовых последовательностей
Обработка числовых последовательностей всегда основывается на использовании операторов цикла. Алгоритмы для обработки последовательностей обычно относятся к одному из двух типов: поиск; проверка условий. Для последовательностей характерно, что в каждый момент времени нам доступен только один элемент последовательности. Поэтому все алгоритмы строятся с учетом однократного последовательного просмотра. В каждом из них одновременно рассматривается только очередной член последовательности, без учета всех остальных. Алгоритмы для решения таких задач называются алгоритмами с линейным поиском.
Пример 9. Вводится последовательность из N целых чисел. Найти суммы всех отрицательных элементов.
Var X, N, Sum, I : integer;
Begin
Repeat
write(’Введите длину последовательности N=’);
readln(N);
Until N>0;
Sum :=0;
For I:=1 to N do
begin
write(’Введите X=’);
readln(X);
If X<0 then Sum:=Sum+X;
end;
If Sum=0
then writeln(’Отрицательных чисел нет’)
else writeln(’Сумма отрицательных чисел Sum=’,Sum)
End.