Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
25
Добавлен:
20.06.2014
Размер:
1.23 Mб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

АГЕНСТВО ПО ОБРАЗОВАНИЮ

Московский государственный открытый университет

Коломенский институт (филиал)

__________________________________________________________________

Кафедра автоматики и электроники в машиностроении

Курсовая работа

По дисциплине:

«Программирование и основы алгоритмизации»

Выполнил: студент группы И-22

Русакова Полина

Проверил преподаватель:

Филоненко Ирина Николаевна

Дата защиты_____________

Оценка__________________

г. Коломна, 2010 г.

Задание:

Методом Эйлера с точностью 1Е-01 вычислить значение функции y в точках x=2, 3,4,5, если задано дифференциальное уравнение y’=2e(-x)cos(2x)-y с начальным условием у(1)=а, где а есть наименьшее значение корня системы уравнений:

7x1+3x2+2x3+5x4=19

2x1+5x2+x3-2x4=13

-2x1+4x2-6x3+8x4=-32

-3x1-2x2-5x3+10x4=-38

Решение:

Решение осуществляется в два этапа: первый заключается в решение системы уравнений методом Гаусса и нахождении наименьшего значение корня данной системы уравнений, второй – в вычислении значения функции методом Эйлера с пересчетом, где начальное условие есть найденное наименьшее значение корня.

Общая структурная блок-схема программы

Управляющая программа

unit Unit2;

{решение системы уравнений методом Гаусса}

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, StdCtrls,ShellApi, ExtCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

Bevel1: TBevel;

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit2, Unit3;

{$R *.dfm}

{вызов программы, реализующей решение системы уравнений}

procedure TForm1.N3Click(Sender: TObject);

begin

Form2.show;

end;

{вызов программы, реализующей решение дифференциального уравнения}

procedure TForm1.N4Click(Sender: TObject);

begin

Form3.show;

end;

{вызов справки}

procedure TForm1.N2Click(Sender: TObject);

begin

ShellExecute(Handle, nil, 'справка.html', nil, nil, SW_RESTORE);

end;

end

Программа, реализующая решение системы уравнений методом Гаусса

прямой ход

поиск ведущего

ненулевого элемента

поиск закончен

обратный ход

unit Unit2;

{решение системы уравнений методом Гаусса}

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids, Menus, ExtCtrls;

type

TForm2 = class(TForm)

StringGrid1: TStringGrid;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

MainMenu1: TMainMenu;

vty1: TMenuItem;

N1: TMenuItem;

N2: TMenuItem;

Label11: TLabel;

cghfdrf1: TMenuItem;

Bevel1: TBevel;

Bevel2: TBevel;

Label12: TLabel;

Bevel3: TBevel;

Bevel4: TBevel;

Bevel5: TBevel;

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

{$R *.dfm}

{задание цвета для столбца StringGrid1}

procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

const

clPaleGreen = TColor($CCFFCC);

begin

StringGrid1.canvas.brush.Color := clPaleGreen;

if (ACol = 4) then

begin

StringGrid1.Canvas.FillRect(Rect);

StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);

end;

end;

{ввод данных для решения тестового примера}

procedure TForm2.N1Click(Sender: TObject);

begin

stringgrid1.cells[0,0]:=floattostr(7);

stringgrid1.cells[0,1]:=floattostr(2);

stringgrid1.cells[0,2]:=floattostr(-2);

stringgrid1.cells[0,3]:=floattostr(-3);

stringgrid1.cells[1,0]:=floattostr(3);

stringgrid1.cells[1,1]:=floattostr(5);

stringgrid1.cells[1,2]:=floattostr(4);

stringgrid1.cells[1,3]:=floattostr(-2);

stringgrid1.cells[2,0]:=floattostr(2);

stringgrid1.cells[2,1]:=floattostr(1);

stringgrid1.cells[2,2]:=floattostr(-6);

stringgrid1.cells[2,3]:=floattostr(-5);

stringgrid1.cells[3,0]:=floattostr(5);

stringgrid1.cells[3,1]:=floattostr(-2);

stringgrid1.cells[3,2]:=floattostr(8);

stringgrid1.cells[3,3]:=floattostr(10);

stringgrid1.cells[4,0]:=floattostr(19);

stringgrid1.cells[4,1]:=floattostr(13);

stringgrid1.cells[4,2]:=floattostr(-32);

