Для полной формы записи оператора выбора при несоблюдении ни одного условия необходимо выполнить операторы, записанные после служебного слова «иначе».
Если используется сокращенная форма, то в случае несоблюдения ни одного условия, исполнителю следует приступить к выполнению следующего оператора.
Пример 5.2. Составить алгоритм, определяющий число дней в указанном месяце года.
Решение. Високосным считается год, который делится нацело на 4 или на100 и не делится нацело на 400.
Алгоритм решения задачи с использованием условных операторов приведен на рис. 5.11; с использованием оператора выбора – на рис. 5.12.
Для данной задачи использование оператора выбора позволяет существенно сократить запись алгоритма.
![]() |
если m=2 то


если ((g mod 4=0) or (g mod 100=0)) and (g mod 400≠0) то
иначе
d:=29
d:=28
иначе
если (m=1)or(m=3)or(m=5)or(m=7)or(m=8)or(m=10)or(m=12) то
d:=31

|
d:=30
вывод
Рисунок 5.11 - Алгоритм решения задачи с использованием
условных операторов
![]() |
выбор m


2: если ((g mod 4=0)or(g mod 100=0))and(g mod 400≠0) то
d:=29
иначе
d:=28
1,3,5,7,8,10,12: d:=31
иначе
d:=30
вывод
Рисунок 5.11 - Алгоритм решения задачи с использованием
условных операторов
5.3 Циклические алгоритмы
Решение многих практических задач достигается в результате многократного повторения некоторых действий. Для осуществления повторений в алгоритмическом языке и языках программирования применяются специальные команды повторения, которые позволяют компактно записать алгоритм.
В циклических алгоритмах вычисления производятся до тех пор, пока не выполнится (или не нарушится) указанное в заголовке цикла условие. В зависимости от «места проверки» условия окончания (продолжения) циклических действий, команды повторения можно разделить на две группы: «цикл с предусловием» и «цикл с постусловием».
5.3.1 Циклы с предусловием
Команда цикла с предусловием записывается следующим образом:
а) школьный алгоритмический язык:
<Подготовка цикла>
пока <Условие входа в цикл>
нц
<Оператор(ы)>
кц
б) блок-схема (рис.5.12);
![]() |
нет
Рисунок 5.12 - Блок-схема цикла с предусловием
в) R-схема (рис.5.13).
Заголовок цикла Тело цикла
<Подготовка цикла>
пока < Условие входа в цикл>
< Оператор(ы)>
![]()
Рисунок 5.13 - R-схема цикла с предусловием
Цикл с предусловием будет выполняться до тех пор, пока логическое условие входа в цикл истинно.
Для правильной организации работы цикла с предусловием необходимо:
- до входа в цикл инициировать (задать начальное значение) параметра (параметров) цикла (например, i:= iнач.);
- правильно составить условие входа в цикл (например, i<=iкон.);
- предусмотреть изменение значения параметра цикла внутри тела цикла (например, i:=i+h, где h – величина шага изменения параметра цикла).
Пример 5.3. Составить алгоритм вычисления R =
.
Решение. Решение начнем с выяснения, что и в каком порядке следует вычислять при решении задачи «вручную». Сначала необходимо вычислить
. Обозначим это командой присваивания: R:=
. Следующее действие - вычисление
, то есть R:=
. Затем R:=
и т. д. до R:=
.
Алгоритм:
| |
| |
Теперь приведем пример, в котором при решении данной задачи произойдет «зацикливание», то есть невозможность выйти из цикла:
![]() | |
| |
Пример алгоритма, в котором неверно составлено условие входа в цикл:
![]() | |
| |
Если число повторений ( итераций ) цикла заранее известно, используют цикл с конечным числом повторений (цикл с параметром), для которого h = 1 или h = -1.
Команда цикла с конечным числом повторений записывается следующим образом:
а) школьный алгоритмический язык:
для i от iнач. до iкон. [шаг]
нц
<Операторы>
кц
б) блок-схема (рис.5.14);
![]() |
Рисунок 5.14 - Блок-схема цикла с параметром
в) R-схема (рис.5.15).
|
для i:=iнач. до iкон. [шаг ±1]

