Алгоритмы для вычисления корней системы на языке Паскаль

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    12,40 kb
  • Опубликовано:
    2011-05-07
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Алгоритмы для вычисления корней системы на языке Паскаль

Министерство образования Республики Беларусь

Белорусский национальный технический университет

Кафедра « Тепловые электрические станции»







КУРСОВАЯ РАБОТА

ПО ИНФОРМАТИКЕ

Исполнитель: Стражникова Е. В.

Гр. 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 “мир”.


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!