Основные алгоритмические конструкции. Повторение. Цикл с заданным числом повторений


Когда учитель заранее знает, какое количество тетрадей дано ему на проверку, реализовать алгоритм проверки тетрадей можно с использованием циклической конструкции с фиксированным числом повторений. Эти конструкции удобно использовать в таких задачах, как подсчет факториала числа n, вычисление n степени числа и им подобных, где заранее известно, сколько раз необходимо выполнить повторения. С помощью блок-схемы такую конструкцию можно записать следующим образом:

Пример цикла с параметром:
Пришиваем пуговицы

Приведем пример алгоритма с использованием циклической конструкции с фиксированным числом повторений.

Пример 1. Рабочий день курьера.

Курьеру дано задание развести документы по десяти адресам. Адреса известны курьеру заранее, и он заранее прокладывает маршрут своего движения.

Операторы циклов

Для реализации каждой циклической конструкции в языках программирования предусмотрен свой оператор цикла.

Вдействительности в программировании можно обойтись одной циклической конструкцией с предусловием. Однако для удобства программирования во многих языках реализованы все три циклические конструкции.

Реализация циклических конструкций в целом во многих языках очень похожа:

Цикл с предусловиемЦикл с постусловиемЦикл с фиксированным числом повторений
Pascalwhile выражение do оператор;repeat Список операторов until (выражение);for переменная := <начальное значение> {to | downto} <конечное значение> do оператор;

Семантика этих операторов в разных языках также схожа:

Цикл с предусловиемЦикл с постусловиемЦикл с фиксированным числом повторений
Сначала проверяется условие, определяющее вход в цикл. Если оно истинно, то выполняются операторы тела цикла.Сначала выполняются операторы тела цикла, а после проверяется условие, которое определяет выход из цикла.Цикл выполняется от начального до конечного значения счетчика с указанным шагом.

Стоит отметить, что в циклах с пред- и постусловием в разных языках программирования выход из цикла может определяться как истинным, так и ложным условием, все зависит от конкретной реализации оператора. Например, в языке Pascal в цикле с предусловием выход из цикла происходит в том случае, если условие стало ложным, а в цикле с постусловием, наоборот, выход из цикла происходит в том случае, если проверяемое условие стало истинным.

Приведем примеры использования циклических конструкций в разных языках программирования.

Пример 2

Задача: Подсчитать сумму квадратов первых n натуральных чисел.

Эту задачу одинаково удобно решать двумя способами: используя цикл с предусловием или используя цикл с фиксированным числом повторений. Теперь рассмотрим фрагменты программ для обоих вариантов.

Использование цикла с предусловиемЦикл с фиксированным числом повторений
Pascalwrite('Введите n: ');
readln(n);
s:= 0;
i:= 0;
while i < n do
begin
i:= i + 1;
s:= s + i * i
end;
writeln('Сумма квадратов равна ', s);
write('Введите n: ');
readln(n);
s:= 0;
for i:= 1 to n do
s:= s + i * i;
writeln('Сумма квадратов равна ', s);

Наглядные примеры циклических алгоритмов

Пример 3. Вычисление среднего значения последовательности чисел, заканчивающейся нулем (цикл с предусловием)

Pascal
program Average;
var a, s: real;
n: integer;
begin
s:= 0;
n:= 0;
write('Введите a');
read(a);
while a <> 0 do
begin
s:= s + a;
n:= n + 1;
write('Введите a');
read(a)
end;
if n > 0 then
write('Среднее = ', s / n)
end.

Пример 4. Вычисление суммы последовательности чисел, заканчивающейся нулем (цикл с постусловием). По условию мы должны ввести хотя бы одно число. Если последовательность пустая, то первым числом будет число 0, но его все равно придется ввести. Поэтому логично использовать для записи алгоритма цикл с постусловием, то есть осуществлять проверку после того, как мы ввели число.

Pascal
program Sum;
var a, s: real;
begin
s:= 0;
repeat
write(‘Введите a’);
read(a);
s:= s + a;
until a = 0;
writeln(‘Сумма = ‘, s)
end.

Пример 5. Вычисление целой неотрицательной степени ненулевого числа N (цикл с фиксированным числом повторений)

Pascal
program power;
var i, n: integer;
s, x: real;
begin
write ('Введите число и степень x, n: '); readln(x, n);
s:= 1;
for i:= 1 to n do
s:= s * x
writeln ('x^n = ', s)
end.


-->