Циклический алгоритм

Содержание

Слайд 2

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

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

Такие

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

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

Слайд 3

В зависимости от того, как задано условие выхода из цикла, различают

В зависимости от того, как задано условие выхода из цикла, различают

циклические алгоритмы следующих видов:

арифметические циклы или циклы с параметром;
логические циклы:
a) циклы с предусловием (циклы ПОКА);
b) циклы с постусловием (циклы ДО).

Слайд 4

В таком циклическом алгоритме заранее известно число повторений цикла. Параметр цикла

В таком циклическом алгоритме заранее известно число повторений цикла. Параметр цикла

в этом случае носит название счетчика выполнений цикла.

Обозначим параметр цикла (счетчик) как переменную с именем N. Пусть

M1 - начальное значение счетчика (до первого выполнения цикла),

M2- конечное значение (при последнем выполнении цикла), т.е. выход из цикла происходит в том случае, если значение параметра цикла больше, чем M2,

M3 - шаг изменения счетчика от цикла к циклу.

Слайд 5

Тогда параметр цикла N изменяется при каждом повторении цикла от значения

Тогда параметр цикла N изменяется при каждом повторении цикла от значения

M1 до значения M2 с шагом M3, что можно записать следующим образом

N= M1, M2, M3

В блок-схемах этой записи соответствует блок модификации:

N = M1, M2, M3

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

Слайд 6

Словесное описание арифметического цикла можно сформулировать так: изменяя параметр цикла N

Словесное описание арифметического цикла можно сформулировать так: изменяя параметр цикла N

от M1 до M2 с шагом M3, выполнять k раз группу шагов алгоритма (тело цикла).

На языке высокого уровня Фортран оператор арифметического цикла может быть записан в виде:

DO N=M1, M2, M3 ! начало цикла

……ТЕЛО
……ЦИКЛА

END DO ! конец цикла

Слайд 7

При первом прохождении цикла значению параметра цикла N присваивается начальное значение

При первом прохождении цикла значению параметра цикла N присваивается начальное значение

M1.

С этим значением выполняются все операторы тела цикла, пока программа не достигнет конца цикла END DO,

затем управление передается снова на начало цикла, при этом параметр цикла N увеличивается на шаг изменения M3, т.е. N=M1 + M3.

Таким образом, при втором прохождении цикла параметр изменился, и с этим новым значением опять выполняются все операторы тела цикла.

При третьем прохождении цикла N принимает значение N = M1 + 2*M3, и т.д. до тех пор, пока параметр цикла не станет равным M2 (последнее повторение цикла).

Слайд 8

Перед каждым повторением тела цикла значение параметра цикла N сравнивается с

Перед каждым повторением тела цикла значение параметра цикла N сравнивается с

конечным значением M2,

как только N становится больше M2, цикл завершается (N=M2 – последнее повторение тела цикла).

В арифметическом цикле возможны два варианта изменения счетчика (параметра цикла): по возрастанию и по убыванию значения.

Следует также отметить, что M1, M2, M3 могут быть арифметическими выражениями.

Если шаг изменения счетчика равен M3=1, его можно опустить, т.е. начало цикла будет записано так: DO N=M1, M2.

Завершает цикл оператор END DO

Слайд 9

Требуется несколько раз для разных значений x рассчитать значения функции y(x),

Требуется несколько раз для разных значений x рассчитать значения функции y(x),

т.е. по сути, составить таблицу значений функции на заданном промежутке аргумента x. Рассмотрим эту задачу на примере.

Пример 1. Вычислить значения функции y(x), если x определен на промежутке x ∈[0,1;1,0] с изменяющимся шагом переменной x равным h=0,1

Слайд 10

