На примере 1 был рассмотрен частный случай применения оператора for. В общем виде оператор for может быть представлен в двух формах.

Первая форма последовательно наращивает параметр цикла, увеличивая его каждый раз на 1:

For <параметр цикла>:= <начальное значение> to <конечное значение> do <оператор>;

Кратко: For i:=N1 to N2 do <оператор>; (N1<N2)

Вторая форма последовательно уменьшает переменную-параметр цикла на 1:

For <параметр цикла>:= <начальное значение> downto <конечное значение> do <оператор>;

Кратко: For i:=N1 downto N2 do <оператор>; (N1>N2)

В представленных формах оператора цикла For……do – заголовок цикла, <оператор> - тело цикла. Тело цикла может быть простым либо составным оператором. Параметр цикла, его начальное и конечное значения должны принадлежать к одному и тому же типу данных (чаще всего это целочисленный тип integer, но могут быть и другие типы, кроме вещественного).

Блок-схема цикла с параметром For..to может иметь следующий вид (рис. 1.8.):

Рис. 1.8

Пример 2. Вычислить сумму первых N натуральных чисел с помощью оператора for..downto.

В этом случае программа решения задачи примет вид:

program summa_N;

var i, n,sum:integer;

begin

write ('n='); {ввод исходных данных с клавиатуры}

readln(n); {n - количество первых натуральных чисел}

sum:=0; {начальное значение суммы}

for i:=n downto 1 do {параметр цикла i (счетчик цикла)

меняется от 10 до 1 с шагом -1}

sum:=sum+i; {тело цикла}

НЕ нашли? Не то? Что вы ищете?

writeln('Sum =',sum);{вывод результата}

end.

Результат выполнения программы при n=10:

n=10

Sum =55

Важно помнить:

Ø  Не рекомендуется изменять параметр цикла в теле цикла с помощью команды присваивания. Это может привести к «зацикливанию» программы (бесконечному повторению тела цикла) либо к неверным результатам выполнения программы.

Ø  Если в заголовке оператора for..to начальное значение параметра цикла больше конечного значения, то тело цикла не выполнится ни разу.

Ø  Если в заголовке оператора for..downto начальное значение параметра цикла меньше конечного значения, то тело цикла не выполнится ни разу.

Ø  При выходе из цикла текущее значение параметра цикла равно конечному значению в операторе for..to и наоборот в операторе for..downto.

Ø  Телом цикла может быть не один оператор, а группа операторов (составной оператор), которую обязательно надо заключать в операторные скобки begin… end.

Рассмотрим несколько примеров использования оператора for.

Пример 3. Вывести на экран 5 первых нечетных натуральных чисел.

Программа решения задачи может иметь вид:

Program N5;

var i, x:integer; {i – параметр цикла, в переменную

x записываем нечетные числа}

begin

x:=1; {первое нечетное натуральное число равно 1}

for i:=1 to 5 do {параметр i (счетчик цикла) меняется

от 1 до 5 с шагом 1}

begin

write(x,' '); {вывод нечетного числа}

x:=x+2; {следующее нечетного число на 2 больше

предыдущего}

end;

end.

Результат выполнения программы:

1 3 5 7 9

В программе N5 телом цикла является составной оператор, который образуют команды write(x,' ') и x:=x+2.

Блок-схема алгоритма программы N5 представлена на рисунке 1.9.

Рис. 1.9

С помощью оператора For можно рисовать на экране монитора различное количество графических фигур. Например, можно выводить на экран монитора множество отрезков разных цветов.

Пример 4. Вывести на экран монитора N отрезков голубого цвета, расположение которых определяется случайным образом.

Программа решения задачи может иметь вид:

program Line_n;

uses graphabc;

var k, n:integer;

begin

write ('n=');

readln (n);

clearwindow(clViolet);

setPenWidth(5);

setPenColor(clBlue);

randomize;

for k:=1 to n do

Line (random(10), random(10),random(600),random(600));

end.

В программе используются новые команды. Это randomize – подключение генератора случайных чисел, и random(n), выдающая случайные числа от 0 до n-1 (в данном случае от 0 до 9).

