Цикл с предусловием. Цикл WHILE в Паскале

while_logoКак мы уже говорили, в паскале существуют 3 способа организации цикла (типа):

1) Цикл со счетчиком

2) Цикл с постусловием

3) Цикл с предусловием

Цикл В данной статье рассмотрим второй тип цикла — цикл с предусловием (цикл WHILE). Если цикл со счетчиком мы используем в случаях, когда необходимо организовать цикл с известным числом повторений, то цикл с предусловием используется, когда число повторений неизвестно.
 WHILE условие DO действие; // тело цикла

Тело цикла выполняется пока условие ИСТИННО.

Если в теле цикла действий несколько — используются операторные скобки begin … end;

WHILE условие do 
begin 
     действие_1; 
     действие_2; 
     действие_3; 
     ...
end;

Рассмотрим пример, аналогичный рассмотренному в теме «Цикл со счетчиком», но реализуем его с помощью цикла WHILE.

Требуется на экране вывести:

Привет
Привет
Привет
Привет

Для реализации данного примера с помощью цикла с предусловием нам потребуется переменная n:

WHILE n<4 do writeln('Привет');

Данный цикл будет выполнять команду writeln(‘Привет’) бесконечное число раз. Почему? Потому что переменная n не изменяется и всегда будет меньше 4. Поэтому необходимо в цикле добавить код, изменяющий переменную n. Например: n:=n+1.

WHILE n<4 do 
begin
       writeln('Привет');
       n:=n+1;
end;

Теперь переменная n будет изменяться с каждым выполнением команд тела цикла (с каждой итерацией).

Нужно запомнить: чтобы не произошло зацикливание в цикле WHILE — необходимо проследить за тем, чтобы переменная из условия изменялась в теле цикла. В цикле со счетчиком такого не случится (зацикливание), т.к. мы указываем точное число итераций.

Рассмотрим несколько задач, где число повторений в цикле явно не известно.

Задача 1.

Считать сумму введенных с клавиатуры чисел  до тех пор, пока не будет введен ноль.

Решение.

Решение данной задачи основывается на использовании цикла WHILE, т.к. мы не знаем, когда будет введен ноль и мы перестанем вводить числа.

var a,s:integer;
begin
s:=0;
writeln('Введите число');
readln(a);
while(a<>0) do begin
    s:=s+a;  //подсчет суммы S
    writeln('Введите число');
    readln(a);  
    end;
writeln(s);
end.

Зачем два раза используем ввод числа а (readln(a);)? Первый раз вводим число а для того, чтобы войти в цикл с некоторым значением переменной a, которое будет использоваться в условии цикла WHILE. Второй раз команда readln(a) используется внутри цикла — вводим числа до тех пор, пока не введем ноль.

Задача 2.

 Даны два отрезка А и B (A>B). Не используя операции умножения и деления, определить, сколько отрезков В уместится в отрезке А.

Решение.

Рассмотрим изображение:

Информатика в школе. Цикл WHILE

Информатика в школе. Цикл WHILE

Т.е. из рисунка видно, что нам нужно складывать длины отрезка A до тех пор, пока сумма не станет больше длины отрезка В. В этом нам поможет цикл с предусловием — цикл while.

var a,b,s,k:integer;
begin
writeln('Введите длину отрезка А');
readln(a);
writeln('Введите длину отрезка B');
readln(b);
k:=0;
S:=a;
while s<b do begin
    k:=k+1; //переменная k считает количество выполнения тела цикла
    s:=s+a; //суммирует длину отрезка А
end;
writeln('В отрезке В содержится ',k,' отрезков А');
end.

Рассмотрим работу программы на примере: А=5, В=21. Рассуждения запишем в таблицу:

Информатика в школе. Цикл WHILE

Информатика в школе. Цикл WHILE

Задача 3.

 Используя алгоритм Евклида, найти НОД двух чисел.

Решение.

Рассмотрим блок-схему алгоритма Евклида:

Алгоритм Евклида

Алгоритм Евклида

Запишем данной алгоритм с помощью Паскаля, опираясь на данную блок-схему. Как видим, у нас имеется цикл с предусловием (M>N). Внутри цикла еще одно условие (M>N), т.е. оператор IF… THEN.

var M, N: integer;
begin
     writeln('Введите М и N'); 
     readln(M, N);
     while M<>N do
          begin
               if M>N 
               then M:=M-N 
               else N:=N-M
     end;
     write('Н0Д = ',М)
end.

Аналогично задаче 2 можно проверить данный алгоритм, записав рассуждения в таблицу.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (12 голос, значение: 4,33 из 5)
Загрузка...
Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

Антибот *