Оператор цикла с предусловием
Если нельзя достигнуть всего, то не следует отказываться от части.
Поговорка
1. Организационный момент.
2. Обсуждение вопросов по домашнему заданию.
3. Контроль знаний. Тестирование
Вариант 1
Вариант 2
Вариант 3
Вариант 4
4. Составление алгоритмов с использованием оператора цикла с параметром.
Оператор цикла с предусловием
Оператор цикл с параметром for отлично выполняет свои функции, когда число повторений действий заранее известно. Однако такая ситуация встречается в программировании далеко не всегда. Часто приходится решать задачи, когда число повторений действий в теле цикла неизвестно и определяется в ходе решения задачи. В этом случае применяют цикл с условием. В языке программирования Pascal имеется две разновидности цикла с условием:
цикл с предварительным условием - условие цикла проверяется перед выполнением тела цикла;
цикл с последующим условием - условие цикла проверяется после выполнения тела цикла.
Остановимся на цикле с предварительным условием (кратко, с предусловием). Цикл с предусловием – это цикл, который повторяется до тех пор, пока условие выполняется (истинно). Блок-схема цикла с предусловием представлена на рисунке 1.11

Рис. 1.11
Для реализации цикла с предусловием используется оператор While. В общем виде оператор While на языке программирования Паскаль может быть представлен так:
While условие do заголовок цикла
оператор; тело цикла
Если тело цикла состоит из нескольких операторов, их нужно заключить в операторные скобки begin…end. В этом случае оператор While будет выглядеть так:
While условие do заголовок цикла
Begin
оператор_1; тело цикла
оператор_2;
End;
Значение выражения условие, записанное после слова While, проверяется перед каждым выполнением оператора (операторов) тела цикла.
Если условие верно (истинно), выполняется тело цикла, и снова вычисляется и проверяется выражение условия. Если результат проверки условия неверен (ложный), происходит выход из цикла.
Рассмотрим, как работает оператор While на известном вам примере вычисления суммы N первых натуральных чисел. Кстати, задачи, которые можно решить с помощью оператора for, всегда можно решить и с помощью оператора While.
Пример 1. Вычислить сумму первых N натуральных чисел.
Программа решения задачи может иметь вид:
program summa_N_2;
var i,n,sum:integer;
begin
write ('n='); {ввод исходных данных с клавиатуры}
readln(n); {n - количество первых натуральных чисел}
sum:=0; {присвоим переменной sum начальное значение 0,}
i:=1; {а переменной i- начальное значение 1}
while i {пока iвыполнить }
begin
sum:=sum+i; {тело цикла}
i:=i+1; {переменная I меняется внутри цикла, и ее величина определяет
очередное повторение цикла или завершение его }
end;
writeln('Sum =',sum);{вывод результата}
end.
Результат выполнения программы в случае ввода n=10:
Цикл в этой программе работает следующим образом:
вначале i=1,n=10,sum=0;
условие i в заголовке оператора while верно, поэтому начинается выполнение тела цикла;
значение суммы увеличивается на 1: sum=sum+i=0+1=1;
i увеличивается на 1, то есть i=i+1=1+1=2;
условие i вновь верно, поэтому тело цикла выполняется очередной раз;
значение суммы sum=sum+2=1+2=3, а переменной i=i+1=2+1=3;
после выполнения данной последовательности действий (sum=sum+i и i=i+1) 10 раз получаем sum=0+1+2+…+10, i=11;
условие iложно, поэтому цикл завершается. Следующим действием будет вывод результата.
Важно помнить:
Если условие сразу оказывается ложным, цикл с предусловием не выполнится ни разу!
В теле цикла должны быть операторы, которые в какой-то момент изменят значение условия, сделав его ложным. Если этого не случится, цикл будет бесконечным, то есть программа «зациклится».
Зациклившуюся программу следует остановить с помощью команды
Программа - Завершить, иначе она будет выполняться бесконечно (точнее, до выключения компьютера).
В операторах for и while точка с запятой не ставится ни перед словом do, ни после него!
Решим еще несколько примеров применения оператора while.
Пример 2. Сколько слагаемых должно быть в сумме 2+4+6+8+…., чтобы эта сумма оказалась больше некоторого данного натурального числа N.
Программа решения задачи может иметь вид:
Program Kol_slag;
var i,x,sum,n:integer; {i - счетчик слагаемых, в переменную x
будут записываться слагаемые, в переменной sum будет накапливаться сумма}
begin
x:=2; {первое слагаемое равно 2}
i:=1; {начальное значение счетчика слагаемых равно 1}
sum:=2;
write ('n=');
readln(n); {ввод числа n}
while sum {пока sumвыполнить тело цикла}
begin
x:=x+2;{следующее слагаемое на 2 больше предыдущего}
i:=i+1; {увеличение счетчика слагаемых на 1}
sum:=sum+x; {прибавление очередного слагаемого к сумме}
end;
writeln (i,' слагаемых');
end.
Результат выполнения программы при N=30:
Блок-схема алгоритма программы Kol_slag представлена на рисунке 1.12.

