Вы находитесь на странице: 1из 7

"Программирование циклов: циклы с заданным числом повторений"

Сегодня мы рассмотрим, как на языке Pascal программируются циклы с заданным числом


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

Блок-схема цикла с параметром

В блоке цикла с параметром задаётся название параметра – i, его начальное и конечное


значение, а также шаг его изменения – h не равный нулю. Цикл с параметром работает так, что
перед первым выполнением цикла вычисляются начальное и конечное значение параметра.
После этого параметру присваивается его начальное значение и проверяется, в случае h > 0, не
больше ли значение параметра – i заданного конечного значения. В случае h < 0, не меньше ли
значение параметра – i заданного конечного значения. Если условие проверки истинно, то
выполняется тело цикла, после чего значение параметра – i изменяется на значение шага – h и
снова проверяется не больше или не меньше ли оно заданного конечного значения. Цикл
продолжает выполняться до тех пор, пока значение его параметра – i не станет, при h > 0 –
больше, а при h < 0 – меньше заданного конечного значения.
Важно при этом, что значение параметра нельзя изменять в теле цикла. То есть ещё до начала
первого выполнения тела цикла можно вычислить количество его повторений. Для этого
достаточно вычислить разность конечного и начального значения параметра, после чего
разделить эту разность на значение шага и к полученному числу прибавить 1.

Количество повторений цикла с параметром

Однако в языке Pascal нет оператора, предназначенного именно для записи описанного нами
цикла с параметром. Он реализуется с помощью цикла с предусловием.

i:=nz;

while i<=kz do

begin

i:=i+h;
end;

Реализация цикла с параметром

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

Рассмотрим, как же записывается оператор цикла с параметром на языке Paascal. Его запись
начинается со служебного слова for. После него, через пробел, следует название параметра – это
переменная целочисленного типа, объявленная в разделе описания переменных. После этого
следует знак присваивания – «:=». После него следует выражение, которым задаётся начальное
значение параметра. Через пробел после него следует одно из двух служебных
слов, to или downto. Если это слово to – значение параметра при каждом выполнении тела цикла
будет увеличиваться на 1. Если это слово downto – значение параметра при каждом выполнении
тела цикла будет уменьшаться на 1. Через пробел после одного из описанных служебных слов
следует выражение, задающее конечное значение параметра. После него, через пробел, следует
служебное слово do. Со следующей строки, с отступом в один пробел от слова for, следует тело
цикла. Если тело цикла состоит из нескольких операторов, то оно замыкается между
служебными словами begin и end. После слова end ставится точка с запятой.
for <п-р>:=<НЗ> to <КЗ> do

begin

<оператор 1>;

<оператор 2>;

<оператор n>;

end;

Запись цикла с заданным числом повторений

Решим несколько задач, используя цикл с заданным числом повторений. Вычислим факториал
натурального числа n – n!. n вводится с клавиатуры и находится в диапазоне от 1 до 12.
Вспомним, что n! = 1 × 2 × … × n. Таким образом, для того, чтобы вычислить значение n! нам
достаточно перемножить все целые числа от 1 до n.
Составим блок-схему алгоритма решения задачи. В начале пользователь задаёт с клавиатуры
значение n. Нам понадобится переменная, которая будет хранить значение вычисляемого
произведения. Назовём её f и присвоим ей значение 1, так как ни одного множителя мы ещё не
учли. Дальше будет следовать блок цикла с параметром. Назовём параметр i, и он будет
изменяться от 1 до n. Так как шаг изменения параметра равен 1, его указывать не нужно. i будет
значением очередного множителя нашего произведения f. Поэтому тело цикла будет содержать
всего один оператор присваивания f= f × i. После цикла нам остаётся лишь вывести значение
вычисленного произведения f. На этом наш алгоритм завершит свою работу.
Блок-схема алгоритма решения задачи

Напишем программу по составленной блок-схеме. Назовём её factorial. Для работы программы


нам потребуется три переменные: n, i и f. Так как n находится на промежутке от 1 до 12,
а i изменяется на промежутке от 1 до n, объявим их принадлежащими к типу byte. f – это
произведение значений i поэтому она будет принадлежать к целочисленному типу integer.
Запишем логические скобки. Тело программы будет начинаться с оператора writeln, который
выводит на экран сообщение о том, что это программа, вычисляющая значения n!. Дальше будет
следовать оператор write, выводящий запрос на ввод n и оператор readln, считывающий
значение n введённое пользователем. Теперь запишем оператор присваивания
переменной f значения 1. Дальше запишем цикл с параметром for i:=1 to n do. Так, как тело
цикла будет содержать всего один оператор, логические скобки указывать не требуется.
Запишем в цикле оператор присваивания f:=f*i. После цикла запишем оператор вывода на экран
сообщение о том, что n! = f.
program factorial;
var
n, i: byte;
f: integer;

begin
writeln ('Программа вычисления n!');
write ('n=');

readln (n);

f:=1;

for i:=1 to n do
f:=f*i;
writeln (n, '!=', f);

end.
Программа для решения задачи

Запустим программу на выполнение и зададим n = 5. 5! = 120.


Снова запустим программу на выполнение и зададим n = 7. 7! = 5040.

Программа работает правильно. Задача решена.

