Алгоритмы для вычисления корней системы на языке Паскаль
Министерство
образования Республики Беларусь
Белорусский
национальный технический университет
Кафедра
« Тепловые электрические станции»
КУРСОВАЯ
РАБОТА
ПО
ИНФОРМАТИКЕ
Исполнитель:
Стражникова Е. В.
Гр.
106422
Руководитель:
Тарасевич Л.А.
Минск
2003г.
1.
Постановка задачи
Показанный на рисунке кривошипно-шатунный
механизм описывается уравнением
К1∙S1∙cos(φi)+K2∙sin(φi)-K3=Si²
при =1,2,3, где А1=К1/2;
А2=√А1²+А3²-К3
;
А3=К2/2∙А1;
Механизм должен удовлетворять следующим
условиям:
i
|
Si
|
φi
|
1
|
1.0
|
20°
|
2
|
1.2
|
45°
|
3
|
2.0
|
60°
|
Спроектировать устройство, отвечающее всем трем
указанным условиям. Для этого записать трижды уравнение, описывающее работу
механизма, и найти Кi, какие
значения А1, А2, А3 соответствуют искомому решению?
2.
Краткое описание Pascal
Язык программирования
Язык - это средство общения между людьми,
человеком и машиной и между машинами. Языки могут быть естественные и
искусственные, или формальные. Естественным языкам присуща неопределенность и
неточность. Искусственные языки, предназначенные для записи программ, называют
алгоритмическими или языками программирования.
Алгоритмический язык - это набор символов,
являющихся алфавитом языка, система правил связи символов для образования
“слов” и “предложений” (синтаксис языка), с помощью которых представляются
компоненты языка, и система правил их истолкования (семантика).
Паскаль - один из наиболее перспективных языков
программирования. Он разработан в 1971 году математиком Никлаусом Виртом,
профессором Института информатики Швейцарской высшей политехнической школы в
Цюрихе. Язык получил наименование в честь знаменитого математика и философа
Блеза Паскаля (1623-1662), который один из первых изобрел в 1641 году
калькулятор (суммирующую машину).
Язык удовлетворяет требованиям структурного
программирования: он имеет операторы для реализации управляющих структур
программирования. Хороший выбор структур данных позволяет разрабатывать на
языке Паскаль простые и эффективные алгоритмы. В 1979 году принят стандарт
Паскаля. Основной целью разработки Паскаля было дать язык, пригодный для
обучения программированию как систематической дисциплине. Достоинства Паскаля:
ü он ориентирован на структурное
программирование, имеет развитые средства контроля и достаточно прост в
изучении;
ü язык имеет хороший состав типов и
структур данных;
ü трансляторы есть во всех
распространенных ПК;
ü конкретные реализации языка дают
возможность использовать все аппаратные средства ПК;
ü на основе языка Паскаль разработан Delphi
- одна из современных систем визуального программирования.
Недостатки языка Паскаль: в нем нет операции
возведения в степень.
Интегрированная среда TURBO
PASKAL
Система программирования TURBO
PASKAL представляет собой
интегрированную среду, включающую в себя экранный редактор, компилятор,
редактор связей, отладчик.
Интегрированность среды проявляется не только в
единой идеологии построения компонент, но и в связи их друг с другом: при
возникновении ошибки TURBO
автоматически переходит в режим экранного редактирования и позиционирует курсор
в точку возникновения ошибки. Аналогичные действия выполняются и отладчиком при
возникновении ошибки во время выполнения программы.
Структура языка Паскаль
Структура различных языков программирования
однотипна. Они должны иметь средства для:
ü определения свойств объектов
программы (ее данных);
ü определения обработки, т. е.
получения новых значений объектов;
ü организации процесса обработки
данных (разветвлений процесса обработки данных и циклической обработки);
ü ввода-вывода данных, т. е. обмена
данными между ОП и внешними устройствами (магнитными дисками, портами,
принтером);
ü формирования и использования модулей
(программ, процедур и функций) и библиотек модулей (системных и
пользовательских, разработанных программистом).
Схематичная структура языка Паскаль
Рис. 2.1 Структура языка Паскаль
Классификация операторов
Программа на языке Паскаль состоит из
операторов. Операторы - это единицы действия языка. Синонимы операторов:
предложения, утверждения, инструкции, Statement.
Операторы могут быть выполняемые и невыполняемые Выполняемые производят
вычисления или управляют процессом вычислений. Невыполняемые содержат сведения
о структуре и организации данных, их свойствах и размещении данных в памяти.
Почти все операторы начинаются ключевым словом.
Все операторы языка Паскаль можно разбить на ряд
групп. Классификация операторов и типов выражений на языке Паскаль дана на рис
2.2.
Встроенные процедуры и функции языка Паскаль
В языке Паскаль можно использовать как подпрограммы
(процедуры и функции), разработанные программистом, так и встроенные
(стандартные) подпрограммы, расположенные в его модулях (библиотеках). Паскаль
содержит 8 стандартных модулей, в том числе: System,
Crt, DOS,
Graph, Overlay.
Для использования их процедур и функций надо после оператора PROGRAM
записать оператор
Uses
список-имен-используемых-модулей.
Подключение модуля System
производится по умолчанию, без указания его имени в списке Uses.
В модуле System
располагаются наиболее часто используемые процедуры и функции языка. Основная
группа процедур и функций модуля System:
ü процедуры управления выполнения
программы;
ü функции преобразования типов;
ü процедуры и функции для переменных
ординального типа;
ü математические функции;
ü процедуры и функции для работы со
строками;
ü процедуры и функции управления
динамической памятью;
ü процедуры ввода-вывода и работы с
файлами и каталогами.
Процедуры и функции модуля Crt
предназначены для работы с экраном: его очистки, управления движением курсора
на экране, управление клавиатурой, определения цветов фонов и символов,
управления звуком и окнами экрана.
Процедуры и функции DOS
предназначены для обслуживания прерываний, проверки состояния диска, обработки
файлов, управления процессами и операционной средой.
Рис. 2.2
Структура программы на языке Паскаль
Программа на языке Паскаль состоит из заголовка
программы и блока (тела программы). Заголовок программы или подпрограммы - это
один из операторов:
PROGRAM
- для программы;
PROCEDURE
- для процедуры;
FUNKTION
- для функции.
Процедуры и функции могут иметь ряд уровней
вложенности, т.е. могут быть вложены в другие процедуры или функции.
Блок программы и подпрограммы на языке Паскаль
состоит из двух частей:
1. декларативной - описание (объявления)
данных программы и текстов подпрограмм (разделы описаний);
2. выполнимой - описания действий, которые
надо выполнить над данными (раздел операторов).
Блок включает все, кроме заголовка программы или
подпрограммы. В общем случае блок может состоять из шести разделов различных
типов. Все они, кроме раздела операторов, необязательны. Каждый раздел описаний
начинается ключевым словам:
LABEL - для
определения меток;
CONST - для
определения констант;
TYPE - для
определения типов данных;
VAR - для
определения переменных;
PROCEDURE
и FUNKTION - для определения
процедур и функций;
BEGIN -
определяет начало раздела операторов программы.
Оператор PROGRAM
должен быть первым в программе, раздел операторов программы - вторым. А между
ними может быть сколько угодно разделов описаний в любом порядке. Типы и
константы могут использоваться в последующих описаниях типов и переменных и
программ.
Последовательность разделов описания объектов (LABEL,
CONST, TYPE,
VAR и др.) программы
может быть произвольной. В случае необходимости типы разделов могут
повторяться. Умолчаний в Паскале нет. Все, что используется в программе:
константы, переменные, метки, - должно быть объявлено явно. Каждый объект
программы должен быть описан и только один раз для данной области действия,
объекты программы имеют областью их действия блок, в котором они объявлены, и
все вложенные в него блоки, процедуры и функции, в которых они не
переобъявлены. Поэтому одни и те же идентификаторы можно использовать в
различных подпрограммах (процедурах и функциях) программы в разных смыслах.
паскаль алгоритм уравнение итерация
3.
Математическая модель
Метод Гаусса
Этот метод представляет собой конечный алгоритм
для вычисления корней системы.
За основу метода принята идея последовательного
исключения неизвестных и приведение СЛАУ к "треугольному" виду.
Алгоритм решения СЛАУ:
А11Х1+А12Х2+А13Х3=В1; (1)
А21Х1+А22Х2+А23Х3=В2 (2)
А31Х1+А32Х2+А33Х3=В3 (3)
1. если А11≠0 (т.е. система не
является вырожденной) делим первое уравнение на А11
2. исключим из уравнения (2) Х1, для этого
умножим уравнение (1) на коэффициент А21 и вычтем из уравнения 2 А21Х1
. исключим из уравнения (3) Х1, для этого
умножим уравнение (1) на коэффициент А31 и вычтем из уравнения (1) уравнение
(3), т.е. исключаем из уравнения (3) А31Х1, исходное СЛАУ примет вид
А11Х1+А12*Х2+А13*Х3=В1* (1)
А22*Х2+А23*Х3=В2* (2)
А32*Х2+А33*Х3=В3* (3)
4. разделим уравнение (2) на коэффициент
А22*
5. исключим из уравнения (3) Х2, для этого
умножим уравнение (2) на коэффициент А32* и вычтем из уравнения (2) уравнение
(3), т.е. исключаем из уравнения (3) А32*Х2 , исходное СЛАУ примет вид
А11Х1+А12**Х2+А13**Х3=В1** (1)
А22**Х2+А23**Х3=В2** (2)
А33**Х3=В3** (3)
т.о. исходное СЛАУ приводится к эквивалентной
системе с треугольной матрицей. Процедура нахождения неизвестной из полученной
треугольной СЛАУ осуществляется обратным ходом.
Метод итерации
Метод итерации - итерационный метод, позволяющий
получать корни системы с заданной точностью, путем сходящихся бесконечных
процессов.
Алгоритм решения СЛАУ
А11Х1+А12Х2+А13Х3=В1 (1)
А21Х1+А22Х2+А23Х3=В2 (2)
А31Х1+А32Х2+А33Х3=В3 (3)
Пусть
│ А11 А12 А13 │ │В1│ │Х1│
А=│ А21 А22 А23 │ В=│В2│
Х=│Х2│
│ А31 А32 А33 │ │В3│ │Х3│
тогда АХ=В
Предполагая, что Аii≠0 i€[1,3], разрешим
уравнение (1) относительно Х1, уравнение (2) относительно Х2, уравнение (3)
относительно Х3.
Х1=β1+ά12Х2+
ά13Х3 (1)
Х2=β2+ά21Х2+
ά23Х3
(1)
Х3=β3+ά31Х2+
ά32Х3 (1)
где βi=βi/άii;
άij=-άij/άii
│ ά11
ά12
ά13
│ │β1│
│Х1│
ά=│ ά21
ά22
ά23
│ β=│β2│
Х=│Х2│
│ά31 ά32
ά33│
│β3│
│Х3│
исходная СЛАУ примет вид
Х=β+ΆХ.
Далее решаем методом последовательных
приближений. За начальное приближение принимаем столбец свободных членов:
Х1°=β1;
Х2°=β2;
Х3°=β3
Алгоритм нахождения корней системы следующий:
Х1¹=β1+άХ1°;
Х2¹=β2+άХ2°;
Х3¹=β3+άХ3°.
Вычисления заканчиваются тогда, когда разность
между двумя ближайшими итерациями значения корня будет меньше ξ
т.е.
│Х1ⁿ-Х1ⁿ־¹│<=ξ;
│Х2ⁿ-Х2ⁿ־¹│<=ξ;
Метод Зейделя
Этот метод представляет собой некоторую
модификацию метода итерации. Основная идея заключается в том, что при
вычислении n-ого приближения
неизвестной Хi учитываются уже вычисленные (n-1)-ые
значения переменных Х1, Х2, Х3.
Пусть дана СЛАУ
А11Х1+А12Х2+А13Х3=В1 (1)
А21Х1+А22Х2+А23Х3=В2 (2)
А31Х1+А32Х2+А33Х3=В3 (3)
Разрешим каждое из уравнений относительно Х1,
Х2, Х3.
Приведенная система имеет вид: Хi = βi
+∑ άij Хi;
Выберем произвольное начальное приближение Х1°,
Х2°, Х3°.
Далее предполагая, что (n-1)-ое
приближение корней Хiⁿ־¹ корней известно, будем строить n-ое
приближение корней по методу Зейделя по следующим формулам:
Х1ⁿ=β1+∑ά1jХjⁿ־¹;
Х2ⁿ=β2+∑ά2jХjⁿ־¹+ά2jX1ⁿ;
Х3ⁿ=β3+∑ά3jХjⁿ־¹+ά3jX1ⁿ.
Обычно метод Зейделя дает лучшую сходимость, чем
метод итерации, но приводит к более громоздким вычислениям. Процесс вычисления
заканчивается тогда, когда выполняется условие │Хiⁿ-Хiⁿ־¹│<=ξ,
т.е. разность приближений корня в соседних итерациях меньше или равна заданной
точности
4. Блок-схемы
Основная программа
Метод Гауса
Метод итераций
Метод Зейделя
6.
Текст программы
PROGRAM kyrsach;crt;, fi, x: array
[1..3] of real;: array [1..3,1..4] of real;, j: integer;, K2, K3, A1, A2, A3:
real;: byte;: char;dlina = string [22];
********формирование рамки********frame
(x1, y1, x2, y2: byte);= #186; b = #187; c = #188;= #200; e = #201; f =
#205;(x1, y1);(e);i:= (x1+1) to (x2-1) do write (f);(b);i:= (y1+1) to (y2-1) do
begin(x1, i);(a);(x2, i);(a);;(x1, y2);(d);i:= (x1+1) to (x2-1) do write
(f);(c);;
********выбор цвета********cf (c, f:
byte);(c);(f);;
********процедура
задержки********payza (n: byte);i:= 1 to n do (10000);
end;
********формирование
титульного листа********
Procedure zastavka;ch: char;;(1, 1,
80, 25);(14, 0);;(3, 3, 78, 24);(5);(36, 4); write ('БНТУ');(5);(35,
6); write ('МНО РБ'); (5);
gotoxy (25, 9); write (‘Курсовой
проект по информатике');
payza (5);
gotoxy (45, 14); write
('Исполнила: Стражникова Е. В.');
gotoxy (45, 15); write ('Проверил:
Тарасевич Л. А.');
payza (5);(35, 22); write ('Минск
2003');;;;
********звуковай
сигнал********beep;(800);(1);;;
********формирование
меню********menu(q1, q2, q3: byte; , ss2, ss3, ss4, ss5, ss6, ss7, ss8:
dlina;result: byte);met, men;kr = 8;m: array [1..kr] of string [48];, t: byte;:
array [1..kr] of byte;: boolean;:= true;[1]:= ss1; m[2]:= ss2; m[3]:= ss3;
m[4]:= ss4;[5]:= ss5; m[6]:= ss6; m[7]:= ss7; m[8]:= ss8;:= length (m[1]);i:= 2
to q3 dolength (m[i])>t then t:= length (m[i]);(q1-1, q2, q1+t+5,
q2+q3+1);i:= 1 to q3 do begini = 1 then cf (0,10)cf (10,0);(q1, q2+1);(m[i]);;(14,
3);(15+128, 1);('С помощью ',chr(25), ' или
',chr(24),
укажите
режим и нажмите', "Enter"');
cf (7, 0);: i:= 1;f1 = true do
begin:= readkey;ch = #13 then f1:= false;(ch = #0) and keypressed then begin:=
readkey;ch of
#80: begin;(q1, q2+i);(10, 0);(m[i]);:=
i+1;I = (q3+1) then begin:= 1;(10, 0);(q1, q2+1);(0, 10);(m[i]);(10,
0);met;;(q1, q2+i);(0, 10);(m[i]);(10, 0);;
#72: begini = 1 then goto met;(q1,
q2+i);;(10, 0);(m[i]);:= i-1;(q1, q2+i);(0, 10);(m[i]);;;:;;:= i;(10, 0);
End;
********формирование
надписей********
Procedure menu1;
Begin:= readkey;ch = #13 then begin;
menu (27, 9, 8, ' М е н ю . ',
'
',
'
Метод Гаусса. ',
'
Метод итераций. ',
'
Метод Зейделя. ',
'
',
' Выход ',
' ', regime);;;
********ввод исходных
данных********text;;
writeln ('Введите
исходные данные');
for i:= 1 to 3 do begin('S',i,'=');
readln (S[i]);('FI',i,'='); readln (FI[i]); end;;
cf (9, 0);
writeln (' И С Х О
Д Н Ы Е Д А Н Н Ы Е ‘);
cf (10,
0);;('------------------');(' i | Si | FIi ');('------------------');i:= 1 to 3
do('| ',i,' | ',s[i]:0:1,' | ',fi[i]:0:1,'
|');('------------------');;(10);('K1*Si*cos(FIi)+K2*sin(FIi)-K3=Si^2');;(9,
0);('Система уравнений');;(10, 0);i:= 1 to 3
do('K1*',S[i]:0:1,'*cos(',FI[i]:0:1,')*K2*sin(',FI[i]:0:1,')-K3=',S[i]:0:1,'^2');;(10);i:=
1 to 3 do[i]:= pi/180*FI[i];i:= 1 to 3 do begin[i,1]:= S[i]*cos(FI[i]);[i,2]:=
sin(FI[i]);[i,3]:= -1; a[i,4]:= sqr(S[i]); ;;
********метод Гауса********gays;n,
k, m: real;:= a[1, 1]; k:= a[2, 1]; m:= a[3, 1]; a[1, 1] = 0 then writeln ('Система
является вырожденной');
for j:= 1 to 4 do begin[1, j]:= a[1,
j]/n;[2, j]:= a[1, j]*k - a[2, j];[3, j]:= a[1, j]*m - a[3, j]; end;:= a[2, 2];
k:= a[3, 2];j:= 1 to 4 do begin[2, j]:= a[2, j]/n;[3, j]:= a[2, j]*k - a[3,
j];;:= a[3, 4]/a[3, 3];:= a[2, 4]-a[2, 3]*K3;:= a[1, 4]-a[1, 3]*K3 - a[1,
2]*K2;;
(9, 0);
writeln (‘Решение
системы');
writeln;
cf (13,
0);('K1=',K1:0:5);('K2=',K2:0:5);('K3=',K3:0:5);(10);;;
********метод Зейделя********zeydel;z;e,
k11, k22, k33: real;
writeln ('Введите
требуемую точность вычислений');
write ('e=');(e);:= a[1, 4]/a[1, 1];
K22:= 0; K33:= 0;:= 0; K2:= 0; K3:= 0;: K1:= (a[1, 4]-a[1, 2]*K22 - a[1,
3]*K33)/a[1, 1];:= (a[2, 4]-a[2, 1]*K1 - a[2, 3]*K33)/a[2, 2];:= (a[3, 4]-a[3,
1]*K1 - a[3, 2]*K2)/a[3, 3];(abs(K1 - K11) >= e) and (abs(K2 - K22) >= e)
and (abs(K3 - K33) >= e)begin:= K1; K22:= K2; K33:= K3;z;begin(9, 0); ('Решение
системы.');
writeln;
cf (13,
0);('K1=',k1:0:5);('K2=',k2:0:5);('K3=',k3:0:5);;;
writeln ('Введите
требуемую точность вычислений');
write ('e=');(e);:= a[1, 4]/a[1, 1];
K22:= a[2,4]/a[2, 2]; K33:= a[3,4]/a[3, 3];:= 0; K2:= 0; K3:= 0;: K1:= (a[1,
4]-a[1, 2]*K22 - a[1, 3]*K33)/a[1, 1];:= (a[2, 4] - a[2, 1]*K11 - a[2,
3]*K33)/a[2 ,2];:= (a[3, 4] - a[3, 1]*K11 - a[3, 2]*K22)/a[3, 3];(abs(K1 - K11)
>= e) and (abs(K2 - K22) >= e) and (abs(K3 - K33) >= e)begin:= K1;
K22:= K2; K33:= K3;z;begin(9, 0); (‘Решение системы');
writeln;
cf (13, 0);
writeln
('K1=',k1:0:5);('K2=',k2:0:5);('K3=',k3:0:5);;;
********проверка
решения системы********
Procedure prov;
Begin(9, 0);('Проверка.
');;(10, 0);i:= 1 to 3 do begin[i, 1]:= S[i]*cos(FI[i]);[i, 2]:= sin(FI[i]);[i,
3]:= -1; a[i, 4]:= sqr(S[i]);;('K1*Si*cos(FIi)+K2*sin(FIi)-K3=Si^2');;i:= 1 to
3 do begin(K1:0:1,'*',S[i]:0:1,'*cos(',FI[i]:0:1,')+',K2:0:1,'*sin(',FI[i]:0:1,')',-K3:0:1,'=');[i]:=
a[i,1]*K1+a[i,2]*K2-K3;(x[i]:0:2,'=(S',i,')^2');end;(x[1] = 1.00) and (x[2] =
1.44) and (x[3] = 4.00) writeln ('Система
решена верно.');
writeln;;
********нахождение
значений********yrav;:= K1/2; A3:= K2/(2*A1);:= sqrt(sqr(A1) +
sqr(A3)-K3);(10);(9, 0);('Коффициенты');(13,
0);;('A1=',A1:0:5);('A2=',A2:0:5);('A3=',A3:0:5); (10, 0);
menu1;
readkey;
End;
********формирование
пустого окна********
Procedure pusto;
Begin
gotoxy (10, 14);
write ('О Ш И Б К А П Р И В Ы Б О
Р Е О П Е Р А Т О Р А');
sound (330); delay (32000);
nosound;(330); delay (32000); nosound;(330); delay (32000); nosound;(262);
delay (55000);(294); delay (32000); nosound;(294); delay (32000);
nosound;(294); delay (32000); nosound;(247); delay (55000); nosound;1;
End;
********тело
основной программы********
BEGIN;;;;;regime of
, 2, 6, 8: pusto;
: begin;;;;;
: begin;;;;;
: begin;;;;;
: begin clrscr; halt; end;;;
END.
7.
Результаты счета
Где
i
|
Si
|
φi
|
1
|
1.0
|
20°
|
2
|
1.2
|
45°
|
3
|
2.0
|
60°
|
8.
Список используемой литературы.
Ю.С.
Бородич, А.Н. Васильев
А.И.
Кузьмич “Паскаль для персональных компьютеров”. Минск - 1991 вышэйшая школа
С.В.
Мизрохи “TURBO
PASKAL и
объектно-ориентировочное программирование” Москва - 1992 “финансы и
статистика”.
Я.
Янсон (перевод с немецкого Н.С.Сойфер) “Турбо-Паскаль в сжатом изложении”.
Москва - 1991 “мир”.