Код программы Program Primer_1 x=0.1; xk=1.0; h=0.1 k = int((xk -

Код программы

Program Primer_1

x=0.1; xk=1.0; h=0.1

k = int((xk - x)/h) +

1

DO n = 1, k

y =atan((1 – x) / (1 + x))

print *, “x=“ ,x, ” y=“ ,y

x = x + h

END DO

end

Слайд 11

1. Внутри цикла нельзя принудительно изменять переменные цикла N, M1, M2,

1. Внутри цикла нельзя принудительно изменять переменные цикла N, M1, M2,

M3.
Пример фрагмента программы:

……………
DO K=1, 30
X= K+Y
IF (K = = 10) K = K+11 ! не верно !
ENDDO
……………

Цикл записан неправильно, так как переменной цикла K присвоено новое значение внутри цикла.

Слайд 12

2. Если условный блочный оператор находится в теле цикла DO, то

2. Если условный блочный оператор находится в теле цикла DO, то

и заканчиваться он должен также в теле цикла. Пример фрагмента программы:

DO k=2, 100, 2 ! начало цикла

IF (x.gt.1) THEN ! условный оператор
y1=y1*x

ELSE ! ветвь 2
y1=y1 + x

END IF ! конец условного оператора
END DO ! конец цикла

Слайд 13

3. Если оператор цикла находится в условном блочном операторе, он должен

3. Если оператор цикла находится в условном блочном операторе, он должен

начинаться и заканчиваться в одном и том же блоке. Пример в общем виде:

IF (ЛВ) THEN ! условный оператор

DO I=M1, M2 ! начало цикла
…… тело
…… цикла
ENDDO ! конец цикла

ELSE ! ветвь 2
…… операторы
…… ветви 2
END IF ! конец условного оператора

Слайд 14

4. Возможен досрочный выход из цикла по некоторому условию с помощью

4. Возможен досрочный выход из цикла по некоторому условию с помощью

оператора EXIT.

В этом случае параметр цикла сохраняет значение, полученное в последнем выполненном шаге перед выходом из цикла. После выхода из цикла выполняется оператор, следующий за ENDDO. Например,

N=700
do m=100, 1000, 50

N = N – m
if (N < = 500) EXIT !досрочный выход
enddo

Слайд 15

Рассмотрим данный пример по шагам: 1 шаг. N присваивается значение N

Рассмотрим данный пример по шагам:
1 шаг. N присваивается значение N =

700.
Начинается выполнение цикла, т.е. параметру цикла m присваивается значение равное m=100.
Вычисляется значение переменной N=N–m:
N становится равной N = 700 – 100 = 600.
Проверяется условие N≤500, оно не выполняется, следовательно, оператор EXIT пропускается. Программа возвращается на начало цикла DO.
2 шаг. N = 600, m = 150,
N = 600 – 150 = 450 => N < 500
Условие выполнено и, следовательно, выполняется оператор EXIT, происходит досрочное завершение цикла.
Слайд 16

5. Если нужно пропустить часть операторов цикла и перейти к выполнению

5. Если нужно пропустить часть операторов цикла и перейти к выполнению

следующего шага цикла, то следует использовать оператор CYCLE.

Оператор CYCLE передает управление программой на конечный оператор ENDDO, который возвращает выполнение программы на начало цикла DO к следующему шагу.

Например, рассмотрим фрагмент программы:

L =0; K = 0
DO M = 1, 10, 2

L = L + M ** 2
IF (mod(L,2) = = 0) CYCLE ! переход к следующему
! шагу цикла

K = K + L
END DO

При четных значениях L не будет выполняться оператор K = K + L.

Слайд 17

В таком циклическом алгоритме, как правило, заранее неизвестно число повторений цикла,

В таком циклическом алгоритме, как правило, заранее неизвестно число повторений цикла,

и выполнение тела цикла возможно при истинности некоторого условия.

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

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

Слайд 18

Оператор цикла с предусловием в Фортране в общем виде записывается следующим

Оператор цикла с предусловием в Фортране в общем виде записывается следующим

образом:

DO WHILE (ЛВ)
…………ТЕЛО
………….ЦИКЛА
END DO

Тело цикла выполняется, пока логическое выражение (ЛВ) истинно.

Изменим код программы примера 1 с использованием цикла с предусловием. В качестве параметра цикла выберем переменную x.

Значение x в каждом цикле можно вычислить по рекуррентной формуле x=x+h, начальное значение x=x1. Выполнение цикла происходит пока x≤xk.

Слайд 19

При использовании в качестве параметра цикла переменной действительного типа приращение параметра

При использовании в качестве параметра цикла переменной действительного типа приращение параметра

цикла вычисляется приближенно.

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

В примере 2 конечное значение параметра цикла равно не xk, а xk+h/10 (выделено красным цветом в примере).

Слайд 20

Пример 2. Код программы табулирования функции: Program Primer_2 x=0.1; xk=1.0; h=0.1

Пример 2. Код программы табулирования функции:

Program Primer_2

x=0.1; xk=1.0; h=0.1

DO WHILE (x

<= xk+h/10)

y =atan((1 – x) / (1 + x))

print *, “x=“ ,x, ” y=“ ,y

x = x + h

END DO

end

Слайд 21

При организации цикла с постусловием, условие выхода из цикла проверяется после

При организации цикла с постусловием, условие выхода из цикла проверяется после

каждого выполнения цикла.

Поэтому, в отличие от предыдущего случая (цикла ПОКА), тело цикла будет выполнено хотя бы один раз.

Блок – схема цикла с постусловием.

Слайд 22

Цикл с постусловием (цикл ДО) организуется в Фортране с помощью условного

Цикл с постусловием (цикл ДО) организуется в Фортране с помощью условного

логического оператора IF и оператора безусловного перехода GOTO M.

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

Оператор безусловного перехода GOTO M передает управление программой оператору с меткой M.

Опять изменим программу табулирования функции (пример 1), используя вместо арифметического оператора цикла, цикл с постусловием.

Слайд 23

Пример 3. Код программы табулирования функции: Program Primer_3 x=0.1; xk=1.0; h=0.1

Пример 3. Код программы табулирования функции:

Program Primer_3

x=0.1; xk=1.0; h=0.1

10 y =atan((1

– x) / (1 + x)) !начало цикла

print *, “x=“ ,x, ” y=“ ,y

x = x + h

IF (x <= xk+h/10) GOTO 10 ! конец цикла

end