Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Общие вопросы организации циклов




 

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

Пример 1.9. Пусть СП вычисления EXP в нашем распоряжении нет, и нам самим требуется составить соответствующий алгоритм. Запишем разложение exp(- x) в ряд Тейлора, ограничившись n -м членом:

(1.15)

Обозначим hi общий член ряда:

(1.16)

Тогда ряд (1.15) может быть представлен выражением

(1.17)

Вычисления hi можно проводить двояко:

· непосредственно по (1.16);

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

В первом случае необходимо для каждого следующего члена ряда проводить все вычисления как для степени, так и для факториала; во втором случае вычисления проводятся с использованием предыдущих результатов по формуле

. (1.18)

Ясно, что второй способ более рациональный.

При вычислении суммы ряда (1.17) также более рационально использовать предыдущие результаты:

, (1.19)

где Si - значение частичной суммы членов ряда с 1-го по i -й включительно.

Нетрудно видеть, что при определении значения y =exp(- x) для конкретного значения x = x0 достаточно организовать один цикл, в котором объединить вычисления значений hi и Si.

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

yn = , (1.20)

где qi - коэффициенты разложения функции в ряд.

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

* n задано или известно в результате анализа погрешности ряда (константа n – исходное данное). Чаще всего это бывает, если опреде-ляется значение функции для одного конкретного значения x=x0 или небольшого числа мало отличающихся (в том смысле, что для них n не изменяется) значений x. Тогда организуются циклические вычисления, которые заканчиваются при достижении параметром i цикла значения n;

* n заранее неизвестно, однако задана допустимая погрешность e, и циклический процесс заканчивается по условию выполнения неравенства

ç yn+1-yn ÷ £ e, (1.21)

или

ç Rn (x) ç£ e, (1.22)

где Rn (x) - остаточный член ряда (константа Rn вычисляется заранее).

В примере 1.9 ряд является знакопеременным, поэтому [4] погрешность ряда не превышает значения первого отброшенного его члена, равного

Rn (x) (1.23)

Вычислительный процесс организуется по-разному в случае вычис-ления у=f(x) для конкретного значения x = x0 и для некоторого множества значений xi (например, необходимо построить график у=f(x), а £ х £ в). В пер-вом случае вычисление выполняется однократно и потому нет необходи-мости в дополнительной организации вычислительного процесса; во втором случае необходимо организовать циклический перебор всех значений xi, используя номера i -x точек на оси ОХ при неравномерном разбиении отрезка [a, b] либо приращение по х,

(1.24)

при равномерном разбиении на к интервалов (к - известно), и тогда

xi = a + i*Dx. (1.25)

Отметим, что полином Qn (x) может быть записан аналогично (1.20). Однако ряд и полином существенно отличаются: ряд имеет общий член, так как коэффициенты ряда вычисляются по определённому закону, а у полинома коэффициенты могут быть произвольными, поэтому у него может отсутствовать общий член. Вопрос определения n для полинома должен решаться отдельно в каждом конкретном случае.

Итак, видно, что циклический процесс заканчивается по-разному, в зависимости от того, известно либо нет число повторений в цикле: в первом случае цикл заканчивается, если вычисления в теле цикла прове-дены для всех значений параметра цикла, а во втором - если выполнено условие завершения цикла.

Стандартные способы построения циклов в программировании – использование конструкций for, while <условие> do <оператор>, repeat <оператор> until <условие> (рис. 1.15).

Оператор for имеет внутренний счётчик в обоих вариантах реали-зации (Iнач, Iкон - целые константы):

for I:= Iнач to Iкон do <оператор> - счёт в прямом направлении;

for I:= Iкон downto Iнач do <оператор> - счёт в обратном направлении.

Здесь изменение параметра цикла происходит на 1 по умолчанию; в некоторых языках программирования используется явное указание на шаг (step) приращения DI.

Применять оператор for целесообразно при известном числе повторений в цикле.

На рис. 1.15,а и б приведены фрагменты СА для оператора for; здесь S1, S2 - тело цикла.

Запишем фрагмент программы примера 1.6 (строки 3-9) с использо-ванием оператора for (здесь invel(lel, rel) - процедура инверсии элементов):

с:=А[1];

for i:=1 to n -1 do




Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 255; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.