Этот оператор называется циклом с предусловием, т.к. проверка условия осуществляется до начала очередной итерации.
Формат:
While <условие> Do
<тело цикла>;
Цикл выполняется, пока условие истинно. Как только условие нарушается, выполнение цикла завершается
Особенности выполнения оператора While
1. Так как условие проверяется до начала выполнения тела цикла, цикл может ни разу не выполнится.
2. Тело цикла выполняется пока условие True.
3. По крайней мере один из операторов тела цикла должен влиять на значение условия, иначе цикл буде выполняться бесконечно.
В ряде случаев возникает необходимость в бесконечном цикле. Тогда в условии записывается константа True или условие, которое имеет значение True.
Например:
While True Do Write(‘Бесконечный цикл’);
While 1=1 Do Write(‘Бесконечный цикл’);
Примеры решения задач
1. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}
USES Crt;
A, N, B, K : INTEGER;
BEGIN
ClrScr;
Write(‘ Введите два значения ‘); ReadLn(A,N);
K := 0; B := 1;
While K <> N DO Begin
K := K + 1; B := B * A;
End;
Write(‘ A в степени N = ’,B);
END.
2. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.
USES Crt;
VAR
A, B, C, K : INTEGER;
BEGIN
Write(‘ Введите два значения ‘); ReadLn(A,B);
K := 0; C := 0;
While K <> B DO Begin
K := K + 1; C := C + A;
End;
{C = A * K и K = B, следовательно, C = A * B}
Write(‘ A*B= ‘,C);
END.
3. Вычислить значение переменной Y=2K+N при всех значениях переменных N=1,2,3 и K=2,4,6,8. обратите внимание на то, что если перебирать N и K получим 12 значений переменной Y.
Var N,K,Y: Integer;
Begin
For N:=1 To 3 Do Begin
K:=2;
While K<=8 Do Begin
Y:=2*K+N;
WriteLn(‘При N= ’,N:4,’ и K= ’,K:4,’ Y= ’Y:4);
K:=K+2;
End;
End;
End.
4. Составить программу перевода числа из 10 системы счисления в 2 систему счисления.
Для этой задачи представлено два решения.
USES Crt;
VAR
DES, OST, I, DW:INTEGER;
BEGIN
ClrScr;
Write('Введите десятичное число '); ReadLn(DES);
I:=1;
While (DES>=2) DO Begin
OST:=DES mod 2;
DES:=DES div 2;
DW:=DW+OST*I;
I:=I*10;
End;
DW:=DW+DES*I;
Write('Двоичная запись числа ',DW);
END.
Примеры для самостоятельного решения:
1. К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными.
2. Известна сумма номеров страниц, определить номер страницы.
3. Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно.
Для решения задачи достаточно часто требуется использовать две и более циклические конструкции, одна из которых расположена внутри другой (других). Такие конструкции называются вложенными циклами. Какие именно циклы при этом используются, роли не играет, они могут быть организованы посредством любых рассмотренных ранее операторов (For, While, Repeat … Until).