stringgrid1.cells[4,3]:=floattostr(-38);

end;

{реализация метода Гаусса}

procedure TForm2.N2Click(Sender: TObject);

var i,j,n,l,k,m:integer;

a:array [1..100,1..100] of real;

x:array [1..100] of real;

c,s,w,min:real;

{ввод данных}

begin

with StringGrid1 do

n:=rowcount;

for i:=1 to n do

for j:=1 to n +1 do

a[i,j]:= strtofloat(stringgrid1.cells[j-1,i-1]);

{прямой ход}

for i:=1 to n-1 do

begin {поиск ненулевого элемента}

if a[i,i]=0 then

begin

for m:= i+1 to n do

if a[m,i]<>0 then

break;

if a[m,i]=0 then showmessage('система не имеет решения');

for j:=i to n+1 do

begin

w:=a[i,j];

a[i,j]:=a[m,j];

a[m,j]:=w;

end;

end;

{поиск закончен}

c:=a[i,i];

a[i,i]:=1;

for l:=i+1 to n+1 do

begin

a[i,l]:=a[i,l]/c;

for k:=i+1 to n do

a[k,l]:=a[k,l]-a[i,l]*a[k,i];

end;

end;

if a[n,n]=0 then showmessage('система не имеет решения')

{обратный ход}

else

begin

x[n]:=a[n,n+1]/a[n,n];

k:=n-1;

repeat

s:=0;

for j:=k+1 to n do

s:=s+a[k,j]*x[j];

x[k]:=a[k,n+1]-s;

k:=k-1; until k=0;

{вывод корней системы}

label3.Caption:= floattostrf(x[1],fffixed,7,5);

label4.Caption:= floattostrf(x[2],fffixed,7,5);

label5.Caption:= floattostrf(x[3],fffixed,7,5);

label6.Caption:= floattostrf(x[4],fffixed,7,5);

end;

{поиск наименьшего значения корня}

min:=x[1];

for i:=1 to n do

if x[i]<min then min:=x[i];

label12.Caption:=floattostrf(min,fffixed,7,5);

end;

end.

Программа, реализующая решение дифференциального уравнения методом Эйлера с пересчетом

да

нет

да

нет

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Menus, ExtCtrls;

type

TForm3 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Label3: TLabel;

Edit2: TEdit;

Label4: TLabel;

Edit3: TEdit;

Label5: TLabel;

Edit4: TEdit;

Label6: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

Bevel1: TBevel;

Bevel2: TBevel;

Bevel3: TBevel;

Bevel4: TBevel;

Bevel5: TBevel;

Bevel6: TBevel;

Label7: TLabel;

Bevel7: TBevel;

Edit5: TEdit;

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

uses Unit4, Unit2;

{$R *.dfm}

function f(x1,y1:real):real;

begin

f:=2*exp(-x1)*cos(2*x1)-y1;

end;

procedure TForm3.N2Click(Sender: TObject);

var x,y,h,xk,e,y1,y2:real;

begin

x:=strtofloat(edit1.Text);

y:=strtofloat(edit2.Text);

e:=strtofloat(edit5.Text);

form4.memo1.lines.add(floattostr(x));

form4.memo2.lines.add(floattostr(y));

xk:=strtofloat(edit3.Text);

h:=strtofloat(edit4.Text);

form4.show;

repeat

y1:=y+h*f(x,y);

y2:=y+h/2*(f(x,y)+f(x+h,y1));

if abs(y2-y1)<=e then

begin

x:=x+h;

y:=y2;

form4.memo1.lines.add(floattostr(x));

form4.memo2.lines.add(floattostr(y));

end

else

begin

h:=h/2;

continue

end;

until x>=xk;

end;

procedure TForm3.N3Click(Sender: TObject);

begin

edit1.Text:=floattostr(1);

edit2.Text:=form2.label12.caption;

edit3.Text:=floattostr(5);

edit4.text:=floattostr(1);

edit5.text:=floattostr(1E-01);

end;

end.

Организация справки в проекте

Вызов справки организован с помощью функции ShellExecute.

procedure TForm1.N2Click(Sender: TObject);

begin

ShellExecute(Handle, nil, 'справка.html', nil, nil, SW_RESTORE);

end;

Для ее использования необходимо сначала прописать в разделе подключаемых модулей модуль ShellAPI

Соседние файлы в папке Курсовая работа (Delphi) - КИ МГОУ