Вложенный цикл

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

Программирование циклических процессов

Практическое занятие

1. Изобразите структурограмму вычисления функции

 

 

2.

 

 

Арифметический цикл (цикл с параметром)

Требуется вычислить набор значений функции f(x) для заданного набора значений аргумента х.

Формирование набора значений аргумента определяется одним из двух вариантов.

А. Заданы начальное значение аргумента xn, шаг его изменения dx и количество точек счета k; тогда набор значений аргумента формируется по правилу: xi = xn + (i – 1)dx, где i = 1, 2, 3, …, k.

Б. Заданы начальное и конечное значения аргумента xn и xk и шаг его изменения dx; набор значений аргумента формируется по тому же правилу, но предварительно требуется вычислить количество точек счета k:

, где int( )целое от ( ).

Данные задачи носят название задач табулирования, т. е. вычисления таблицы значений функции.

Пример решения задачи табулирования для вычисления набора значений функции y = sinx с шагом dx приведен на рисунке.

 

Определить минимальное целое N, для которого выполняется условие

N3 – 820N + 1 > 100.

Задача решается последовательным перебором значений N до достижения желаемого результата. Обозначив левую часть неравенства как S, получаем два условия: продолжение цикла S ≤ 100; выход из цикла S > 100.

Структурограммы решения этой задачи с помощью циклов WHILE-DO и REPEAT-UNTIL приведены на рисунке, а и б соответственно.

 

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

Требуется вычислить значение функции y = sinx для данного значения аргумента x с заданной точностью путем разложения функции в степенной ряд

 

В общем виде

Соответствующая структурограмма представлена на рисунке.

 

Требуется ввести в ЭВМ элементы матрицы A, содержащей n строк и m столбцов. В структурограмме внутренний цикл организован по параметру j, а внешний – по i. Легко убедиться, что в данном примере ввод элементов матрицы производится по строкам.

 

Структурограмма вложенного цикла (ввод матрицы)

 

Суммируя сказанное, отметим, что программирование циклических процессов разбивается на три этапа:

 вход в цикл, т. е. задание действий, которые обеспечили бы корректное значение условия до выполнения цикла;

 тело цикла, содержащего повторяющуюся вычислительную часть и действия по изменению условия;

 выход из цикла, т. е. задание критериев останова.

Особенно важно в операторах цикла WHILE-DO и REPEAT-UNTIL обращать внимание на включение в тело цикла действий, изменяющих условие. Если тело цикла никак не влияет на условие, цикл может оказаться бесконечным.

Подводя итог рассмотрению приемов программирования, отметим, что с помощью трех описанных выше базовых структур СЛЕДОВАНИЕ, РАЗВЕТВЛЕНИЕ и ЦИКЛ реализуется алгоритм любой сложности.

Именно данный способ графического изображения алгоритмов может быть рекомендован для описания сложных программных модулей.

Любую базовую структуру можно представить в виде функционального модуля, имеющего, как и базовая структура, один вход и один выход.

Совокупность функциональных модулей может образовывать новые базовые структуры и модули. Этот последовательный процесс приводит к тому, что любой алгоритм может быть представлен в итоге одним функциональным блоком.

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

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

Операторы языка программирования являются минимальными компонентами, из которых строятся модули. Разнообразие операторов в языках программирования даже высокого уровня сравнительно невелико и составляет величину порядка 50–100 типов. Однако с повышением уровня языка программирования возрастает функциональная сложность операторов, т. е. число машинных команд ЭВМ, требуемых для его выполнения.

Функциональные или программные модули решают небольшую функциональную задачу и реализуются, как правило, 10–100 операторами языка программирования высокого уровня.

Упомянутые выше приемы функциональной композиции (объединения) и декомпозиции (разбиения) задач относятся к области технологии конструирования программ и определяют структурный подход к разработке алгоритмов и программ.