Программирование циклов итерационные циклы

Программирование итерационного цикла

Итерационный цикл — это цикл, количество повторов в котором определяется результатами вычислений в теле цикла, и оно заранее неизвестно.

Введение

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

Основным и главным отличием итерационного цикла от арифметического цикла считается величина, которая служит параметром. Для арифметического цикла параметрами могут быть аргументы искомой функции ($х_i$), а для итерационного цикла параметрами выступают сами эти функции $(y_i)$. Данное обстоятельство определяет набор возможных вариантов итерационного цикла:

  1. Вариант, когда возможно достижение искомой функции, то есть точное решение задачи.
  2. Вариант, когда достижение искомой функции невозможно, то есть определяется некоторое приближение к точному итогу.

Итерационным циклом с точным решением является процесс вычислений, который позволяет достичь (или превысить) значение функции, подлежащее определению.

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

Программирование итерационного цикла

Существуют следующие методы определения значения функции итерационного цикла:

При вычислении значения функции с применением аргумента, осуществляется вычисление текущего значения функции по формуле, равнозначной применяемой в арифметических циклах:

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

Стандартное правило, по которому изменяется аргумент, остаётся прежним, то есть

но не задаётся его конечное значение $x_k (N)$. Остановку увеличения значения аргумента ($x_i$) определяет не сам аргумент, а вычисленная величина функции ($y_i$), когда она становится равной (yгр). Таким образом, условием окончания выполнения цикла является выражение:

При рекуррентных вычислениях выполняется определение текущей величины функции способом последовательных приближений. В математическом формате: $y_i = f(y_i-1)$,

следует предписание, требующее определять последующие величины функции через предыдущие.

Возможны следующие варианты выполнения этого процесса вычислений:

  1. Интервал изменения значения i является конечным.
  2. Интервал изменения значения i является бесконечным.

Для первого варианта процесс движется к известной заранее (то есть достижимой) итоговой величине функции (yгр). То есть интервал изменений циклического параметра i определяется зависимостью:

Это означает, что процесс рекуррентных вычисления является точным.

При втором варианте процесс устремляется к точной величине функции, достичь которое невозможно $y_i$ → yист. В этом процессе необходимо, чтобы параметр $i$ менялся в интервале от одного до бесконечности. Указанное условие изменений циклического параметра i является технически невозможным к исполнению. Поэтому завершение процесса решения осуществляется при определённой величине $i$, которая обеспечивает требуемый уровень точности (e) приближения к недостижимому значению функции. То есть процесс рекуррентных вычислений, в данном случае, является приближённым. Но поскольку в реальности точная искомая величина функции yист неизвестна, то требуется его замена на фактически допустимое. В качестве такого условно истинного значения можно применять последнюю текущую величину yi. В этом случае имеется возможность получения реальной оценочной зависимости остановки вычислительного процесса путём сравнения значения функции с предыдущей величиной:

$│ y_i – y_i — 1│≤ ɛ$ или $│ y_i – y_i -1│≥ ɛ$.

В дополнение к приведённой классификации, возможно деление итерационных циклов по характеру результатов на:

Сходящимся итерационным циклом является процесс, в котором величины текущих компонентов, формирующих функцию, становятся меньше по модулю.

Расходящимся итерационным циклом является процесс, в котором величины текущих компонентов, формирующих функцию, возрастают по модулю. Следует заметить, что такие процессы считаются допустимыми только для итерационных циклов, имеющих точное решение.

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

Количество повторных выполнений итерационного цикла подчиняется выражению:

Здесь $N$ является количеством повторений, а $y_i$ является результатом вычислений, выполненных в теле цикла.

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

Рисунок 1. Пример формирования алгоритма, позволяющего вычислить бесконечную сумму. Автор24 — интернет-биржа студенческих работ

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

Определение суммы является стандартной циклической задачей. Но данная задача отличается тем, что количество сложений, то есть количество повторных выполнений тела цикла, заранее не определено. По этой причине циклический процесс должен быть завершён при достижении необходимой точности. При формировании алгоритма следует учитывать чередование знаков слагаемых, и что степень символа x в числителе слагаемого непрерывно растёт.

