- •Общие сведения об эвм
- •1. Общая функциональная схема эвм
- •2. Языки программирования
- •3. Этапы решения задач на эвм
- •4. Понятие алгоритма и его свойства
- •5. Графическое описание алгоритмов. Схемы алгоритмов
- •Блоки для изображения схем алгоритмов и программ
- •6. Типы алгоритмов
- •7. Ос эвм. Понятие о файловой системе
- •Имя.Расширение
- •8. Команды ms dos
- •Программирование на языке Паскаль
- •1. Структура программы на языке паскаль
- •2. Описание данных
- •2.1. Константы
- •2.2. Переменные
- •3. Комментарии
- •4. Операторы языка паскаль
- •5. Операторы обработки данных
- •5.1. Операторы ввода
- •5.2. Операторы вывода
- •5.3. Вычисление по формулам. Оператор присваивания
- •6. Линейные программы
- •7. Управляющие операторы
- •7.1. Разветвляющиеся алгоритмы. Оператор if (если)
- •7.2. Пример разветвляющейся программы
- •7.3. Оператор case
- •8. Циклические алгоритмы и программы
- •8.1. Общая схема цикла
- •8.2. Циклы со счетчиком
- •8.3. Итерационные циклы
- •8.3.1. Оператор цикла с пост-условием
- •8.3.2. Оператор цикла с пред-условием
- •Описание данных
- •9. Типы данных, используемых в паскале
- •9.1. Представление данных в эвм
- •9.2. Стандартные функции Паскаля и Турбо Паскаля
- •9.3. Булевские переменные и выражения
- •9.4. Функции для работы с символами
- •Функции языка Паскаль
- •9.5. Массивы
- •10. Примеры программ обработки массивов
- •11. Особенности алгоритмов и программ с накапливанием
- •12. Алгоритм нахождения минимума и максимума
- •13. Задача сортировки
- •14. Обработка многомерных массивов
- •15. Программы обработки строк символов (текстов)
- •15.1. Простейшие алгоритмы и программы обработки строк
- •15.2. Анализ символов в строке
- •16. Типовые программы обработки строк
- •16.1. Выделение слов из текста (слова разделены одним пробелом)
- •16.2. Выделение слов из текста (слова разделены несколькими пробелами)
- •16.3. Некоторые типовые алгоритмы и программы обработки массивов строк (слов из текстов)
- •17. Алгоритмы поиска
- •17.1. Алгоритм линейного поиска
- •17.2. Алгоритм дихотомического поиска
- •Процедуры, функции и модули в паскале
- •18.1. Процедуры
- •18.1.1. Пример программы с процедурой
- •18.1.2. Расположение процедур в программе
- •18.2. Функции
- •18.2.1. Пример программы с функцией
- •18.3. Внешние процедуры и функции
- •18.3.1. Модули пользователей
- •19. Итерационные циклы
- •19.1. Приближенное вычисление функций
- •19.2. Решение уравнений приближенными методами
- •19.2.1. Метод деления отрезка пополам
- •19.2.2. Метод Ньютона
- •19.2.3. Метод прохождения отрезка с переменным шагом
- •19.3. Вычисление определенных интегралов
- •19.3.1. Метод прямоугольников
- •19.3.2. Метод трапеций
- •20. Дополнительные сведения о ТипАх данных, применяемЫх в Паскале
- •20.1. Перечисляемый тип
- •20.2. Интервальный тип
- •20.3. Множества
- •20.3.1. Примеры программ с использованием множеств
- •Алгоритм
- •20.4. Записи
- •20.4.1. Примеры программ обработки записей
- •Алгоритм
- •Оператор_1;
- •21. Файлы и наборы данных
- •Assign(имя_файла, имя_нд);
- •21.1. Текстовые файлы
- •21.1.1. Создание текстового файла
- •21.1.2. Работа с существующим текстовым файлом
- •21.2. Типизированные файлы
- •21.2.1. Последовательная обработка типизированных файлов
- •21.2.2. Использование прямого доступа к записям типизированного файла
- •21.2.3. Упорядочение записей в файле
- •Алгоритм
- •21.2.4. Удаление записей из файла
- •21.2.5. Вставка записей в файл
- •22. Динамическое распределение памяти. Указатели и списки
- •22.1. Использование указателей. Списки
- •22.2. Очереди
- •22.2.1. Очередь типа lifo
- •22.2.2. Очередь fifo
- •23. Стандартные модули Турбо Паскаля
- •23.1. Модуль Crt
- •23.1.1. Работа с клавиатурой и звуком
- •23.1.2. Управление цветом
- •23.1.3. Создание окон и позиционирование курсора
- •23.1.4. Построение графика в текстовом режиме
- •23.1.5. Алгоритм и программа представления меню средствами Турбо Паскаля
- •23.2. Модуль dos
- •23.3. Модуль Graph
- •23.3.1. Инициирование графического режима
- •1) Процедура InitGraph(Var grDr,grMd:integer;path:string);
- •23.3.2. Вывод точек на экран
- •23.3.3. Вывод текста (надписей) в графическом режиме
- •1) SetTextStyle(Шрифт, Направление:Word; Размер:1..10);
- •23.3.4. Построение графических изображений
- •1) SetLineStyle(Тип_линии, Образец, Толщина : Word);
- •23.3.5. Запоминание и вывод изображений
- •24. Рекомендации по оформлению текста программ
- •Библиографический список
- •Оглавление
19. Итерационные циклы
В этих циклах количество повторений заранее неизвестно. Выход из цикла происходит, если достигнута заданная точность результата или появилась стандартная ситуация (конец данных). Такие циклы используются при решении задач численными методами: приближенное вычисление функций, определенных интегралов, решение уравнений и т.д.
Основной особенностью итерационных циклов является то, что новое значение искомой величины (Yслед) вычисляется с использованием старого (Yпред) по формуле:
Yслед=f(Yпред)
Обычно для вычисляемой величины Y задается некоторое начальное значение (приближение) Yo и погрешность вычисления результата (Y) в виде: E=(0,5; 1)*10-m, где m – целое число. Как правило, E=(0,1; 0,5, 0,01; 0,05, 0,001 и т.д.). Считается, что заданная точность достигнута, если найденные значения Yпред и Yслед отличаются на величину, меньшую E, т.е. условие окончания вычислений можно записать так:
|Yслед – Yпред|<E
Для программирования итерационных циклов в Паскале используются операторы While и Repeat.
19.1. Приближенное вычисление функций
Пример 1. Вычислить значение функции SinX по приближенной формуле
F = SinX = X - X3/3! + X5/5! - ...+(–1)2n-1 X2n-1/(2n-1)!, n=1, 2, 3 ...
с погрешностью E=10-5.
Функция F здесь представляет собой сумму членов степенного ряда:
F = U1 + U2 + ... + Un
Условие окончания вычисления функции:
|F - Fслед|< E
Заметим, что |F-Fслед| = |Uслед| – очередное слагаемое. Можно сказать, что вычисления прекращают, как только получают член ряда, меньший, чем заданная абсолютная погрешность.
Обратите внимание, что вычислять слагаемые ряда непосрественно по формуле (находить степень и факториал, делить их) крайне нерационально. В этих случаях целесообразно выражать последующий член через предыдущий. Покажем, как это делается.
Пусть речь идет о слагаемом с номером n. Тогда на основании общей формулы для члена ряда это слагаемое (предыдущее) без учета знака запишется так:
.
Номер следующего слагаемого будет n+1, тогда само слагаемое запишется так:
.
Разделив последнее выражение на предыдущее, получим выражение для вычисления следующего члена ряда по известному предыдущему
.
Обратите внимание, что в этой формуле n означает номер предыдущего члена. Если считать, что n имеет начальное значение 1 и изменяется с шагом 2, то знаменатель Uслед может быть вычислен как произведение вида:
(n + 1) (n+2).
Заметим еще, что при программировании подобных задач часто вводят одну переменную для представления как предыдущего слагаемого, так и последующего.
Вначале: n=1; U=X; F=0 {U – играет роль предыдущего и следующего члена}
Алгоритм
1. Ввести X и Е.
2. Положить n=1, U = X, F=0.
3. Пока |U|>E
Вычислить F=F+U;
Вычислить очередной член U = –U X2/((n + 1) (n+2));
Получить его номер n=n+2.
4. Вывести X и F.
5. Закончить.
Программа для рассмотренного алгоритма будет иметь следующий вид
Program NovSin;
Var
F, X, E, U : Real;
n : Integer;
Begin
Writeln('Введите аргумент Х и погрешность Е');
Readln(X,E);
n := 1;
U :=X ;
F:=0;
While Abs(U)>E Do
Begin
F:=F+U;
U:=-U*Sqr(X)/(2*N*(2*N+1));
N:=N+1;
End;
Writeln(X:8:6,' SinX=',F:10:6,
' Машинный SinX=',Sin(X):10:6);
End.
Количество повторений цикла заранее неизвестно. Оно зависит от требуемой точности и от значения аргумента. Если X=0, то цикл не выполняется ни разу. Количество повторений цикла в данном случае можно узнать по номеру N последнего вычисленного члена. В других случаях это можно сделать с помощью обычного счетчика:
k := 0;
while abs(U)>E do
begin
k := k+1;
F :=.......;
. . . . . .
end;
writeln('k= ',k);