- •Дмитров 2015 Содержание
- •Введение
- •Профессиональные компетенции
- •Приемы программирования основных алгоритмических структур на языке Паскаль
- •1.1 Программирование ветвящихся алгоритмов
- •1.2 Практические работы по программированию ветвлений
- •1.3 Программирование циклических алгоритмов
- •1.4 Практические работы по программированию циклов
- •Подпрограммы в Паскале
- •Заключение
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> и <Выражение 2>, причем только один раз при входе в цикл.
Параметру цикла присваивается значение <Выражение 1>.
Значение параметра цикла сравнивается с значением <Выражение 2>. Если параметр цикла меньше или равен этому значению, то выполняется тело цикла, в противном случае выполнение цикла заканчивается.
Значение параметра цикла изменяется на следующее значение в его типе (для целых чисел – увеличивается на единицу) и происходит возврат к п. 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’)?