Оптимальной является организация вычислений таким образом. Обозначим числитель слагаемого символом $p$, тогда очевидно, что следующее слагаемое будет иметь числитель $-р • х$ (знак минус подразумевает чередование $у$ слагаемых знаков), а непосредственно слагаемое $m$ равняется $p / i$, где $i$ является номером слагаемого. Блок-схема алгоритма выполнения данного цикла представлена на рисунке ниже:

Рисунок 2. Блок-схема алгоритма. Автор24 — интернет-биржа студенческих работ

Источник

Программирование итерационного цикла

Цель работы: Изучение элементов структурного программирования на основе циклов с предусловием или постусловием. Формирование навыков использования рекуррентных зависимостей.

Краткие теоретические сведения

По сравнению с циклом с параметром итерационные циклы являются универсальными. Для организации итерационных циклов используются операторы цикла с предусловием while (цикл «пока») и цикла с постусловием repeat … until (цикл «до»)

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

Соответствующие структуры циклов:

Здесь b, c — логические выражения.

Для оператора цикла с предусловием проверяется значение логического выражения, если оно имеет значение true, то операторы, входящие в цикл, выполняются, в противном случае осуществляется выполнение оператора, следующего за циклом (рисунок 6, а).

Цикл с постусловием выполняется хотя бы один раз. Затем проверяется значение логического выражения, если оно false, то операторы, входящие в цикл, выполняются, в противном случае осуществляется выход из цикла (рисунок 6, б).

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

Рисунок 6 – Конструкции цикла с предусловием (а) и постусловием (б)

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

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

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

Поясним все вышесказанное на примере.

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

Подобное разложение существует для всех функций. Обычно функции раскладываются в так называемые ряды Тейлора или ряды Маклорена. Именно таким образом и происходит вычисление функций в компьютере.

Для заданного х вычислим левую часть, используя встроенную функцию eps(x), и будем вычислять частичную сумму ряда правой части до тех пор, пока она не будет отличаться от заданной левой части менее, чем на заданную погрешность. Заметим, что для вычисления каждого слагаемого ряда требуется возведение в степень (трудоемкая операция) и вычисление факториала (дополнительный цикл). Но каждое очередное слагаемое можно рекуррентно вычислить через предыдущее, просто умножив его на , что требует всего двух операций.

Write(‘Введите аргумент и погрешность’);

Writeln(n,’ шагов не хватило для достижения заданной точности’)

Writeln(‘Точное значение ‘, y:15:6);

Writeln(‘Приближенное значение ‘, s:15:6);

Writeln(‘Погрешность ‘, s:10:6,’ достигнута за ‘, n ,’ шагов’);

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

write(‘введите аргумент от 0 до 3.14 и положительную погрешность ‘);

if not correct then writeln(‘что-то не то, повторите ввод!’);

  1. Выбрать вариант по последней цифре номера студенческого билета (таблица 11)
  2. Функция y(x) задана двумя способами: формулойy=f(x)и ее разложением в бесконечный рядs. Требуется вычислить точное значениеyTи приближенноеs значений функцийy(x)при изменении ее аргументаx отaдоbс шагомx.Приближенное значение вычислять путем суммирования членов ряда до достижения требуемой точностиyTs.
  3. Разработать вариант программы, в которой каждый член ряда вычисляется по формуле n-го члена.
  4. Разработать вариант программы, в которой каждое следующее слагаемое вычислять рекуррентно на основе предыдущего слагаемого
  5. Предусмотреть завершение процесса суммирования членов ряда по заданному максимальному номеру члена ряда nдля предотвращения зацикливания итерационного цикла.
  6. Для второго варианта программы произвести расчеты для трех значений : 0.01, 0.001 и 0.0001.
  7. Результаты расчетов вывести в виде таблицы следующей формы (таблица 10).

Таблица 10 – Форма вывода результатов работы программы

Аргумент Точное значение Приближенное значение Количество слагаемых Ошибка
0.20 0.30 . . 0.80 0.16053 0.21267 . . 0.28540 0.16053 0.21270 . . 0.28542 3 3 . . 5 -0.000003 -0.000032 . . -0.000015

Таблица 11 — Варианты заданий

Номер варианта Диапазон изменения аргумента Функция Формула приближенного вычисления функции
0
1
2
3
4
5
6
7
8
9

Лабораторная работа № 6

Источник

Читайте также:  Godot язык программирования учить
Оцените статью