Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
11111.docx
Скачиваний:
4
Добавлен:
02.09.2019
Размер:
474.07 Кб
Скачать

Приложение в

(справочное)

Скриншоты

После старта появится главное окно программы (рисунок 1).

Рисунок 1 – Главное окно программы

Для начала нужно установить количество уравнений и количество неизвестных и нажать кнопку "Установить". Эти величины будут равны (рисунок 2).

Рисунок 2 - Ввод количества уравнений и неизвестных

Затем необходимо заполнить 2 таблицы: таблицу коэффициентов и таблицу свободных членов (рисунок 3).

Рисунок 3 – Заполнение массива

Для того, чтобы очистить таблицы, можно воспользоваться кнопкой "Очистить" (рисунок 4).

Рисунок 4 – Применение кнопки «Очистить»

Чтобы выполнить быстрое заполнение таблиц, можно воспользоваться кнопкой "Из файла".

Она позволяет загрузить коэффициенты уравнений из *.txt файла с определенной структурой.

После нажатия кнопки появится окно выбора файла (рисунок 5).

Рисунок 5 – Окно выбора файла

После заполнения таблиц коэффициентами нужно выбрать метод решения: метод Гаусса, метод Краммера либо сравнение методов.

Затем нажать кнопку "Решить уравнение". (рисунок 6, рисунок 7, рисунок 8)

Рисунок 6 – Решение систем линейных алгебраических уравнений

Рисунок 7 – Решение систем линейных алгебраических уравнений

Рисунок 8 - Решение систем линейных алгебраических уравнений

Для получения справки нужно воспользоваться пунктом главного меню Справка > Справка.

Для просмотра информации о программе нужно воспользоваться пунктом главного меню Справка > О программе (рисунок 9).

Рисунок 9 – Вызов справки

Для выхода из программы нужно воспользоваться пунктом главного меню Файл > Выход (рисунок 10).

Рисунок 10 – Выход из программы

Приложение в

(справочное)

Исходный код

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, Grids, Menus;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

RadioGroup1: TRadioGroup;

CheckBox1: TCheckBox;

Button1: TButton;

Memo1: TMemo;

GroupBox1: TGroupBox;

Button2: TButton;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

Button3: TButton;

StringGrid2: TStringGrid;

Button4: TButton;

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Button3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

n : integer;//количество уравнений и коэффициентов

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

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

implementation

{$R *.dfm}

procedure gaus;

const Eps=1e-9;

var i, j, m, k, l, j1 : Integer;

v, s : Real;

log : boolean;

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

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

begin

n := StrToInt(Form1.Edit1.Text);

for i := 1 to n do

for j := 1 to n do

a[i, j] := StrToInt(Form1.StringGrid1.Cells[j, i]);

for i := 1 to n do

b[i] := StrToInt(Form1.StringGrid2.Cells[0, i]);

for k:=1 to n-1 do

Begin

// проверка элемента A[k,k] на равенство 0

if ABS(A[k,k])<Eps then

begin

Log:=True;

for m:=k+1 to n do

if (abs(A[m,k])>Eps)and Log then begin

// перестановка k-ой и m-ой строки матрицы А

for l:=1 to n do begin

v:=A[k,l]; A[k,l]:=A[m,l]; A[m,l]:=V end;

// перестановка элементов вектора В

V:=B[k];B[k]:=B[m];B[m]:=V;

Log:=False; end;

end; {if ABS(A[k,k])<eps}

// формирование матрицы А треугольного вида

H[k]:=B[k]/A[k,k];

For i:=k+1 to n do

begin

B[i]:=B[i]-A[i,k]*H[k];

For j1:=k to n do begin

J:=N-J1+K;

C[k,j]:=A[k,j]/A[k,k];

A[i,j]:=A[i,j]-A[i,k]*C[k,j]; end;

end;

End;{for k:=1 to n1 do}

// получения вектора Х через обратный ход

X[n]:=B[n]/A[n,n];

m:=n-1;

Repeat

S:=0;

For l:=m to n-1 do

S:=S+C[m,l+1]*X[l+1];

X[m]:=H[m]-S;

m:=m-1

Until m=0;

// печать вектора Х

Form1.Memo1.Clear;

Form1.Memo1.Lines.Add('Метод Гаусса');

for i:=1 to n do

Form1.Memo1.Lines.Add(FloatTostr(X[i])); end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if not (key in ['0'..'9', #8]) then Abort; end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

if not (key in ['0'..'9', #8]) then Abort; end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if (Edit1.Text <> '') and (Edit2.Text <> '') and (StrToInt(Edit1.Text) >= 1) and (StrToInt(Edit2.Text) >= 1) then

begin

StringGrid1.RowCount := StrToInt(Edit1.Text) + 1;

StringGrid1.ColCount := StrToInt(Edit2.Text) + 1;

StringGrid2.RowCount := StrToInt(Edit1.Text) + 1; end

else ShowMessage('Ошибка'); end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if RadioGroup1.ItemIndex <> -1 then

begin

case RadioGroup1.ItemIndex of

0 : ShowMessage('1');

1 : ShowMessage('1');

2 : gaus;

3 : ShowMessage('сравнение'); end;

if CheckBox1.Checked then Button2.Enabled := True; end

else ShowMessage('Выберите тип решения');

end; procedure TForm1.Button4Click(Sender: TObject);

var i, j : integer; begin for i := 1 to StringGrid1.ColCount do

for j := 1 to StringGrid1.RowCount do

begin StringGrid1.Cells[i, j] := '';

StringGrid2.Cells[0, i] := '';

end; Memo1.Clear; end; end.

38

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]