Учащиеся читают теорию (презентация спроецирована на экран или интерактивную доску либо находится вфайле, имеющемся на каждом компьютере):
Цикл с параметром предназначен для повторения некоторого участка программы заданное (известное заранее) число раз. Для организации этого цикла используется оператор цикла с параметром, имеющий вид:
FOR <параметр цикла> := <начальное значение> TO <конечное значение> DO <тело цикла>;
где
<параметр цикла> - скалярная переменная целого типа, называемая параметром цикла;
<начальное значение> и <конечное значение> - арифметические выражения целого типа, являющиеся начальным и конечным значениями параметра цикла;
<тело цикла> - один или несколько операторов, составляющие тело цикла. Если тело цикла содержит более одного оператора, то оно обрамляется операторами BEGIN и END;
Действие оператора цикла с параметром происходит по следующему алгоритму:
1) Вычисляются значения начального и конечного значений параметра цикла;
2) Параметру цикла присваивается начальное значение;
3) Текущее значение параметра цикла сравнивается с конечным значением. Если текущее значение параметра больше конечного, то осуществляется переход к шагу 8). В противном случае осуществляется переход к шагу 4);
4) Выполняется тело цикла;
5) Значение параметра цикла увеличивается на единицу;
6) Управление передается на оператор цикла;
7) Осуществляется переход к шагу 3)
8) Осуществляется выход из цикла, т.е. управление передается оператору, следующему за телом цикла.
Демонстрация алгоритма (коллекция ЦОР)
FOR i := 0 TO 9 DO
BEGIN
x := i * 10;
y := sin (x * pi / 180);
writeln ('x = ', x, ', y = ', y);
END;
Учащимся предлагается ответить на следующие вопросы:
1) К какому типу должны относиться переменные, используемые в цикле?
2) Сколько раз будет выполняться тело цикла в данном случае?
3) Что будет напечатано во время выполнения цикла?
4) Верно ли, что всегда цикл с параметром выполняется хотя бы один раз?
(Правильные ответы:
1) i - целого типа, x и y - вещественного типа;
2) 10 раз;
3) 10 строк, имеющих вид:
x = <аргумент в градусах>, у = <синус аргумента>
,причем значение аргумента в первой строке равно 0, во второй - 10 и т.д., в десятой строке - 90,
т.е. от строки к строке увеличивается на 10.
Поскольку в Паскале синус аргумента выражается в радианах, то в качестве аргумента синуса используется арифметическое выражение, переводящее угол из градусной меры в радианную).
4) Нет. Если в операторе цикла конечное значение параметра меньше начального, то цикл не будет выполняться ни разу. Например, цикл
FOR n := 5 TO 2 DO
z := sqrt (n);
не будет выполнен ни разу).
Примечание.
В Паскале, в отличие от других языков программирования (Фортрана, C++ и др.) отсутствует цикл с шагом. Единственное исключение из этого правила составляет цикл с шагом, равным минус единице, имеющий вид:
FOR <параметр цикла> := <начальное значение> DOWNTO <конечное значение> DO
<тело цикла>;
например
FOR i := 10 DOWNTO 1 DO
BEGIN
n := sqr (i);
WRITELN ('i = ', i, ', n = ', n);
END;
Отличие действия цикла DOWNTO от действия обычного цикла заключается в следующих особенностях:
1) На третьем шаге: Если текущее значение параметра меньше конечного, то осуществляется переход к шагу 8). В противном случае осуществляется переход к шагу 4);
2) На пятом шаге: Значение параметра цикла уменьшается на единицу.
Учащимся предлагается ответить на вопросы:
1) Что будет напечатано в данном цикле? (Правильный ответ: В убывающем порядке числа от 10 до 1 и их квадраты);
2) В каком случае цикл DOWNTO не выполняется ни разу? (Тогда, когда конечное значение параметра больше начального).
Как было сказано выше, в общем случае начальное и конечное значения параметра цикла могут быть не постоянными числами, а арифметическими выражениями целого типа. Учащимся предлагается выбрать из списка правильные и неправильные операторы цикла (предполагается, что все переменные, фигурирующие в операторах, имеют целый тип):
1) FOR n := n0 TO (n1 + 10) div 2 DO
2) FOR z := m/2 TO m * 2 DO
3) FOR k := 15 DOWNTO sqrt (9.) DO
4) FOR v := trunc (ln (1.E+3)) TO 1000 DO
5) FOR x0 := x0 div 10 DOWNTO x0 mod 12 DO
6) FOR x := .7 TO 7. DO
(Ответ: 1), 4), 5) - правильно, 2), 3), 6) - неправильно)
Далее учащиеся выполняют практическую работу под руководством учителя: составляют программу табулирования (составления таблицы) функции y = sin x при x, изменяющемся от 0 до 90 градусов через каждые 10 градусов.
Программа имеет вид:
PROGRAM sinusy;
VAR i: integer;
x, y: real;
BEGIN
FOR i := 0 TO 9 DO
BEGIN
x := i * 10;
y := sin (x * pi / 180);
writeln ('x = ', x, ', y = ', y);
END;
END.
Учащимся предлагается ответить на контрольные вопросы:
1) Каким образом организуется цикл с параметром?
2) Каким образом действует оператор цикла?
3) Как определяется количество повторений цикла?
Составить программу вычисления значения арифметического выражения с = 5a + b при различных значениях параметра a. Значение b вводится с клавиатуры, а параметр a изменяется от a0 до 100, причем начальное значение a0 также вводится с клавиатуры.
Программа должна иметь вид:
PROGRAM Param;
VAR a, a0, b, c : integer;
BEGIN
readln (a0, b);
FOR a := a0 TO 100 DO
BEGIN
c := 5 * a + b;
writeln ('a = ', a, ',b = ', b, ',c = ', c);
END;
END.
на главную