Автор работы: Пользователь скрыл имя, 26 Сентября 2013 в 15:33, курсовая работа
Пять лет назад известная компания Borland выпустила первую версию своего средства визуального программирования Delphi. К разочарованию приверженцев фигурных скобок (в связи со спецификой языка именно так называют программистов, использующих С или С++) программы в Delphi надо было писать на языке Pascal, имеющем дурную репутацию "студенческого". Однако большинство серьёзных разработчиков вскоре поняло, что Pascal уже не "игрушка для детей", каким его можно было считать раньше, а новое профессиональное средство для быстрой разработки высококачественных программных продуктов.
.Введение………………………………………………………………..3
2.Постановка задачи и сфера её использования…………………..…11
3.Теоретическая часть………………………………………………….12
3.1 Определители………………………………………………...12
3.2 Метод Крамера……………………………………………….16
4.Программная реализация…………………………………………….19
4.1 Представление алгоритма программы……………………...19
4.2 Описание компонентов программы………………………...20
5.Инструкция пользователя…………………………………………….33
6.Вывод…………………………………………………………………..34
7.Список литературы…………………………………………………...
Кнопка Копировать используется для копирования текста отчёта ,для этого нужна выделить текст и нажать на кнопку Копировать. Выполняется процедура: procedure TfmReport.BitBtn4Click(Sender: TObject).
Кнопка Закрыть используется для закрытия формы fmReport. Реализуется процедура: procedure TfmReport.BitBtn1Click(Sender: TObject).
3. При выборе пункта меню Настройки Параметры вызывается форма fmSetting.
На ней находятся объекты типа: TbitBtn(2), TgroupBox(3), Tlabel(4), TcheckBox(3) , Tedit(2), TspinEdit(1).
Для обработки выводимого результата используется 2 компонента типа: TcheckBox и TspinEdit.
Для задания начальных параметров заполнения таблицы коэффициентов при неизвестных используются компоненты типа: Tedit(2), TcheckBox.
Для настройки сохранения результатов отчёта при наполнении таблицы другими элементами предназначен компонент типа TcheckBox.
Кнопка Применить предназначена для сохранения всех выбранных
настроек, реализуется с помощью процедуры: procedure TfmSetting.BitBtn1Click(
Кнопка Отменить предназначена для отмены выбранных
настроек и возвращения старых , выполняется
процедура: procedure TfmSetting.BitBtn2Click(
4.Форма fAbout появляется при нажатии на пункт меню О программе,
реализуется процедура : procedure TfmMain.N8Click(Sender: TObject).
На ней расположен компонент типа Тimage, который используется для вывода рисунка на форму.
5 ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ
Программа, которая была разработана в ходе выполнения курсовой работы, позволяет с помощью метода Крамера и с помощью расширенной матрицы решить систему линейных уравнений.
Минимальные системные требования для работы программы:
- OS MS-DOS или Windows
- 1,51 МБ на жестком диске
Прилагаемый к курсовой работе диск содержит следующие файлы:
- Kramer.exe (разработанная программа)
- Delphi proekt(текст программы)
- Курсовой.doc (пояснительная записка)
Для запуска программы Kramer необходимо запустить находящуюся на дискете программу Kramer.exe.
6 ВЫВОД
В ходе выполнения курсовой работы была разработана программа, с помощью которой можно решить систему линейных уравнений по методу Крамера и с помощью расширенной матрицы.
Ниже приведен результат работы программы.
Настройка параметров:
Заполнение таблицы:
Решение:
Вывод Отчёта:
7 СПИСОК ЛИТЕРАТУРЫ
1.А.Я. Архангельский Программирование в Delphi 7
2. Культин Н. Б. Основы программирования в Delphi 7
3. http://www.allbest.ru
4. Библия Delphi (Михаил Фленов)
5. Алексей Савкин. Delphi: программирование для всех!
6. physics.herzen.spb.ru
8 ПРИЛОЖЕНИЕ
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Spin, Menus, ExtCtrls, Buttons, IniFiles, XPMan;
type
TfmMain = class(TForm)
mm: TMainMenu;
Panel1: TPanel;
GroupBox1: TGroupBox;
sg1: TStringGrid;
GroupBox2: TGroupBox;
lb: TListBox;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
OD: TOpenDialog;
SD: TSaveDialog;
Panel2: TPanel;
sed: TSpinEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
N6: TMenuItem;
N7: TMenuItem;
btGo: TButton;
Button1: TButton;
btClear: TBitBtn;
btReport: TBitBtn;
N8: TMenuItem;
procedure btGoClick(Sender: TObject);
procedure sedChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure sedKeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure sg1KeyPress(Sender: TObject; var Key: Char);
procedure btClearClick(Sender: TObject);
procedure btReportClick(Sender: TObject);
procedure N8Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
rndmax : integer;
rndmin : integer;
okr:boolean;
nzn:integer;
zapnul : boolean;
clrep : boolean;
ini : TIniFile;
procedure Zap();
function
AllZap(StrGrid:TStringGrid):
procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
end;
var
fmMain: TfmMain;
MaxDimension : integer;
implementation
uses sett, report, Unit1;
{$R *.dfm}
procedure TfmMain.btGoClick(Sender: TObject); //при нажатии на кнопку Решыть
type
Vector = array[1..21] of Double;
Matrix = array[1..21] of Vector;
var
a: Matrix;
b,x: Vector;
h: Double;
i,j,k,n:integer;
begin
if not AllZap(sg1) then
begin
Application.MessageBox('
exit;
end;
//Размерность системы
n := StrToIntDef(Text, sg1.ColCount);
//Коэффициенты
for j := 1 to n - 2 do
for i := 1 to n - 2 do
a[i, j] := StrToFloatDef(sg1.Cells[j, i], 0);
//Правая часть уравнения
for I := 1 to n - 2 do
b[i] :=
StrToFloatDef(sg1.Cells[sg1.
//Прямой ход - исключение переменных
for i:=1 to n-2 do
for j:=i+1 to n-1 do
begin
IF a[i,i] = 0 then
begin
Application.MessageBox('
lb.Clear;
lb.Items.Add('Система
exit;
end;
a[j,i]:=-a[j,i]/a[i,i];
for k:=i+1 to n-1 do
a[j,k]:=a[j,k]+a[j,i]*a[i,k];
b[j]:=b[j]+a[j,i]*b[i]
end;
x[n-2]:=b[n-2]/a[n-2,n-2];
//Обратный ход - нахождение корней
for i:=n-2 downto 1 do
begin
h:=b[i];
for j:=i+1 to n-1 do h:=h-x[j]*a[i,j];
x[i]:=h/a[i,i]
end;
//Вывод результата
lb.Clear;
for i:=1 to n-2 do
if okr then
lb.Items.Append('x(' + IntToStr(i) + ') = ' + IntToStr(Round(x[i]))) else
lb.Items.Append('x(' + IntToStr(i) + ') = ' + format('%10.'+IntToStr(nzn)+'
btReport.Enabled:=true;
end;
procedure TfmMain.sedChange(Sender: TObject); //количество уравнений
begin
if sed.Value < 2 then sed.Value:=2;
if sed.Value >10 then sed.Value:=20;
sg1.ColCount:=sed.Value+2;
sg1.RowCount:=sed.Value+1;
Zap();
end;
procedure TfmMain.FormCreate(Sender: TObject);
begin
sed.Value:=2;
sg1.ColCount:=sed.Value+2;
sg1.RowCount:=sed.Value+1;
Zap();
try
ini:=TIniFile.Create(
rndmax:=ini.ReadInteger('
rndmin:=ini.ReadInteger('
okr:=ini.ReadBool('PARAM','
nzn:=ini.ReadInteger('PARAM','
zapnul:=ini.ReadBool('PARAM','
clrep:=ini.ReadBool('PARAM','
except
end;
end;
procedure TfmMain.sedKeyPress(Sender: TObject; var Key: Char);
begin
key:=#0;
end;
procedure TfmMain.Zap;
var
i:integer;
begin
for i:=1 to sg1.RowCount do
begin
sg1.Cells[0,i]:='x'+inttostr(
end;
for i:=1 to sg1.ColCount do
begin
if (i<>sg1.ColCount-1) then
sg1.Cells[i,0]:='a'+IntTostr(
else
sg1.Cells[i,0]:='b';
end;
end;
function TfmMain.AllZap(StrGrid: TStringGrid): boolean;
var
i,j:integer;
begin
for i:=1 to StrGrid.ColCount-1 do
for j:=1 to StrGrid.RowCount - 1 do
begin
if StrGrid.Cells[i,j] = '' then
begin
if not okr then
begin
Result:= false;
exit;
end else
begin
StrGrid.Cells[i,j] := '0';
end;
end;
if pos('-',StrGrid.Cells[i,j])>1 then
begin
StrGrid.Row:=j;
StrGrid.Col:=i;
Result:=false;
exit;
end;
end;
Result:=true;
end;
procedure TfmMain.Button1Click(Sender:
TObject); //Заполнение таьлицы
var
i,j:integer;
begin
lb.Clear;
randomize;
for i:=1 to sg1.ColCount-1 do
for j:=1 to sg1.RowCount-1 do
sg1.Cells[i,j]:=IntToStr(
btReport.Enabled:=false;
end;
procedure TfmMain.N5Click(Sender: TObject); //выход
begin
Close;
end;
procedure TfmMain.Image1Click(Sender: TObject);
begin
close;
end;
procedure TfmMain.SaveStringGrid(
const FileName: TFileName);
var
f: TextFile;
i, k: Integer;
begin
if ExtractFileExt(FileName)='.
AssignFile(f, FileName+'.stm');
Rewrite(f);
with StringGrid do
begin
Writeln(f, ColCount);
Writeln(f, RowCount);
for i := 0 to ColCount - 1 do
for k := 0 to RowCount - 1 do
Writeln(F, Cells[i, k]);
end;
CloseFile(F);
end;
procedure TfmMain.LoadStringGrid(
const FileName: TFileName);
var
f: TextFile;
iTmp, i, k: Integer;
strTemp: String;
begin
AssignFile(f, FileName);
Reset(f);
with StringGrid do
begin
Readln(f, iTmp);
ColCount := iTmp;
Readln(f, iTmp);
RowCount := iTmp;
for i := 0 to ColCount - 1 do
for k := 0 to RowCount - 1 do
begin
Readln(f, strTemp);
Cells[i, k] := strTemp;
end;
end;
CloseFile(f);
end;
procedure TfmMain.N2Click(Sender: TObject); //сохранение системы
begin
if not allZap(sg1) then
begin
Application.MessageBox('
exit;
end;
if sd.Execute then
begin
SaveStringGrid(sg1,sd.
end;
end;
procedure TfmMain.N3Click(Sender: TObject); //Загзика системы с файла
begin
if od.Execute then
begin
LoadStringGrid(sg1,od.
sed.Value:=sg1.RowCount-1;
end;
end;
procedure TfmMain.BitBtn1Click(Sender: TObject); //Выход
begin
Close;
end;
procedure TfmMain.N7Click(Sender: TObject); // вызов формы fmSetting
begin
fmSetting.ShowModal;
end;
procedure TfmMain.sg1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9',#8,'-',#13,#9]) then key:=#0;
end;
procedure TfmMain.btClearClick(Sender: TObject); //Очистка поля
var
i,j:integer;
begin
lb.Clear;
for i:=1 to sg1.colcount-1 do
for j:=1 to sg1.RowCount-1 do
sg1.Cells[i,j]:='';
btReport.Enabled:=false;
end;
procedure TfmMain.btReportClick(Sender: TObject);
var //Выдача отчёта
s:string;
i,j,n:integer;
begin
if not AllZap(sg1) then
begin
Application.MessageBox('
exit;
end;
with fmReport do
begin
if clRep then
begin
mem.Clear;
mem.Lines.Add('Решение
end else
if mem.Lines.Strings[0] <> 'Решение системы
линейных уравнений методом
mem.Lines.Add('Решение системы линейных уравнений методом Крамера');
mem.Lines.Add('');
mem.Lines.Add('Система:');
for j:=1 to sg1.RowCount-1 do
begin
n:=0;
for i:=1 to sg1.ColCount-1 do
begin
inc(n);
if i=sg1.ColCount-1 then
begin
s:=s+' = '+sg1.Cells[i,j];
continue;
end;
if s='' then
begin
if StrToFloat(sg1.Cells[i,j])=0 then continue;
if StrToFloat(sg1.Cells[i,j])=1 then
begin
s:=s+' x'+IntToStr(n)+' ';
end;
if StrToFloat(sg1.Cells[i,j])>0 then s:=s+
sg1.Cells[i,j]+' x'+IntToStr(n)+' ' else
s:=s+sg1.Cells[i,j]+' x'+IntToStr(n)+' ';
end
else
begin
if StrToFloat(sg1.Cells[i,j])=0 then continue;
if StrToFloat(sg1.Cells[i,j])>0 then s:=s+' + '+
sg1.Cells[i,j]+' x'+IntToStr(n)+' ' else
s:=s+' '+sg1.Cells[i,j]+' x'+IntToStr(n)+' ';
end;
end;
mem.Lines.Add(s);
s:='';
end;
mem.Lines.Add('');
mem.Lines.Add('Корни:');
for i:=1 to lb.Items.Count do mem.Lines.Add( lb.Items[i-1]);
mem.Lines.Add('');
mem.Lines.Add('');
end;
fmReport.ShowModal;
end;
procedure TfmMain.N8Click(Sender: TObject); //вызов формы fAbout
begin
fAbout.ShowModal;
end;
end.
unit report;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TfmReport = class(TForm)
mem: TMemo;
BitBtn1: TBitBtn;
pd: TPrintDialog;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmReport: TfmReport;
implementation
{$R *.dfm}
procedure TfmReport.BitBtn1Click(Sender: TObject); //выход
begin
Close;
end;
procedure TfmReport.BitBtn2Click(Sender: TObject); //выдача на печать
begin
pd.Execute;
end;
procedure TfmReport.BitBtn3Click(Sender: TObject); //очистка поля для вывода отчёта
begin
mem.Clear;
end;
procedure TfmReport.BitBtn4Click(Sender: TObject); // копирование текста отчёта
begin
mem.CopyToClipboard;
end;
end.
unit sett;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Buttons;
type
TfmSetting = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
GroupBox1: TGroupBox;
chround: TCheckBox;
sedzn: TSpinEdit;
Label1: TLabel;
GroupBox2: TGroupBox;
edrnd: TEdit;
Label2: TLabel;
Информация о работе Решение системы линейных уравнений методом Крамера