Реализация алгоритмической структуры "цикл" в Turbo Pascal

Разделы: Информатика


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

Я попыталась наглядно объяснить работу этих операторов с помощью презентации (приложение 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).

  1. Определяются значения переменных a1 и a2;
  2. Переменной i присваивается значение переменной a1;
  1. Проверяется условие выполнения тела цикла, i a2;
  1. Если это условие истинно, то выполняется тело цикла;
  2. Увеличивается значение переменной i на 1;
  3. Переход к пункту 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):

  1. Сколько раз будет выполнено тело цикла? Ответы:
    1. for i:= –5 to 5 do тело цикла;(11)
    2. for i:= 6 to 2 do тело цикла; (0)
    3. for i:= 3 to 3 do тело цикла; (1)
    4. for i:= 3 downto 4 do тело цикла; (0)
    5. for i:= 3 downto 1 do тело цикла; (3)
  2. Какого типа должны быть параметр цикла, его начальное и конечное значения?
  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.

Обращаю внимание на особенности этого оператора:

    1. Операторные скобки (begin ... end) здесь не нужны;
    2. Тело цикла выполнится хотя бы раз независимо от условия (слайд 14).

Далее класс можно разбить на три группы по вариантам и предложить им решить одну и ту же задачу, например: “Вывод на экран всех 2-значных чисел, равных 7”, используя изученные операторы (слайд 17):

вариант 1 – c использованием цикла For;

вариант 2 – c использованием цикла While;

вариант 3 – c использованием цикла Repeat.

В конце урока подводятся итоги (слайд 18):

  1. В каком из рассмотренных циклов тело цикла выполнится хотя бы 1 раз независимо от условия?
  2. В теле какого цикла не рекомендуется изменять значение параметра цикла?
  1. Условие = True. В каком цикле это сигнал прекращения, и в каком – сигнал продолжения?
  2. Когда тело цикла заключается в операторные скобки (begin ... end;)?
  3. Какое начальное значение должна иметь переменная, подсчитывающая количество чисел, и как вычисляется количество в теле цикла? Произведение?

Домашнее задание (19):

  1. Конспект урока.
  2. Придумать задачи, в которых использовались бы циклы For, While и Repeat.
  1. Написать программу вывода на экран всех 3-значных чисел, кратных 6 и 4, и заканчивающихся на цифру 8.
  2. Программу написать тремя способами – с использованием циклов For, While и Repeat.

Для более сильных детей можно задать на дом дополнительно “Алгоритм Евклида” (слайд 15).

Желаю удачи!