Результат выполнения программы при n=10 может быть таким:

Рис. 1.10

Пример 5. Вывести на экран все натуральные числа от 5 до 9.

Программа решения задачи может иметь вид:

program N5_9;

var i:integer; {i – переменная цикла и в то же время выводимое

число}

begin

for i:=5 to 9 do {переменная i (счетчик цикла) меняется

от 5 до 9 с шагом 1}

write(i,' '); {вывод очередного числа – тело цикла}

end.

Результат выполнения программы:

5 6 7 8 9

Из примера 5 видно, что начальным значением параметра цикла for..to не обязательно должна быть единица. Чтобы узнать, сколько раз выполнится тело цикла for, нужно найти разность между крайними значениями параметра цикла (по модулю) и прибавить к результату 1. Например, в данном примере 4 тело цикла выполнится (9-5)+1 раз, то есть 5 раз, что соответствует условию задачи.

4.  В каких случаях в программе используется оператор for?

5.  Какие формы оператора for вы знаете?

6.  Чем отличается формы «to» и «downto» оператора for?

1. Можно ли изменять параметр цикла в теле цикла?

2. Какой тип данных может иметь параметр цикла?

Упражнения

1. Сколько раз выполнится тело цикла:

For n:=3 to 6 do write (’*’);

2. Что будет выведено на экран монитора в результате выполнения цикла:

For i:=1 to 5 do write (i,’ ’);

3. Составьте программу, которая 6 раз выведет на экран монитора ваше имя.

4. Составьте программу, которая рисует 10 окружностей зеленого цвета разных радиусов с одним центром.

5. Составьте программу и блок-схему, которая выводит на экран

а) 5 первых четных натуральных чисел;

б) N первых натуральных чисел:

в) N первых четных натуральных чисел;

6. Составьте программу, которая вычисляет сумму натуральных чисел от 10

до 15.

7. Составьте программу, которая вычисляет сумму первых пяти нечетных

натуральных чисел.

3.3 Оператор цикла с предусловием

Оператор цикл с параметром for отлично выполняет свои функции, когда число повторений действий заранее известно. Однако такая ситуация встречается в программировании далеко не всегда. Часто приходится решать задачи, когда число повторений действий в теле цикла неизвестно и определяется в ходе решения задачи. В этом случае применяют цикл с условием. В языке программирования Pascal имеется две разновидности цикла с условием:

Ø  цикл с предварительным условием - условие цикла проверяется перед выполнением тела цикла;

Ø  цикл с последующим условием - условие цикла проверяется после выполнения тела цикла.

Остановимся на цикле с предварительным условием (кратко, с предусловием). Цикл с предусловием – это цикл, который повторяется до тех пор, пока условие выполняется (истинно). Блок-схема цикла с предусловием представлена на рисунке 1.11

Рис. 1.11

Для реализации цикла с предусловием используется оператор While. В общем виде оператор While на языке программирования Паскаль может быть представлен так:

While <условие> do заголовок цикла

<оператор>; тело цикла

Если тело цикла состоит из нескольких операторов, их нужно заключить в операторные скобки begin…end. В этом случае оператор While будет выглядеть так:

While <условие> do заголовок цикла

Begin

<оператор_1>; тело цикла

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

…………

End;

Значение выражения <условие>, записанное после слова While, проверяется перед каждым выполнением оператора (операторов) тела цикла.

Если <условие> верно (истинно), выполняется тело цикла, и снова вычисляется и проверяется выражение <условия>. Если результат проверки <условия> неверен (ложный), происходит выход из цикла.

Рассмотрим, как работает оператор While на известном вам примере вычисления суммы N первых натуральных чисел. Кстати, задачи, которые можно решить с помощью оператора for, всегда можно решить и с помощью оператора While.

Пример 5. Вычислить сумму первых N натуральных чисел.

Программа решения задачи может иметь вид:

program summa_N_2;

var i, n,sum:integer;

begin

write ('n='); {ввод исходных данных с клавиатуры}

readln(n); {n - количество первых натуральных чисел}

sum:=0; {присвоим переменной sum начальное значение 0,}

i:=1; {а переменной i - начальное значение 1}

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7