
- •Утверждаю Зам.Директора по учебной работе
- •Основы Алгоритмизации и программирования учебно-методическое пособие
- •220301 Автоматизированные системы обработки информации и правления
- •Введение
- •Основные этапы решения задач на эвм
- •Глава 1 способы записи алгоритма
- •1.1 Алгоритм и его свойства
- •Схемы алгоритма
- •1.2 Структуры алгоритмов
- •1.2.1 Алгоритм линейной структуры
- •1.2.2 Алгоритм разветвляющейся структуры
- •1.2.3 Алгоритм циклической структуры
- •1.2.4 Алгоритм со структурой итерационных циклов
- •1.2.5 Алгоритм со структурой вложенных циклов
- •Глава 2 программа на языке высокого уровня
- •2.1 Системы программирования
- •2.2 Характеристика языка программирования Паскаль
- •2.3 Алфавит и структура программы на Паскале Алфавит программы
- •Структура программы
- •Глава 3 Стандартные типы данных
- •3.1 Данные. Типы
- •3.2 Вещественные типы
- •3.3 Целочисленные типы
- •3.4 Символьный тип
- •3.5 Логический тип
- •4 Представление основных структур программирования: итерация, ветвление, повторение
- •4.1 Линейная структура (следование)
- •Var X,y,f: real;
- •4.2 Разветвляющая структура (ветвление)
- •4.3 Циклическая структура (повторение)
- •4.3.1 Оператор цикла с параметром
- •I : Integrer; {номер числа }
- •4.3.2 Оператор цикла с постусловием
- •I,n: integer;
- •4.3.3 Оператор цикла с предусловием
- •4.3.4 Итерационные циклы
- •Var r,a:real;
- •Приближенное вычисление функций
- •Решение уравнений приближенными методами
- •Метод деления отрезка пополам
- •Xsl, Xpr, a, b, e, y1, y2, Lev, Prav, y: Real;
- •Метод Ньютона
- •Метод прохождения отрезка с переменным шагом
- •Вычисление определенных интегралов
- •1. Метод прямоугольников
- •X: Real;
- •2. Метод трапеций
- •X: Real;
- •Глава 5 Типы данных, определяемые пользователем
- •5.1 Пользовательский тип данных
- •5.1.1 Типизированные константы
- •5.1.2 Перечисляемый тип
- •I:1..6; loto: num;
- •5.2 Массивы
- •I : integer;
- •5.2.1. Работа с одномерными массивами
- •I,sum : integer;
- •Var a: array [1..N] of real;
- •Var I,s,r: integer;
- •I : list;
- •I : integer;
- •X : mass;
- •I, j, p, n, m, k:integer;
- •I, j, k, nd : integer;
- •Xmin : real;
- •X : mass;
- •Var I, j, nd : integer;
- •X : mass;
- •5.2.2 Работа с двумерными массивами( матицы)
- •Var I,j,n : integer;
- •I,j,n,m : integer;
- •5.2.3 Сортировка массивов
- •Сортировка методом "пузырька"
- •X : Array [1..Nmax] Of Real;
- •X : Array [1..Nmax] Of Real;
- •Сортировка выбором
- •Обменная сортировка
- •Var m:array[1..1000] of integer;
- •I,z,n:integer; Key:byte;
- •Сортировка слиянием
- •Var { Описание массивов и переменных}
- •X, y: array[1..1000] of integer;
- •5.3 Строковые типы
- •Var s: string[10];
- •5.3.1 Операции над строками
- •5.3.2 Стандартные процедуры и функции для строк
- •Функция Length
- •Функция Upcase
- •Функция Copy
- •Функция Роs
- •I, n, p: integer;
- •I: integer;
- •I: integer;
- •Insert (word2, text, I);
- •Insert (chr (k-32), t, I);
- •Insert (chr (k-80), t, I);
- •Insert (‘е’, t, I);
- •Глава 6 Процедуры и функции
- •6.1 Процедуры
- •I : Integer;
- •I, n: integer;
- •Input _ mas (k, n);
- •I,n : Integer;
- •I,k : Integer;
- •6.2 Функции
- •I:Integer;
- •2) Массивы;
- •I,n : Integer;
- •I : Integer;
- •I,tn,tk:Real;
- •Глава 7 Программирование рекурсивных алгоритмов
- •7.1 Понятие рекурсии
- •7.2 Техника построения рекурсивных алгоритмов
- •7.3 Формы рекурсий
- •If Prim(I) then
- •7.4 Рекурсия и итерация
- •7.5 Программирование с использованием рекурсии
- •Var p: Integer;
- •Var X, y: Integer; begin
- •Var z: Real; begin
- •Var I:integer; j:real;
- •Глава 8 Файлы
- •8.1 Текстовые файлы
- •I,n : Integer; {Вспомогательные переменные}
- •8.2 Типизированные файлы
- •X,m,s : Real;
- •8.3 Нетипизированные файлы
- •Глава 9 Записи
- •9.1 Описание записи
- •I: integer;
- •9.2 Оператор присоединения
- •I, j, k, m : integer;
- •X: real;
- •9.3 Вложенные записи
- •9.4 Записи с вариантами
- •Information: record
- •I, k, n : integer;
- •Vedom : Array [1..Nmax] Of Stud;
- •I,j : Integer;
- •Vedom : File Of Stud;
- •Vedom : File Of Stud;
- •I,j,kdv,k2 : Integer;
- •If Not Eof (Ftel) Then
- •If Not Eof(Ftel) then
- •If Not Eof(FilComp) then
- •Глава 10 Динамические структуры данных
- •10.1 Распределение памяти при выполнении программ
- •Верхняя граница памяти ms-dos
- •10.2 Ссылочные переменные
- •10.3 Процедуры управления кучей
- •10.4 Использование переменных ссылочного типа
- •I: Integer;
- •I, k : Integer;
- •Val(b, k, code);{Превратили второй символ в ч исло}
- •10.5 Списки
- •Var Ch : Char;
- •Var Ch : Char;
- •10.6 Деревья
- •10.7 Константы ссылочного типа
- •Глава 11. Язык Паскаль. Графический модуль Graph Список используемой литературы Основная
- •Дополнительная
4.3.4 Итерационные циклы
Среди циклов с неизвестным числом повторений большое место занимают итерационные. В этих циклах количество повторений заранее неизвестно. Выход из цикла происходит, если достигнута заданная точность результата или появилась стандартная ситуация (конец данных). Такие циклы используются при решении задач численными методами: приближенное вычисление функций, определенных интегралов, решение уравнений и т.д.
Основной особенностью итерационных циклов является то, что новое значение искомой величины (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.
Пример
4.11 Вычислить
значение арифметического выражения:
Вычисление
непрерывных радикалов производится в
цикле, начиная от внутреннего радикала.
В данной задаче начальное значение
.
Каждое следующее значение радикала
будет вычисляться через предыдущее
значение радикала по формуле
,
число изменяется от начального значения
5 до конечного значения 98 с шагом 3.
Var r,a:real;
begin
r:=sqrt(2); a:=5;
while a<=98 do
begin
r:=sqrt(a+r);
a:=a+3;
end;
writeln('R=',r);
end.
Приближенное вычисление функций
Пример 4.12 Вычислить значение функции 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 – играет роль предыдущего и следующего члена}
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);