Рисунок 5.15 - R-схема цикла с параметром
Этот цикл также относится к циклам с предусловием. Его особенность заключается в том, что присваивание начального значения параметра цикла (i:=iнач.), изменяющегося по рекуррентным формулам, проверка условия продолжения цикла (i≤iкон. для шага 1 или i≥iкон. для шага -1) и получение нового значения параметра цикла (i:=i ± 1), выполняется в заголовке цикла.
Пример 5.4. Вычислить сумму N положительных элементов таблицы вещественных чисел А.
Решение.
Математическая модель решения задачи выглядит следующим образом:
.
Для вычисления суммы используем метод накопления:

Алгоритм:

для i:=1 до N


S:=0
для i:=1 до N
![]() |
если S=0 то
![]() |
вывод
иначе
5.3.2 Циклы с постусловием
Команда цикла с постусловием записывается следующим образом:
а) школьный алгоритмический язык:
<Подготовка цикла>
выполнять
нц
<Оператор(ы)>
кц
до <Условие выхода из цикла>
б) блок-схема (рис.5.16);
![]() |
Рисунок 5.16 - Блок-схема цикла с постусловием
в) R-схема (рис.5.17).
<Подготовка цикла>
выполнять
< Оператор(ы)> до < Условие выхода из цикла>
![]()
Рисунок 5.17 - R-схема цикла с постусловием
Цикл с постусловием прекращает работу, как только условие выхода из цикла становится истинным.
Для правильной организации работы цикла с постусловием необходимо:
- до входа в цикл инициировать (задать начальное значение) параметра (параметров) цикла (например, i:= iнач.);
- предусмотреть изменение значения параметра цикла внутри тела цикла (например, i:=i+h, где h – величина шага изменения параметра цикла);
- правильно составить условие выхода из цикла (например, i>iкон.).
Напомним, что в отличие от цикла с предусловием, цикл с постусловием всегда выполняется хотя бы один раз, поскольку условие выхода из цикла завершает данный оператор.
Оператор цикла с постусловием удобно применять для контроля вводимых данных, зацикливания программ и т. д.
Пример 5.5. Применение цикла для ввода значения некоторой величины с проверкой правильности ввода.
Данный цикл будет выполняться до тех пор, пока не будет введено положительное значение N.
выполнять
до N>0
![]()
Данный цикл будет выполняться до тех пор, пока не будет введено значение N, удовлетворяющее условию 1≤N≤100 .
выполнять
до (N>=1) и (N<=100)
![]()
Пример 5.6. Вычислить сумму членов ряда:
![]()
с точностью до члена ряда, меньшего ε.
Решение.
Обозначим: Un = (-1)
- текущий член ряда.
Для уменьшения затрат времени на вычисление текущего члена ряда используем рекуррентную формулу:
Un =
* Un-1.
Коэффициент вычисляется следующим образом:

Начальное значение элемента ряда:
. Начальное значение суммы
.
Алгоритм.
выполнять
до |eps|<1
![]()
![]() |
S:=1
n:=1
![]()
выполнять

