русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-11-27; просмотров: 675; Нарушение авторских прав


 

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

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

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

while b do

begin

<операторы>

end;

 

repeat

<операторы>

until c;

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

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

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

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

 

а) б)

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

 

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



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

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

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

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

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

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

 

Program Iteration;

Const Limit=100; {ограничение на число шагов}

Var x, eps, y, s, u: real;

n: integer;

Begin

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

ReadLn (x, eps);

y:=exp(x); {левая часть}

s:=1; {частичная сумма}

u:=1; {первое слагаемое}

n:=1; {число шагов}

Repeat

u:=u*x/n; {очередное слагаемое}

s:=s+u; n:=n+1;

Until (abs(y-s)<=eps) or (n>=Limit);

If n>=Limit then

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

else

begin

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

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

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

end

End.

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

 

var correct: boolean;

repeat

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

readln(x,eps);

correct:=(x>0) and (x<=3.14) and (eps>0);

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

until correct;

Задание на работу

 

1. Выбрать вариант по последней цифре номера студенческого билета (таблица 11)

2. Функция y(x) задана двумя способами: формулой y = f(x) и ее разложением в бесконечный ряд s. Требуется вычислить точное значение yT и приближенное sзначений функций y(x) при изменении ее аргумента xот a до b с шагом Dx. Приближенное значение вычислять путем суммирования членов ряда до достижения требуемой точности e ( |yT-s | £e).

3. Разработать вариант программы, в которой каждый член ряда вычисляется по формуле n-го члена.

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

5. Предусмотреть завершение процесса суммирования членов ряда по заданному максимальному номеру члена ряда n для предотвращения зацикливания итерационного цикла.

6. Для второго варианта программы произвести расчеты для трех значений e: 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 . . -0.000003 -0.000032 . . -0.000015

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

 

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

 

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

 



<== предыдущая лекция | следующая лекция ==>
Краткие теоретические сведения | Краткие теоретические сведения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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