Программирование циклов. Практикум. Практическая работа № 3.4 "Программирование циклических алгоритмов" | Вложенные и итерационные циклы (курс sim 34 ч.)


Планирование уроков на учебный год


Уроки 26 - 27
Программирование циклов
Практикум
Практическая работа № 3.4
"Программирование циклических алгоритмов"



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

Программирование циклов

Вложенные и итерационные циклы

Работа 3.4. Программирование циклических алгоритмов


Вложенные и итерационные циклы








Если в теле одного цикла имеется другой цикл, то такая структура алгоритма называется вложенными циклами. Рассмотрим задачу, программа решения которой имеет структуру вложенных циклов.

Требуется получить на экране компьютера таблицу умножения в форме матрицы Пифагора. Блок-схема алгоритма будет следующей (рис. 3.17).

image

Здесь цикл по параметру у вложен в цикл по параметру х. Последовательность изменения значений параметров циклов такая:

х = 1; у = 1, 2, 3, ..., 9
х = 2; у = 1, 2, 3, ..., 9
...
х = 9; у = 1, 2, 3, ..., 9

Таким образом, внешний цикл исполнится 9 раз, а внутренний — 9 • 9 = 81 раз. На один шаг повторения внешнего цикла происходит полная прокрутка внутреннего.

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

Программа на Паскале получения матрицы Пифагора:

image

В результате выполнения программы на экране получим:

image

В программе присутствуют некоторые элементы, не отраженные в блок-схеме. В описании переменных X, Y использован ограниченный тип: 1. . 9, поскольку в данной задаче величины принимают целые значения только в этом диапазоне. Оператор WriteLn перед началом вложенного цикла обеспечивает переход к новой строке в таблице каждый раз при смене первого сомножителя. В операторе Write(X*Y:3) для вывода значения произведения после двоеточия использован указатель формата — 3. Это обеспечивает вывод чисел в три позиции на экране, благодаря чему соответствующие столбцы таблицы располагаются строго друг под другом. Первая строка и первый столбец на экране — это сомножители, что соответствует стандартному формату таблицы Пифагора.

Итерационные циклы


imageИтерационный цикл — это цикл, для которого число повторений тела цикла заранее неизвестно. В итерационных циклах на каждом шаге вычислений происходят последовательное приближение и проверка условия достижения искомого результата. Выход из итерационного цикла осуществляется в случае выполнения заданного условия.

imageПример 1. Снова рассмотрим задачу вычисления суммы числового ряда:

image

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

Поскольку с увеличением значения i величина 1/i! уменьшается, в сумму надо включать все слагаемые, предшествующие первому значению, меньшему ε. Вот две программы решения этой задачи, использующие циклы с предусловием и постусловием:

image

Решить эту задачу, используя цикл с параметром, нельзя. Итерационные циклы программируются путем использования либо цикла-пока, либо цикла-до.

В качестве результата выводится значение суммы и число вошедших в нее слагаемых. Выполнение этих программ для значения ε=10 -8 дает в результате: Е=2,71828182, Слагаемых: 12. Таким образом, за 12 повторений цикла значение константы е получено с точностью до 8 знаков после запятой. Слово «итерации» означает «приближения». С каждым повторением цикла вычисляемая величина приближалась к предельному значению константы.

imageПример 2. На уроках "Программирование линейных алгоритмов" была рассмотрена задача вычисления суммы цифр трехзначного натурального числа. Программа имела линейную структуру. Поставим задачу в более общем виде: для любого многозначного натурального числа вычислить сумму всех его цифр.

Выделение цифр происходит с помощью однотипных действий: использования операций mod и div. Очевидно, что их можно «зациклить». Однако число повторений цикла будет разным для чисел разной длины. Поэтому эта задача не решается с помощью цикла с заданным числом повторений. В таком случае в программе можно использовать либо оператор цикла While, либо Repeat и нельзя — цикл с параметром For.

Программа с использованием цикла с предусловием:

image

Поскольку при каждом повторении цикла от числа X отбрасывается одна младшая цифра, закончить цикл нужно тогда, когда X станет равным нулю. Обратите внимание на типы переменных. Надо помнить о разнообразии групп типов в Паскале. Назначение переменной X типа Longint дает возможность вводить в нее значения, включающие до десяти знаков. Для переменной Sum, назначен тип Word, поскольку сумма цифр может быть только положительным числом.

image

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


1. Найдите все значения натуральных чисел X, Y, Z из интервала от 1 до 10, удовлетворяющих равенству: X2 + Y2 = Z2.

2. Вычислите количество точек с целочисленными координатами, попадающих в круг радиуса R (R > 0) с центром в начале координат.

3. Старинная задача. Сколько можно купить быков, коров и телят на 100 руб., если в сумме должно быть куплено 100 голов скота, а цена быка — 10 руб., цена коровы — 5 руб., цена теленка — 0,5 руб.?

4. Чем отличается итерационный цикл от цикла с заданным числом повторений?

5. Почему для программирования итерационных циклов не используется оператор цикла с параметром?

6. Запрограммируйте итерационный цикл вычисления функции е х (см. задание 9 из "Программирование циклов"*1*) с точностью ε. Сделайте два варианта программы: с циклами While и Repeat. Выполните вычисления для ε = 10 -6, х = 2 и сопоставьте полученный результат со значением стандартной функции ехр (х).

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

8. Составьте программу определения наибольшей цифры в записи данного натурального числа.

*1* Задание 9 из "Программирование циклов"

Значение функции е х (экспонента от х) равно сходящейся сумме бесконечного ряда:

image

Получите рекуррентную формулу для слагаемых. Используя операторы цикла While, Repeat и For, составьте три варианта программы вычисления суммы с заданным числом слагаемых.


Следующая страница Работа 3.4. Программирование циклических алгоритмов








Наверх