
Курсовая работа (Delphi) - КИ МГОУ / отчет1
.docМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
АГЕНСТВО ПО ОБРАЗОВАНИЮ
Московский государственный открытый университет
Коломенский институт (филиал)
__________________________________________________________________
Кафедра автоматики и электроники в машиностроении
Курсовая работа
По дисциплине:
«Программирование и основы алгоритмизации»
Выполнил: студент группы И-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