
Цикл с предусловием
WHILE Условие выполнения цикла DO
Тело цикла
Оператор цикла WHILE состоит из заголовка и тела цикла. Ключевые слова WHILE и DO обозначают «до тех пор, пока» и «выполняй» соответственно.
Подавляющее большинство задач с циклами можно решать разными способами, используя при этом один из трех операторов цикла. Часто решения, использующие различные операторы цикла, оказываются равноценными. В некоторых случаях все же предпочтительнее использовать какой-то один из операторов. Цикл WHILE. Цикл, который реализуется данным оператором, называют также циклом с предусловием
Небходимо решить следующую задачу: Распечатать квадраты чисел, находящихся в диапазоне от 0 до 1 с шагом 0,2.
Решая поставленную задачу, в процессе рассуждений нужно сделать вывод о том, что оператор цикла с параметром (оператор FOR) не позволяет решить задачу, поскольку он изменятся с шагом 1 или -1.
Принцип выполнения оператора WHILE и примеры решения некоторых задач «Оператор цикла WHILE»:
Проверка условия выполнения цикла производится в самом начале оператора – если значение условия истинно, то выполняется тело цикла и снова вычисляется выражение условия выполнения цикла. Так продолжается до тех пор, пока значение условия выполнения цикла не станет ложным.
Следует знать:
-
число повторений операторов цикла WHILE определяется в ходе работы программы и как, правило, заранее неизвестно;
-
в операторе цикла WHILE точка с запятой никогда не ставится после зарезервированного слова DO;
-
для успешного завершения цикла WHILE в его теле обязательно должны присутствовать инструкции, оказывающие влияние на условие выполнения инструкций цикла;
-
инструкции тела цикла WHILE вообще могут быть не выполнены, если проверяемое условие ложно с самого начала;
-
исходя из последнего утверждения, цикл WHILE считают самым универсальным видом цикла.
Задача: распечатать квадраты чисел, находящихся в диапазоне от 0 до 1 с шагом 0,2. Составим блок-схему и программу решения задачи:
var k, s : integer;
begin
s := 0;
while s <= 1 do
begin
k := sqr(s);
writeln (k);
s := s + 0.2;
end;
readln;
end.
Следующая задача: для проверки физического развития проверяют рост школьников. Составьте программу, запрашивающую рост очередного школьника и вычисляющую после завершения медосмотра средний рост прошедших осмотр. Количество школьников, подлежащих медосмотру заранее не известно.
Решение. Чтобы получить средний рост С, надо знать количество школьников К и их суммарный рост S. Для вычисления величин K и S воспользуемся циклом WHILE. Однако здесь возникает проблема, какое условие следует выбрать для завершения цикла. Проще всего договориться – в конце рабочего дня в ответ на запрос о росте школьника ввести какое-либо фиктивное значение, например, 0.
var k, s, r : integer; c : real;
begin
s := 0; k := 0;
write (‘введите рост школьника’);
readln (r);
while r <> 0 do
begin
k := k + 1;
s := s + r;
write (‘введите рост школьника’);
readln (r);
end;
c := s/k;
writeln (‘средний рост школьников’,c)
readln;
end.
Задача 1. Вычислить у=х2 при х=2, 4, 6, 8, 10.
Program cikl1;
Var X,Y:Integer;
Begin
X:=2;
While x<=10 Do
Begin
Y:=Sqr(X);
Writeln(‘X=’,X:3, ‘Y=’,Y:5);
X:=X+2;
End;
End.
Задача 2. Вычисление квадратного корня из вводимых чисел.
Program cikl2;
Var
X,Y:Integer;
C:Char;
B:Boolean;
Begin
B:=True;
While B Do
Begin
Write(‘Введите число: ’);
Readln(X);
If X>=0 Then Writeln(‘Корень из ’, Х, ‘ равен ’, Sqrt(X))
Else Writeln(‘Действительного ответа нет’);
While Not((C=’Y’)Or(C=’N’) Do
Begin
Write(‘Желаете ввести еще одно число? (Y/N) ’);
Readln(C);
End;
If C= ‘N’ Then B:=False;
End;
End.
Задача 3. Сколько слагаемых должно быть в сумме 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<=n do {пока sum<=n выполнить тело цикла}
begin
x:=x+2;{следующее слагаемое на 2 больше
предыдущего}
i:=i+1; {увеличение счетчика слагаемых на 1}
sum:=sum+x; {прибавление очередного слагаемого к сумме}
end;
writeln (i,' слагаемых');
end.
Задача 4. Вычислить сумму всех четных чисел до 50.
Program Number;
Var sum: integer;
n: integer;
begin
sum:=0;
n:=2;
while n <= 50 do
begin
sum:= sum + n;
n:= n + 2;
end;
writeln ('Сумма равна: ',sum);
end.
Задача 5. Задано натуральное число n. Вычислить сумму цифр числа.
program zadacha5;
var n,sum,cif:integer;
Begin
writeln('Введите n'); readln(n);
sum:=0;
while n>0 do
begin
cif:=n mod 10;
sum:=sum+cif;
n:=n div 10;
end;
writeln('Сумма цифр введённого числа = ',sum);
End.
Задача 6. Найти минимальное натуральное число, которое при делении на 2 даёт в остатке 1, при делении на 3 даёт в остатке 2, при делении на 4 - в остатке 3, при делении на 5 - в остатке 4, при делении на 6 - в остатке 5 а при делении на 7 дают в остатке 6.
program zadacha6;
var i, kl:longint;
Begin
kl:=0; i:=0;
while kl=0 do
begin
i:=i+1;
if (i mod 2=1) and (i mod 3=2) and (i mod 4=3) and (i mod 5=4) and (i mod 6=5) and (i mod 7=6) then kl:=1;
end;
writeln(i);
End.
Составьте блок-схему и программу решения задач:
-
Распечатать произведения чисел А и В, изменяющихся от 17 и -25 с шагом -3 и 5 соответственно до тех пор, пока это произведение – отрицательное число.
-
Сколько слагаемых должно быть в сумме 1 + ½ + 1/3 + …+ 1/N, чтобы сумма оказалась больше 5.
Для самостоятельной работы на компьютере предлагаются три варианта заданий.
Вариант 1.
-
Температура С в градусах Цельсия изменяется от 0 до 100 с шагом 5. Напечатать таблицу перевода температуры из градусов Цельсия в градусы Фаренгейта (F). Формула перевода: F = 1,8 C + 32. Составьте блок-схему и программу решения задачи.
-
Составьте таблицу значений функции y = 5x – 2 на отрезке [1; 20] с шагом b = 2.
-
* В первый день пловец проплыл 3 км. В каждый следующий день он проплывал на 10% больше, чем в предыдущий.
-
а) В какой по счету день пловец начнет проплывать более 5 км?
-
б) К какому дню он суммарно проплывет более 30 км?
-
Вариант 2.
-
Напечатать таблицу соответствия между весом в фунтах и весом в кг для значений от 1 до 10 фунтов с шагом 0,5 фунта. Формула перевода: 1 фунт = 400 г. Составьте блок-схему и программу решения задачи.
-
Составьте таблицу значений функции y = 5x2 – 2x + 1 на отрезке [-5; 5] с шагом b = 2.
-
* Урожай яблок в 1990 году составил 20 тонн. Далее каждые два года урожай уменьшался на 20%.
-
а) Начиная с какого года, будет собрано менее 5 тонн?
-
б) В каком году суммарный урожай яблок превысит 90 тонн?
-
Вариант 3.
-
Напечатать таблицу перевода расстояний из дюймов в сантиметры для значений от 1 до 10 дюймов с шагом 0,5 дюйма. Формула перевода: 1дюйм = 2,54 см.
-
Составьте таблицу значений функции y = 4x2 – 5x – 10 на отрезке [-9; 9] с шагом b = 3.
-
* Концентрация хлорной извести в бассейне V м3 составляет 10 г/л. Через одну трубу в бассейн вливают чистую воду со скоростью Q м3/час, через другую трубу с такой же скоростью вода выливается. При условии идеального перемешивания концентрация хлорной извести изменятся по закону C = C0e-Qt/V , где t – время, C0 – начальная концентрация.
-
а) Определить, через какое время концентрация хлорной извести в бассейне достигнет безопасной для человека величины. Задачу решить при Q = 150 м3/час, V = 10000 л, C0 = 10 г/л, t изменяется с шагом 0,5.
-
б) Напечатать таблицу изменения концентрации хлорной извести для интервала времени от 0 до 5 часов с шагом 0,5 часа.
-
Задание
-
Вычислить последнюю сумму членов ряда, при которой модуль разности между текущим и предыдущим членами ряда остается меньше 1. Кроме суммы вывести на экран значение последнего слагаемого и его номер. Составьте блок-схему и программу решения задачи.
-
Творческое задание. Составьте задачу на использование оператора цикла WHILE и решите ее (Составьте блок-схему и программу решения задачи.)
* Данные задачи являются задачами повышенной сложности.

