- •Общая функциональная схема эвм
- •Языки программирования
- •Этапы решения задач на эвм
- •Понятие алгоритма и его свойства
- •Типы алгоритмов
- •Ос эвм. Понятие о файловой системе
- •Команды ms dos
- •Программирование на языке паскаль
- •Структура программы на языке паскаль
- •Описание данных
- •1. Константы
- •2. Переменные
- •Комментарии
- •Операторы языка паскаль
- •Операторы обработки данных
- •1. Операторы ввода
- •2. Операторы вывода
- •3. Вычисление по формулам. Оператор присваивания
- •Линейные программы
- •Управляющие операторы
- •1. Разветвляющиеся алгоритмы. Оператор if (если)
- •2. Пример разветвляющейся программы
- •3. Оператор case
- •Циклические алгоритмы и программы
- •1. Общая схема цикла
- •2. Циклы со счетчиком
- •3. Итерационные циклы
- •3.1. Оператор цикла с пост-условием
- •3.2. Оператор цикла с пред-условием
- •Tипы данных, используемых в паскале
- •1.Представление данных в эвм
- •2. Стандартные функции Паскаля и Турбо Паскаля
- •3. Булевские переменные и выражения
- •4.Функции для работы с символами
- •5. Массивы
- •Примеры программ обработки массивов
- •Особенности алгоритмов и программ с накапливанием
- •Алгоритм нахождения минимума и максимума
- •Задача сортировки
- •Обработка многомерных массивов
- •Итерационные циклы
- •Типовые алгоритмы с итерационными циклами
- •1. Приближенное вычисление функций
- •2. Решение уравнений приближенными методами
- •2.1. Метод Ньютона
- •Программы обработки строк символов (текстов)
- •1. Простейшие алгоритмы и программы обработки строк
- •Типовые программы обработки строк
- •Задача 1 выделения слов из текста (слова разделены одним пробелом)
- •Задача 2 выделения слов из текста (слова разделены несколькими пробелами)
- •Алгоритмы поиска
- •Алгоритм линейного поиска
- •Библиографический список
- •Содержание
Итерационные циклы
В этих циклах количество повторений заранее неизвестно. Выход из цикла происходит, если достигнута заданная точность результата или появилась стандартная ситуация (конец данных). Такие циклы используются при решении задач численными методами: приближенное вычисление функций, определенных интегралов; решение уравнений и т.д.
Основной особенностью итерационных циклов является то, что новое значение искомой величины вычисляется с использованием старого по формуле:
Yслед=f(Yпред)
Обычно задается начальное значение (приближение)
Yo
и погрешность вычисления результата (Y) в виде: E= 10-m – с каким количеством цифр после запятой необходимо определить Y. Считается, что заданная точность достигнута, если найденные значения Yпред и Yслед отличаются на величину, меньшую E, т.е. условие окончания вычислений:
|Yслед - Yпред|<E
Для программирования итерационных циклов в Паскале используются операторы WHILE и REPEAT.
Типовые алгоритмы с итерационными циклами
1. Приближенное вычисление функций
Пример 1.
Вычислить значение функции Sin x по приближенной формуле
F = Sin X = X - X3/3! + X5/5! - ...
с погрешностью E=10-5.
Функция F здесь представляет собой сумму членов степенного ряда:
F = U1 + U2 + ... + Un
Условие окончания вычисления функции:
|F - Fслед|< E
Заметим, что |F-Fслед| = |Uслед| – очередное слагаемое.
Запишем формулу для его вычисления, учитывая, что в выражении для Sin присутствуют только нечетные степени x и факториалы нечетных чисел:
Очередное слагаемое:
Следующее слагаемое:
Слагаемые можно определить:
1) непосредственно по формуле;
2) используя предыдущее значение:
Вначале: n=1; U1=X ; U3=-X2/(2*3)*U1; f0=0; f1=f0+U1=X
Алгоритм
1. Ввести X и Е.
2. Положить Uпредыд=X ;Uслед=-X3/(2*3); n=1
3. f=0
4. Пока |Un|>E
вычислить f=f+Uпредыд
Uслед=-Uпредыд*X3/(n+1)(n+2)
Увеличить n=n+2
Заменить Uпредыд=Uслед
5. Вывести f и Uпредыд
6. Закончить.
Введем следующие обозначения:
x => X
E => E
f => F
Uпредыд. => U
Uслед. => UN
Программа для рассмотренного алгоритма будет иметь вид:
PROGRAM NOVSIN;
VAR
F,x,e,u,un:real;
n:integer;
begin
Writeln('Введите х и Е');
read(x,e);
u:=x;
un:=-u*x*x/(2*3);
f:=0;
n:=1;
while abs(un)>e do
begin
f:=f+u;
un:=-u*sqr(x)/((n+1)*(n+2));
n:=n+2;
u:=un;
end;
writeln('sin',x,'=',f,'погрешность',u);
end.
Количество повторений цикла заранее неизвестно. Оно зависит от требуемой точности и от значения аргумента. Если X=0, то цикл не выполняется ни разу. Количество повторений цикла можно подсчитать с помощью обычного счетчика:
k:=0;
while abs(un)>e do
begin
k:=k+1;
f:=.......;
end;
writeln('k= ',k);
2. Решение уравнений приближенными методами
В общем виде уравнение может быть записано так:
f(x)=0,
где f(x) – произвольная функция. В общем случае невозможно записать формулу для нахождения его корней, за исключением квадратного и линейного уравнения. При этом корни определяются приближенными методами. Наиболее простой и распространенный из них - метод Ньютона.
2.1. Метод Ньютона
Этот метод еще называют методом касательных. Он заключается в следующем.
1. Выбирается интервал [a,b] значений аргумента Х, на котором ищется корень. На этом интервале функция должна менять знак.
2. Начальное значение корня X0 принимается равным левой (a) или правой (b) границе интервала.
3. Вычисляется очередное приближение по формуле
Хслед = Хпред - f(Хпред)/f'(Хпред)
4. Если |Хслед - Хпред|<E, то Хслед - корень, в противном случае – выполняется подстановка Хслед на место Хпред и повторение п.3.
Очевидно, что метод позволяет определить корень, если:
1) f(x) дифференцируема;
2) f'(x) не равна 0 в Е-окрестности корня.
Неудачный выбор Х0 может привести к тому, что приближения "расходятся" от точки корня.
Рассмотрим пример программы нахождения корней уравнения.
Для определенности будем искать корни уравнения:
2Cosx - exp(-x)=0,
т.е. f(x)=2Cosx - Exp(-x) и
f'(x)=2Sinx - Exp(-x)
Обозначим:
Хo => X0 E => E
Хстарое => X
Хновое => Xn
Программа будет иметь вид:
Program NUTON;
Var
y,x0,x,xn,e:Real;
Begin
Writeln('Введите x0,Е');
Readln(Х0,e);
x:=Х0;
y:=10*e; {начальное значение разности приближений}
While ABS(y) > Е do
Begin
xn:=x-(2*SIN(x)-EXP(-x))/(2*COS(x)+EXP(-x));
y:=xn-x;
x:=xn;
End;
Writeln('Корень = ',xn:8:4,' разность = ',y:8:6);
Readln;
End.
Можно определить количество приближений (итераций) - количество повторений цикла.
