Я попыталась наглядно объяснить работу этих операторов с помощью презентации (приложение 1).
Объяснение материала проходит в виде активного диалога с учениками. Тема рассчитана минимум на два урока, чтобы “улеглось” в голове, но можно и другое количество часов на свое усмотрение.
Сначала ребята вспоминают типы циклических алгоритмов и приводят в соответствия представленные блок схемы и их названия (слайд 2). После ответа учеников появляется верный ответ на слайде.
Цикл с параметром (со счетчиком)
Используется в том случае, если известно число повторений. Тело цикла будет выполняться заданное (заранее известное) число раз: 10, 20,100, n раз – это указывается в условии задачи.
Структура цикла, организованного с помощью этого оператора, имеет вид
For I := a1 to a2 do begin <тело цикла> end;
Роль счетчика играет переменная i, называемая параметром цикла, она изменяется в заданном диапазоне от начального значения a1 до конечного значения a2 (считает). Шаг изменения параметра цикла равен 1 (слайд 3).
На примере простой задачи, где надо найти сумму 4 произвольных чисел, вводимых с клавиатуры, рассматриваем работу этого оператора. Трассировочная таблица помогает понять, что происходит в памяти компьютера, как последовательно изменяются значения переменных (слайд 4).
№ п/п |
i |
x |
s |
Проверка условия |
1 |
0 |
|||
2 |
1 |
|||
3 |
i<=4 |
|||
4 |
? |
|||
... |
... |
... |
... |
... |
. . .
S := 0;
For i := 1 to 4 do
Begin
Write(‘x=‘);
Readln(x);
s := s + x;
End;
. . .
Ученики помогают заполнять таблицу. Акцентирую, что вместо 4 может быть 10, 20,100, n и т.д., но это должно быть известно до начала оператора (до For). Закрепляем последовательность выполнения команд оператора For (слайд 5).- Проверяется условие выполнения тела цикла, i a2;
- Если это условие истинно, то выполняется тело цикла;
- Увеличивается значение переменной i на 1;
- Переход к пункту 3.
Тело цикла будет выполнено a2 – a1 + 1 раз.
Отмечаю, что в операторе For значение счетчика может не только увеличиваться, но и уменьшаться. В этом случае оператор выглядит так:
For i:= a2 downto a1 do begin <тело цикла> end;
Условие выполнения тела цикла: i a1, а шаг изменения счетчика – (-1) (слайд 6).
Затем показываю пример оформления программы для задачи “Написать программу, которая вычисляет сумму положительных из n введенных с клавиатуры целых чисел” (слайд 7).
Program summa;
Var i, n, x: integer;
Begin
Writeln (‘ввести количество чисел’);
Readln(n);
s :=0;
For i := 1 to n do
Begin
Writeln(‘ввести число’);
Readln(x);
If x > 0 then s := s + x;
End;
Writeln (‘сумма >0 =‘, s);
Readln;
End.
Прошу выделить фрагмент цикла в программе и акцентирую внимание на том, что:
- Начальное значение суммы должно быть равно 0.
- Переменная-счетчик должна быть целого типа;
- Не рекомендуется в теле цикла изменять значение переменной-счетчика.
Цикл For удобно использовать также для вывода последовательных значений на экран, например: составить программу, которая выводит на экран степени числа 2 (от 0 до 10). Ребята должны самостоятельно попробовать написать программу в тетради, потом я предлагаю на слайде свой вариант программы (слайд 8).
Program stepen2;
Var i, x: integer;
Begin
Writeln (‘Tabliza’);
Writeln (‘---------------------------’);
x :=1;
For i := 0 to 10 do
Begin
Writeln (‘2^’, i:2, ‘=‘, x:5);
x := x*2;
Writeln;
End;
Readln;
End.
Показываю также результат выполнения этой программы.
Для закрепления этого операторы задаю вопросы (слайд 9):
- Сколько раз будет выполнено тело цикла? Ответы:
- for i:= –5 to 5 do тело цикла;(11)
- for i:= 6 to 2 do тело цикла; (0)
- for i:= 3 to 3 do тело цикла; (1)
- for i:= 3 downto 4 do тело цикла; (0)
- for i:= 3 downto 1 do тело цикла; (3)
- Какого типа должны быть параметр цикла, его начальное и конечное значения?
- Можно ли изменять конечное значение переменной-счетчика в теле цикла?
Цикл с предусловием (с неизвестным числом повторений)
Объясняю структуру этого оператора:
While условие do
Begin
<тело цикла>
End;
Тело цикла выполняется, пока условие истинно. Чтобы не было зацикливания, переменные, входящие в условие, должны изменяться в теле цикла (слайд 11)
Работу этого оператора рассматриваю на примере программы нахождения количества цифр в введенном с клавиатуры числе (n > 0), использую опять трассировочную таблицу (слайд 12):
n |
m |
k |
5372 |
5372 |
0 |
... |
... |
... |
. . .
Write(‘n=‘);
Readln(n);
m := n; k :=0;
While m <> o do
Begin
m := m div 10;
k := k +1;
End;
Writeln (‘количество цифр в числе‘, n, ‘=‘, k);
Readln;
End.
Цикл с постусловием
Используется также, если неизвестно число повторений.
Структура оператора:
Repeat <тело цикла> until условие;
Тело цикла выполняется пока условие ложно (слайд 13).
Предлагаю решить предыдущую задачу, используя оператор Repeat.
. . .
Write(‘n=‘);
Readln(n);
m := n; k :=0;
Repeat
m := m div 10;
k := k +1;
Until m = 0;
Writeln (‘количество цифр в числе‘, n, ‘=‘, k);
Readln;
End.
Обращаю внимание на особенности этого оператора:
- Операторные скобки (begin ... end) здесь не нужны;
- Тело цикла выполнится хотя бы раз независимо от условия (слайд 14).
Далее класс можно разбить на три группы по вариантам и предложить им решить одну и ту же задачу, например: “Вывод на экран всех 2-значных чисел, равных 7”, используя изученные операторы (слайд 17):
вариант 1 – c использованием цикла For;
вариант 2 – c использованием цикла While;
вариант 3 – c использованием цикла Repeat.
В конце урока подводятся итоги (слайд 18):
- В каком из рассмотренных циклов тело цикла выполнится хотя бы 1 раз независимо от условия?
- В теле какого цикла не рекомендуется изменять значение параметра цикла?
- Условие = True. В каком цикле это сигнал прекращения, и в каком – сигнал продолжения?
- Когда тело цикла заключается в операторные скобки (begin ... end;)?
- Какое начальное значение должна иметь переменная, подсчитывающая количество чисел, и как вычисляется количество в теле цикла? Произведение?
Домашнее задание (19):
- Конспект урока.
- Придумать задачи, в которых использовались бы циклы For, While и Repeat.
- Написать программу вывода на экран всех 3-значных чисел, кратных 6 и 4, и заканчивающихся на цифру 8.
- Программу написать тремя способами – с использованием циклов For, While и Repeat.
Для более сильных детей можно задать на дом дополнительно “Алгоритм Евклида” (слайд 15).
Желаю удачи!