Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет по производственной ПМ01.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
441.46 Кб
Скачать

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

Существует три типа циклических структур: цикл с предусловием, цикл с постусловием и цикл по параметру.

Цикл с предусловием. Рассмотрим синтаксическую диаграмму оператора цикла «Пока», или цикла с предусловием (рис. 4). здесь сначала вычисляется <Логическое выражение>. Пока его значение равно True, выполняется <Оператор> - тело цикла. При этом <Оператор> может быть как простым, так и составным.

Для приема приведем фрагмент программы на Паскале, вычисляющий с заданной точностью ɛ сумму гармонического ряда

Суммирование прекращается, когда очередное слагаемое становится меньше ɛ или когда целая переменная I достигает значения MaxInt, (см. раздел 4. программа Summ_1).

Цикл с постусловием. Синтаксическая диаграмма оператора Цикла «До», или цикла с постусловием, приведена на рис. 5.

Исполнение данного цикла повторяется до того момента, когда <логическое выражение> станет равным True.

<Оператор цикла с постусловием> While <Логическое выражение>

Do <Оператор>

Рис. 4. Синтаксическая диаграмма цикла с предусловием

<Оператор цикла с постусловием> Repeat <Оператор>

Until <Логическое выражение>

Рис. 5. Синтаксическая диаграмма цикла с постусловием

Предыдущая задача с использованием цикла с постусловием решается следующим образом (см. раздел 4. программа Summ_2).

Цикл по параметру. Рассмотрим задачу вычисления суммы целых чисел от М до N прямым суммированием. Данную задачу можно записать в виде

Summa=

Блок-схема алгоритма решения этой задачи приведена на рис. 2.6, а соответствующую программу с использованием структуры цикла «Пока» можно записать следующим образом (см. раздел 4. программа Adding).

_

+

Рис. 6. Блок-схема алгоритма суммирования целых чисел

Теперь введем новый тип циклической структуры, которая называется «цикл по параметру». Блок-схема алгоритма суммирования с использованием этой структуры приведена на рис. 7, а программу на Паскале для решения данной задачи можно записать следующим образом (см. раздел 4. программа Summering_2).

_

+

Рис. 7. Блок-схема алгоритма суммирования с циклом по параметру

Здесь целая переменная I принимает последовательность всех значений в диапазоне от M до N. При каждом значении I выполняется тело цикла. После последнего выполнения цикла при I= N происходит выход из цикла на продолжение алгоритма. Цикл выполнится хотя бы один раз, если M ≤ N, и не выполнится ни разу при M > N.

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

<параметр цикла> ::= <имя простой переменной порядкового типа>

Выполнение оператора For (в первом варианте To) происходит по следующей схеме.

  1. Вычисляются значения <Выражение 1> и <Выражение 2>, причем только один раз при входе в цикл.

  2. Параметру цикла присваивается значение <Выражение 1>.

  3. Значение параметра цикла сравнивается с значением <Выражение 2>. Если параметр цикла меньше или равен этому значению, то выполняется тело цикла, в противном случае выполнение цикла заканчивается.

  4. Значение параметра цикла изменяется на следующее значение в его типе (для целых чисел – увеличивается на единицу) и происходит возврат к п. 3 данной схемы.

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

Как известно, результат суммирования целых чисел не зависит от порядка суммирования. Например, в рассматриваемой задаче числа можно складывать и в обратном порядке, т. е. от N до M (N ≥ M). Для этого можно использовать второй вариант оператора цикла For:

DownTo буквально переводится «вниз до». в данном случае параметр цикла изменяется по убыванию, т. е. при каждом повторении цикла параметр изменяет свое значение на предыдущее (равносильно i := pred (i)). Следовательно, цикл не выполнится ни разу, если N<M.

Работая с оператором For, следует учитывать следующие правила:

  • параметр цикла не может иметь тип real;

  • в теле цикла нельзя изменять переменную – параметр цикла;

  • при выходе из цикла значение переменной – параметра цикла – является неопределенным.

:=

<Оператор цикла по параметру> For <Параметр цикла>

<Выражение 1> To <Выражение 2> Do <Оператор>

DownTo

В следующем примере в качестве параметра цикла For используем символьную переменную. Пусть требуется получить на экране десятичные коды букв латинского алфавита. Как известно, латинские буквы в таблице кодировки упорядочены по алфавиту. Фрагмент соответствующей программы можно записать следующим образом (см. раздел 4. программа Summering_3).

Здесь переменная С типа char.

Теперь самостоятельно запрограммируйте вывод кодировки латинского алфавита в обратном порядке (от ‘z’ до ‘a’)?