![]() |
6 Вспомогательные алгоритмы
Часто при разработке алгоритмов возникает необходимость выполнить несколько раз одну и ту же последовательность операторов. Можно записать соответствующий фрагмент несколько раз, однако при таком подходе алгоритм получается громоздким и сложным для восприятия. Поэтому желательно функционально самостоятельные повторяющиеся фрагменты алгоритма оформлять в виде т. н. вспомогательных алгоритмов.
Вспомогательный алгоритм улучшает наглядность алгоритма, может существенно уменьшить его размер, поскольку он составляется только один раз, а вызывается из различных точек алгоритма необходимое количество раз.
Вызов вспомогательного алгоритма осуществляется следующим образом:
<Имя алгоритма> [(<список параметров>)]
Список параметров в общем случае состоит из списка входных и выходных данных.
Пример 6.1. Составить алгоритм вычисления наименьшего общего кратного (НОК) двух натуральных чисел А и В.
Решение.
Как известно из математики, для любых натуральных чисел А и В справедливо тождество:
А*В=НОК(А, В)*НОД(А, В),
где НОД – наибольший общий делитель чисел А и В.
Алгоритм NOD.
{вспомогательный алгоритм; используется для вычисления наибольшего общего делителя двух натуральных чисел}
Входные данные: А, В:цел.
Выходные данные: NOD:цел.
пока А≠В
NOD:=A
Алгоритм NOK.
{вспомогательный алгоритм; используется для вычисления наименьшего общего кратного двух натуральных чисел}
Входные данные: А, В:цел.
Выходные данные: NOК:цел.
NOK:=A*B/NOD(A,B)
Алгоритм основной программы.
Входные данные: А, В:цел.
Выходные данные: N:цел.
![]() |
![]() |
N:=NOK(A,B)
Пример 6.2. Составить алгоритм вычисления наименьшего общего кратного (НОК) трех натуральных чисел Х, Y, Z.
Решение.
Для решения задачи используем алгоритмы примера 6.1, т. е. сведем задачу нахождения НОК трех чисел к задаче нахождения НОК двух чисел.
Алгоритм NOD.
{вспомогательный алгоритм; используется для вычисления наибольшего общего делителя двух натуральных чисел}
Входные данные: А, В:цел.
Выходные данные: NOD:цел.
пока А≠В
NOD:=A
Алгоритм NOK.
{вспомогательный алгоритм; используется для вычисления наименьшего общего кратного двух натуральных чисел}
Входные данные: А, В:цел.
Выходные данные: NOК:цел.
NOK:=A*B/NOD(A,B)
Алгоритм основной программы.
Входные данные: X,Y,Z:цел.
Выходные данные: N:цел.
![]() |
![]() |
N:=NOK(X,Y)
N:=NOK(N,Z)
При вычислении N возможны и другие варианты, например N:=NOD(NOD(X,Y),Z) или N:=NOD(Z,NOD(X,Y)).
С целью улучшения структуры алгоритма ввод исходных данных можно оформить в виде вспомогательного алгоритма.
Замечание. Количество и типы значений, передаваемых во вспомогательный алгоритм должны соответствовать количеству и типам входных и выходных данных во вспомогательном алгоритме.
7 комбинированные алгоритмы
До сих пор мы имели дело лишь с простыми циклами. Однако существует и сложная структура так называемых вложенных циклов: в цикл, называемый внешним, могут входить один или несколько вложенных циклов, называемых внутренними. Организация как внешнего, так и внутреннего цикла осуществляется по тем же правилам, что и простого цикла. Параметры внешнего и внутреннего циклов разные и изменяются не одновременно, т. е. при одном значении параметра внешнего цикла параметр внутреннего цикла принимает поочередно все значения.
Приемы программирования, изложенные ранее, можно использовать и при организации вложенных циклов.
Пример 7.1. Вычислить произведение отрицательных элементов каждой строки матрицы А[1..10,1..8].
Решение.
Для вычисления произведения отрицательных элементов одной строки матрицы необходимо организовать цикл, перебирающий все элементы строки; параметром этого цикла будет номер столбца j. Перед циклом задается начальное значение произведения Р = 1. После окончания цикла результат выводится на печать.
Если все эти действия повторить во внешнем цикле, изменяя индекс строки i, то будут вычислены все 10 произведений. Схема алгоритма решения приведена на рис. 7.1.
В рассмотренном примере внешний цикл при расчете произведений обязательно должен быть по i (индексу строки), так как в противном случае были бы вычислены произведения положительных элементов каждого столбца. Тем не менее, при вводе элементов матрицы можно применять произвольный порядок выполнения циклов. Если внешний цикл организовать по переменной j, а вложенный – по переменной i, то элементы матрицы будут вводиться по столбцам. В алгоритме же реализован ввод по строкам.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |
















