
Криворотова Л.Н. ТР 7.0. Основы программирования
Урок 12
Тема: «Цикл с постусловием»
Повторение
-
Запишите конструкцию цикла с предусловием. В каких случаях применятся цикл с предусловием?
-
Далее представлен фрагмент программы вычисления количества цифр в заданном натуральном числе. Найдите в нем ошибки и исправьте их.
a: = n; ck: = 0;
while a>=0; Do
Begin
ck: = ck + 1;
a: = a div 10
End;
3. Каким условиям должны удовлетворять значения переменной k, чтобы следующие циклы были бесконечны:
While c<0 do c: = c + k;
While k<>0 do k:= k + 1;
While k<>0 do k: = k – 2;
Продолжим знакомство с операторами цикла, имеющимися в Паскале. Повторение группы операторов (тела цикла) можно организовать и с помощью оператора, где проверка условия осуществляется после выполнения тела цикла. Для программной реализации циклических алгоритмов с неизвестным заранее числом повторений имеется оператор цикла с постусловием, который имеет следующий вид:
Оператор цикла REPEAT (цикл ДО).
Формат оператора:
REPEAT
оператор 1;
оператор 2;
…
оператор n;
UNTIL логическое условие;
Часть программы, заключенная между служебными словами REPEAT и UNTIL, повторяется до тех пор, пока не станет истинным логическое выражение, стоящее после слова UNTIL. Между словами REPEAT (повторить) и UNTIL(до тех пор пока) можно записать любое количество операторов без использования операторных скобок.
В отличие от оператора WHILE вычисление логического выражения происходит не до, а после очередного повторения цикла. Из-за этого цикл REPEAT обязательно выполнится хотя бы раз, а цикл WHILE может не выполнится ни разу. Если условие в цикле ПОКА является условием продолжения повторений, то условие в цикле ДО – условием выхода из цикла, его завершения. Поэтому для одной и той же задачи эти условия противоположны.
ПРИМЕР 1. Составить программу подсчета суммы S первых 1000 членов гармонического ряда 1+1/2+1/3+1/4+…1/N, используя оператор цикла REPEAT.
Решение
Program Summa;
Var S:real; N:integer;
Begin
S:=0; N:=0;
repeat
N:=n+1;
S:=s+1/n
Until n=1000;
Writeln(s);
Readln
End.
2. Поиск наибольшего числа.
Предположим, нам необходимо ввести с клавиатуры N чисел, найти из них наибольшее и вывести его.
Для решения этой задачи предлагается следующий алгоритм.
-
Ввести первое число в переменную Max.
-
Ввести следующее число в переменную Next.
-
Если Next>Max, то Max:=Next.
Пункты 2 и 3 повторять, пока не будут введены все числа.
-
Вывести значение переменной Max.
Действительно ли будет напечатано наибольшее из N чисел? Докажем это.
После выполнения первого пункта в переменной Max находится наибольшее из уже введенных чисел. Это справедливо, т.к. введено лишь одно число.
Повторение пунктов 2 и 3, в сущности, представляет собой цикл, который выполняется, пока не будут введены все числа. Если перед очередным повторением цикла в Max находится наибольшее из введенных чисел, то после выполнения пунктов 2 и 3 там снова будет наибольшее из введенных чисел.
В последнем пункте значение Max будет выведено.
Этот пример показывает, что алгоритм можно доказать, как доказывают математическую теорему. Программируя доказательный алгоритм, можно не опасаться ошибок в алгоритме, конечно, если нет ошибок в доказательстве.
Program maximum;
Var N, max, next, k: integer;
Begin
Write(‘Введите количество чисел‘); Readln(n);
Write(‘Введите число‘); Readln(max);
k:=1;
repeat
Write(‘Введите число‘); Readln(next);
K:=k+1;
If next>max then max:=next
Until k=n;
Writeln(max);
Readln
End.
Тренировочные задания.
-
Введите с клавиатуры 6 чисел и определите их среднее арифметическое.
-
Напишите программу, которая вводит целые числа с клавиатуры и складывает их, пока не будет введено число 0.
-
Напечатайте 20 первых степеней числа 2.
-
Найдите минимальное из N чисел.
-
Дано натуральное число. Выяснить, является ли оно простым, т.е. делится только на 1 и на само себя.