С помощью циклов типа пока можно запрограммировать любые повторяющиеся фрагменты алгоритмов. Но на практике цикл типа пока чаще всего используют в двух следующих случаях:
Число повторений заранее не известно (например, цикл до достижения требуемой точности результата, цикл до первого отрицательного элемента массива и т.п.). Такой цикл называется циклом типа пока с прерыванием.
Число повторений заранее известно, но шаг параметра цикла не равен 1 (в школьном АЯ) или 1, –1 (в Pascal). Такой цикл называется циклом типа пока без прерывания.
Цикл типа пока с прерыванием
Язык
Пример
Пояснения
Школьный АЯ
i:=1; Flag:="Нет"
нц пока (i<=N) и (Flag="Нет")
если A[i]<0
то Flag:="Да"; k:=i
иначе i:=i+1
все
кц
Решается задача: определить номер первого отрицательного элемента массива A(N).Здесь Flag —"управляющая" переменная литерного типа (можно с успехом использовать также логический или целыйтипы)
Pascal
i:=1; Flag:=FALSE;
While (i<=N) and not Flag do
If A[i]<0
then begin
Flag:=TRUE; k:=i
end
else i:=i+1;
Здесь Flag — переменная логического типа, принимающая значение ТRUE (истина) или FALSE (ложь), and- операция 'и', not - операция 'не'
QВasic
i=1 : Flag=0
WHILE (i <= N) AND (Flag = 0)
IF A(i)<0 THEN
Flag=1 : k=i
ELSE i=i+1
END IF
WEND
Здесь Flag — переменная целого типа (в некоторых версиях QBasic можно использовать и логический тип, что предпочтительнее)
Цикл типа пока без прерывания
Язык
Пример
Пояснения
Школьный АЯ
i:=1; S:=0
нц пока i<=N
S:=S+A[i]
i:=i+2
кц
Вычисляется сумма элементов массива A(N) с нечетными индексами. Число таких элементов заранее известно. Шаг параметра цикла равен двум
Pascal
i:=1; S:=0;
While i<=N do
begin S:=S+A[i];
i:=i+2
end;
QВasic
Лучше использовать цикл FOR:
S=0
FOR I=1 TO N STEP 2
S=S+A(I)
NEXT I
Для организации циклов типа пока можно также использовать:
в языке Pascal оператор цикла с постусловием Repeat...until:
Repeat тело цикла until <условие завершения>
Повторять тело цикла до тех пор, пока не выполнится условие завершения цикла.
в языке QBasicоператоры цикла DO WHILE ... LOOPиDO UNTIL ... LOOP(англ. LOOP – виток, петля):
DO WHILE <условие продолжения> тело цикла LOOP
Пока выполняется условие продолжения цикла, повторять тело цикла.
DO UNTIL <условие завершения> тело цикла LOOP
Повторять тело цикла до тех пор, пока не выполнится условие завершения цикла.
Пример 4.1. Определить, является ли заданная последовательность чисел a1 , a2 , ... , aN монотонно убывающей.