Рис. 1.12
C помощью оператора While можно рисовать различное количество графических фигур. Например, заполнять экран кругами различным способом: вдоль верхнего края экрана, вдоль нижнего края, вдоль левого края и т.д..
Пример 3. Нарисовать ряд закрашенных в зеленый цвет кругов радиуса 20 пикселей вдоль верхнего края экрана монитора.
Программа решения задачи может иметь вид:
program krugi;
uses graphabc;
var x,y,r:integer;
begin
clearWindow(clViolet);
setBrushColor(clGreen); {устанавливает зеленый цвет кисти}
x:=22; y:=22; r:=20; {начальные значения x,y,r}
while x660 do
begin
circle(x,y,r); {рисует очередной круг}
x:=x+40; {смещает координату x для следующего круга}
end;
end.
С помощью оператора while можно реализовать имитацию движения графических объектов.
Пример 4. Организовать имитацию движения шарика по экрану монитора.
Для того чтобы графический объект двигался по экрану, необходимо организовать повторение следующих команд:
1) Нарисовать объект;
2) Организовать временную паузу;
3) Стереть объект;
4) Изменить координаты объекта.
Программа решения задачи может иметь вид:
program dvigenie;
uses graphabc;
var x,y,r:integer;
begin
x:=22; y:=22; r:=20; {начальные координаты объекта}
while x800 do {повторение следующих действий}
begin
setBrushColor(clGreen); {задаем цвет объекта}
circle(x,y,r); {рисуем объект}
Sleep (10); {пауза в миллисекундах}
setBrushColor(clWhite); {выбираем цвет фона}
setPenColor (clWhite); {стираем (закрашиваем объект}
circle(x,y,r); {цветом фона)}
x:=x+4; {изменяем координаты объекта}
end;
end.
Реализуйте программу dvigenie на компьютере и увидите результат ее выполнения.
Из рассмотренных выше примеров можно сделать вывод: переменным, входящим в условие заголовка цикла с предусловием должны быть присвоены определенные начальные значения до входа в цикл, а в теле цикла должны быть операторы, которые изменяют значения условия до тех пор, пока оно не станет ложным.
Вопросы:
1. В каких случаях в программе используется цикл с предусловием?
2. Какой формат записи оператора while?
3. При каком условии происходит выход из цикла с предусловием?
4. В каких случаях цикл с предусловием может быть бесконечным?
5. Может ли цикл с предусловием не выполниться ни разу? Если да, то при каких условиях?
Упражнения
1. Может ли завершиться выполнение цикла while, условие которого выглядит так: a*a+b*b+21 ?
2. Cколько звездочек будет напечатано в результате выполнения приведенного фрагмента программы:
i:=1; readln(n);
while ido
begin
write('*');
i:=i+2
end;
при а) n=5; б) n=o в) n=1 ?
3. Сколько слагаемых должно быть в сумме 1+2+3+4+…., чтобы эта сумма оказалась
а) больше 20; б) больше некоторого данного числа N.
Составьте программы и блок-схемы.
4. Составьте программы, которые рисуют ряд окружностей радиуса 10 вдоль левого края экрана.
5. Составьте программы, которые рисуют ряд квадратиков радиуса 10 вдоль верхнего края экрана.
6. Составьте программу, которая вычисляет сумму натуральных чисел на отрезке [5, 10] с помощью оператора While.
7. Составьте алгоритмы вычисления суммы:
2+4+6+...+100
3+6+9+..+300
4+8+12+...+200
4+12+20+...+100
5+10+15+...+150
10+20+30+...+400
16+32+48+...+176
12+24+36+...+252
ПОДВЕДЕНИЕ ИТОГОВ:
№ задания | Max балл | Кол-во баллов | ОТМЕТКА |
1 ТЕСТ | 10 | 10 | 1 – 5 |
2 Упражнение 1 | 4 | 14 | 6 |
3 Упражнение 2 | 4 | 18 | 6 |
4 Упражнение 3 | 6 | 24 | 7 |
5 Упражнение 4 | 8 | 32 | 7 |
6 Упражнение 5 | 8 | 40 | 8 |
7 Упражнение 6 | 10 | 50 | 9 – 10 |
7. Домашнее задание: §§ 3.2., задачи по вариантам упражнение №7
8. РЕФЛЕКСИЯ.
Смотрите на каждое препятствие как на часть платы,
которую мы вносим за наш будущий успех. Используйте
трудности для укрепления своего характера, а не для
ослабления его.
Колин Тернер
Какие трудности одолевали Вас во время урока?
Чтобы Вы хотели повторить на следующем уроке?