Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, углубленный уровень)



Уроки 35 - 41
§ 20. Программирование циклических алгоритмов




Содержание урока

Как организовать цикл?

Циклы с предусловием

Алгоритм Евклида

Циклы в других языках программирования

Обработка потока данных

Циклы с постусловием

Циклы по переменной

Циклы по переменной в других языках программирования

Выводы. Интеллект-карта

Вопросы и задания

Практическая работа № 15 «Циклы с условием»

Практическая работа № 16 «Алгоритм Евклида»

Практическая работа № 17 «Обработка потока данных»

Практическая работа № 18 «Циклы с постусловием»

Практическая работа № 19 «Циклы по переменной»


Циклы с предусловием


Цикл, в котором проверка условия выполняется при входе (перед выполнением очередного шага), называется циклом с предусловием, т. е. циклом с предварительной проверкой условия. Перед тем как начать выполнение цикла, мы проверяем, нужно ли это делать вообще. Это можно сравнить с такой ситуацией: перед тем как прыгнуть в бассейн, нужно проверить, есть ли в нём вода.

Все циклы, записанные в начале параграфа, — это циклы с предусловием. У них есть два важных свойства:

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

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

Например, если ввели число 123, программа должна вывести сумму 1 + 2 + 3 = 6.

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

Запишите в тетрадь команды, с помощью которых можно:

1) записать в переменную d последнюю цифру числа, находящегося в переменной N;
2) отбросить последнюю цифру числа, находящегося в переменной N;
3) добавить значение переменной d к неизвестному значению, находящемуся в переменной s. 

Остаток от деления числа на 10 равен последней цифре десятичной записи числа:

d:=mod(N, 10)               d:=N mod 10;


Эту цифру числа нужно добавить к сумме всех цифр, которые мы уже обработали раньше. Сумма цифр — целое число, поэтому будем хранить её в целой переменной sum:

цел sum               var sum: integer;

sum:=0               sum:=0;


В самом начале (пока ни одну цифру мы не обработали) значение этой переменной равно нулю.

Для того чтобы добавить к предыдущей сумме новую цифру, нужно заменить значение переменной sum на sum + d, т. е. выполнить присваивание:

sum:=sum+d               sum:=sum+d;


Для того чтобы затем удалить последнюю цифру числа N, разделим N на 10 (основание системы счисления):

N:=div(N, 10)               N:=N div 10;


Эти три операции — выделение последней цифры числа, увеличение суммы и удаление последней цифры — нужно выполнять несколько раз, пока все цифры не будут обработаны (и удалены!) и в переменной N не останется ноль:

Выполните ручную прокрутку программы при N = 123. Определите итоговое значение переменной sum.


Для введённого числа 123 программа должна выдать ответ 6 (последнее значение переменной sum). Это правильный ответ. 

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

Сколько раз выполнится цикл, если ввести однозначное число? Двузначное? К-значное?

Какова может быть сумма цифр двузначного числа? Трёхзначного? К-значного?


Докажем, что эта программа не зациклится, т. е. не будет работать бесконечно. Цикл завершается, когда переменная N становится равна нулю, поэтому нужно доказать, что это обязательно случится. По условию заданное число — натуральное, на каждом шаге цикла оно делится на 10 (остаток отбрасывается), поэтому значение переменной N каждый раз уменьшается. В результате после очередного уменьшения оно обязательно станет равно нулю.

Следующая страница Алгоритм Евклида



Cкачать материалы урока





Наверх