Решим ещё одну задачу. Трамвайный билет имеет номер, состоящий из девяти цифр.
Определить, является ли трамвайный билет счастливым, по введённому номеру. Счастливым
называется билет с номером, сумма первых четырёх цифр которого равна сумме последних
четырёх цифр.

Для решения этой задачи будем последовательно рассматривать цифры номера билета справа
налево, рассчитывая при этом сначала сумму последних четырёх цифр, а потом и первых
четырёх. В конце нам останется лишь сравнить две полученные суммы.

Составим блок-схему алгоритма решения этой задачи. В начале пользователь задаёт номер
билета. Для хранения номера билета будем использовать целочисленную переменную n. Так как
значения сумм цифр мы ещё не рассчитывали, присвоим им, то есть
переменным s1 и s2 значение 0. Теперь будет следовать цикл для i, изменяющегося от 1 до 4, по
количеству цифр, для вычисления одной суммы. Внутри цикла мы будем увеличивать значение
первой суммы, которое мы будем хранить в переменной s1, на значение правой цифры числа n.
Как мы помним, чтобы выделить правую цифру числа, нам нужно найти остаток от его деления
на 10. После того, как мы учли правую цифру, нам нужно убрать её из числа. Для этого
достаточно n без остатка разделить на 10. Так по завершении работы цикла мы рассчитаем
значение s1 и вычеркнем четыре правых цифры из числа. Следующая правая цифра не входит не
в первую не во вторую сумму. Поэтому мы просто убираем её нигде не учитывая. Дальше будет
следовать ещё один цикл для i, изменяющегося от 1 до 4, по количеству оставшихся цифр. В нём
мы будем увеличивать значение второй суммы, которую мы будем хранить в переменной s2, на
следующую правую цифру числа. После этого мы снова будем убирать из числа правую цифру.
После второго цикла запишем блок ветвления с условием s1 = s2. Если это условие выполняется
– билет является счастливым, и мы выведем сообщение об этом, в противном случае – билет не
является счастливым, и мы также выведем сообщение об этом.
Блок-схема алгоритма решения задачи

Напишем программу по составленной блок-схеме. Назовём её bilet. Для работы программы на


потребуется четыре переменные. Переменная n будет хранить номер билета, представленный
девятизначным числом и будет принадлежать к целочисленному типу integer.
Переменные s1 и s2, будут хранить в себе суммы четырёх цифр, а также переменная i,
изменяющаяся в пределах от 1 до 4 будут принадлежать к целочисленному типу byte, так как
для их хранения достаточно чисел со значением от 0 до 255.
Запишем логические скобки. Тело программы будет начинаться с оператора writeln,
выводящего на экран сообщение о том, что это программа, определяющая, является ли
трамвайный билет счастливым и запрос на ввод девятизначного номера билета. Дальше будет
следовать оператор readln, считывающий значение переменной n. Теперь запишем два
оператора присваивания: s1:=0 и s2:=0. Дальше запишем цикл for i:=1 to 4 do. Так как этот цикл
будет содержать больше одного оператора, запишем логические скобки. Между логическими
скобками будет следовать оператор присваивания s1:=s1+n mod 10. Дальше уберём из числа
правую цифру, разделив его на 10 с помощью операции целочисленного деления div. После
цикла, вычислив значение первой суммы, уберём из числа n пятую цифру, разделив его без
остатка на 10. Дальше будет следовать цикл для вычисления второй суммы. Просто скопируем
цикл вычисления первой суммы и изменим в нём оператор присваивания переменной s1 суммы
её значения и правой цифры числа n таким образом, чтобы на месте переменной s1 стала
переменная s2. Теперь запишем условный оператор, проверяющий равны ли s1 и s2. После
слова then запишем в нём оператор write, выводящий на экран сообщение, о том, что билет с
указанным номером является счастливым. После else будет похожий оператор write,
выводящий сообщение о том, что билет с указанным номером не является счастливым. Просто
скопируем предыдущий оператор Вывода и добавим, частицу «Не» перед словом является.
program bilet;
var
n: integer;
s1, s2, i: byte;

begin
writeln ('Программа, определяющая, является ли трамвайный билет счастливым. Введите
девятизначный номер билета.');
readln (n);

s1:=0;

s2:=0;

for i:=1 to 4 do
begin
s1:=s1+n mod 10;
n:=n div 10;
end;
n:=n div 10;
for i:=1 to 4 do
begin
s2:=s2+n mod 10;
n:=n div 10;
end;
if s1=s2
then write ('Билет с указанным номером является счастливым.')
else write ('Билет с указанным номером не является счастливым.');
end.
Программа для решения задачи

Запустим программу на выполнение и зададим номер билета: 561379042. В этом номере билета
суммы первых и последних четырёх цифр равны 15 и такой билет действительно счастливый.

Снова запустим программу и зададим номер билета: 578908213. Суммы первых и последних
четырёх цифр в этом номере билета не равны, следовательно, билет с этим номером не является
счастливым.

Программа работает правильно. Задача решена.

Важно запомнить:
На языке Pascal цикл с заданным числом повторений записывается так:

for <п-р>:=<НЗ> to <КЗ> do

begin

<оператор 1>;

<оператор 2>;

<оператор n>;

end;
Он имеет управляющий параметр, изменяющийся в указанном диапазоне, с шагом равным
единице. Роль параметра выполняет переменная одного из целочисленных типов.