Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное-пособие2011.doc
Скачиваний:
15
Добавлен:
09.04.2015
Размер:
579.07 Кб
Скачать

2.2.3.Вычислительный процесс циклической структуры.

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

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

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

Цикл с постусловием Цикл с предусловием

Рис.16 Рис. 17

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

Например: Х = Х + Х

и т.д.

Если конечное значение переменной цикла в задаче определено, то при заданном шаге вычислений количество повторений в цикле может быть вычислено по следующей формуле:

N = (Xк - Хн) /  Х + 1,

т.е. число повторений известно. Такие циклы носят название циклов с известным числом повторений. Однако не всегда такое число можно рассчитать, т.к. в некоторых задачах конечное значение переменной цикла неизвестно и выход из цикла осуществляется по выполнении некоторого условия /цикл типа “пока”/. Подобного рода циклы встречаются при решении задач численными методами и называются итерационными циклами или циклами с неизвестным числом повторений.

Циклы с известным числом повторений

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

Пример8.

Вычислить значения функции y = x – sin(x) для всехx [xн, хк]; шаг изменения аргументах равен х; хн и хк соответственно начальное и конечное значение аргументах.

Блок-схема алгоритма решения задачи представлена на рис. 18.

Блок 1.Переменнымхн, хк ихзадаются их числовые значения путем ввода, например, с пульта дисплея.

Блоки 2, 6.Непосредственно циклическая часть задачи. Тело цикла – это линейный процесс /блоки 3, 4/. В блоках 2 и 5 задаются соответственно начальное значение переменной цикла и ее последующие значения. В блоке 6 проверяется условие выхода из цикла.

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

Рис. 18 Рис. 19

Программа для решения примера, блок-схема алгоритма которого приведена

На рис.18

На рис.19

inputxн,xk, x

x=xн

m:y=x-sin(3.14*x)^2

print x,y

x=x+x

if xxк then goto M

end

input xн, xk, x

x=xн

m: If xxк then

y=x-sin(3.14*x)^2

print x,y

x=x+x

goto M

end if

end

Используя оператор цикла, программа может быть записана как

input xн, xk, x

for x=xн to xk step x

y=x-sin(3,14*x)^2

print x,y

nextx

end

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

Пример 9.

Вычислить значения

Вычислить Y =

3 cos x , если 2 x <3

2 sin x , если 3 x5

Для всех значений х [2,5] с шагом изменения аргументах.

Алгоритм решения данной задачи может иметь структуру, представленную нарис. 21.

Рис.21

Пример программы:

inputx

x=2

1: y=3*cos(x)

print x,y

x=x+x

if x<3 then goto 1

2: y=2*sin(x)

x=x+x

if x<=5 then goto 2

end

В данном алгоритме два последовательно расположенных цикла. В первом цикле табулируется функция Y = 3cos X на интервале ХС [2, 3] с шагом Х.. Это происходит в блоках 2 6 . Второй цикл включает блоки 711 и в нем происходит табулирование функцииy = 2 sin xна интервалеx [3 +x, 5]. Однако такой алгоритм неэффективен с точки зрения повторов однотипных действий в одном и другом циклах. Избежать этого можно, применив для решения задачи алгоритм, представленный на рис. 21.

Вданном алгоритме при вычислении функцииy = 3 cos x будут «работать» блоки 1,2,3,5,6,7,8. Тело цикла включает блоки 3,4,5,6 и является процессом разветвляющейся структуры.

Рис. 21

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

input x

for x=2 to 5 step x

if x3 then

y=3*cos(x)

else

y=2*sin(x)

end if

print x,y

next x

end

Пример 10.

Пусть та же задача поставлена в общем виде. Вычислить

Вычислить Y =

3 cos x , если a < x < в

2 sin x если в < x < c, где a < c

для всех значенийx [a, c] шагомх. Тогда свойство массовости алгоритма будет выполнено.

Рис. 22

Пример программы

inputa,b,c,dx

for x=a to c step dx

if x<b then y=3xCos(x)

else y=2xSin(x)

print x,y

end if

next x

end.

Рассмотрим пример, когда телом цикла является также циклический процесс.

Пример 11.

Вычислить Z

Z = (cos x y) /(x+y)

для каждого x [ xн, xк ] с шагомdx и

каждого y [ yн, yк ] с шагомdy.

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

Таблица 3

X

x1=xн

X1

X1

X1

X2

X2

X2

X2

Xк

Xк

Xк

y

y1=yн

Y2

Yк

Y1

Y2

Yк

Y1

Y2

Yк

Переменная «х» принимает новое значение только тогда, когда«y» изменит все свои значения отдоyк. Причем, при новом значении«х» переменная«y» опять изменяется на интервалеyн, yк. Блок-схема алгоритма задачи представлена нарис. 23.

Рис. 23

Пример программы:

inputxн,xк,x,yн ,yк ,y

for x= xн to xк step x

for y= yн to yк step y

z=cos(x+y)/(x+y)

print x,y,z

nexty

nextx

end

Блоки 2+9 составляют внешний цикл, блоки 3 + 8 являются телом внешнего цикла и одновременно являются циклом, который называется внутренним.

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

Пример 12.

Вычислить сумму N слагаемых

Раскроем эту запись

Процесс вычисления суммы на ЭВМ представляется как циклический процесс накопления суммы. Причем, каждый новый повтор вычислений в цикле добавляет в ячейку суммы еще одно слагаемое. Используя правило записи рекуррентного соотношения, вычисления тела цикла можно записать в виде следующего соотношения:

Для выполнения тела цикла первый раз необходимо задать начальные значения переменной s и i :

s = 0,

i = 1.

Блок-схема алгоритма представлена на рис. 24.

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

Пример 13.

Вычислить произведение

Рекуррентное соотношение для вычисления тела цикла

Начальное значение Р = 1; к = 1. Алгоритм задачи представлен на рис. 25

Рис. 24 Рис. 25

Программа на Qbasicдля задачи рис 24:

remвычисление суммы

inputn,x

s=0

for i=1 to n

s=s+xi/(i+2)

nexti

printS

end

Программа на Qbasicдля задачи рис 25:

remвычисление произведения

inputm,x

p=1

for k=1 to m

p=p*k2/(k+1)

next k

print p

end


Пример 14.

Табулировать функцию у =F(x) на интервалеХ [Xн ,Xк] c

шагом Х определить ее наибольшее и наименьшее значения на этом отрезке.

Математическая постановка задачи

Определить МАХ =

МIN =, где Х[Xн ,Xк]

Таким образом, после выхода из цикла значение переменной МАХ должно быть равно большему из всех значений функции y(x) на заданном отрезке, а значение переменной МINсоответственно меньшему.

При каждом очередном выполнении цикла сравниваются значения двух пар переменных: Н и МАХ; У и МIN

МАХ = /1/

МIN = /2/

Для выполнения первого цикла значения переменных МАХ и МIN уже должны быть определены. Это может быть начальное значение функции У н =f(xн)

МАХ =F(Xн)

МIN=F(Xк)

Однако чаще в качестве начальных значений переменных МАХ и МIN берутся числа заведомо меньшее /для МАХ/ или большее /для МIN/, чем начальное значение функции. Пусть, например, МАХ = -1020, МIN = 1020. Тогда при первом же сравнении значения У(Хн) будет присвоено в соответствии с формулами /1/ и /2/ переменным МАХ и МIN. Блок-схема алгоритма решения данной задачи представлена нарис. 26.