Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Report by IAG.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3 Мб
Скачать
☆
  1. Обработка массивов

Интерфейс:

Код программы:

Unit Unit8;

interface

uses

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

StdCtrls, Grids, Menus, Buttons, ComCtrls;

type

TForm8 = class(TForm)

grdMatrix: TStringGrid;

txtRazmer: TEdit;

Label1: TLabel;

grdVector: TStringGrid;

grdX: TStringGrid;

BitBtn1..3: TBitBtn;

UpDown1: TUpDown;

Label1..6: TLabel;

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

procedure txtRazmerExit(Sender: TObject);

procedure mnuExitClick(Sender: TObject);

procedure mnuMatrixClearClick(Sender: TObject);

procedure mnuMatrixFillClick(Sender: TObject);

procedure mnuMatrixCalcClick(Sender: TObject);

procedure grdMatrixSelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form8: TForm8;

procedure TForm8.txtRazmerKeyPress(Sender: TObject; var Key: Char); // работа с TEdit (ранг матрицы) //

var

n,i,j:integer;

begin

if key<>#13 then exit;

txtRazmerExit(Sender);

end;

procedure TForm8.txtRazmerExit(Sender: TObject); // процедура ввода ранга матрицы,связывание её со StringGrid (матрица А и И)//

var

n,i,j:integer;

begin

n:= StrToInt(txtRazmer.text);

if (n<1) or (n>10000) then

begin

application.MessageBox('Неправильный Размер','Ошибка',48);

txtRazmer.SetFocus;

exit;

end;

grdMatrix.ColCount:=n+1;

grdMatrix.RowCount:=n+1;

grdX.RowCount:=n+1;

grdVector.RowCount:=n+1;

grdVector.Cols[0][0]:='b';

grdX.Cols[0][0]:='X';

for i:=1 to n do

begin

grdMatrix.Cols[i][0]:=IntToStr(i);

grdMatrix.Rows[i][0] := IntToStr(i);

end;

for i:= 1 to n do

for j:= 1 to n do

If grdMatrix.Rows[i][j]='' then grdMatrix.Rows[i][j]:='0';

for i:=1 to n do

begin

If grdVector.Rows[i][0]='' then grdVector.Rows[i][0]:='0';

grdX.Rows[i][0]:='';

end;

end;

procedure TForm8.mnuExitClick(Sender: TObject);

begin

if Application.MessageBox('Завершить Работу Программы?','Выход',

32+MB_YESNO+MB_DEFBUTTON2) = IDYES

then halt;

end;

procedure TForm8.mnuMatrixClearClick(Sender: TObject);

var n,i,j:integer;

begin

n:= StrToInt(txtRazmer.text);

if (n<1) or (n>100000) then

begin

application.MessageBox('Неправильный Размер','Ошибка',48);

txtRazmer.SetFocus;

exit;

end;

grdMatrix.ColCount:=n+1;

grdMatrix.RowCount:=n+1;

grdX.RowCount:=n+1;

grdVector.RowCount:=n+1;

for i:=1 to n do

begin

grdMatrix.Cols[i][0]:=IntToStr(i);

grdMatrix.Rows[i][0] := IntToStr(i);

end;

for i:= 1 to n do

for j:= 1 to n do

grdMatrix.Rows[i][j]:='0';

for i:=1 to n do

begin

grdVector.Rows[i][0]:='0';

grdX.Rows[i][0]:='';

end;

end;

procedure TForm8.mnuMatrixFillClick(Sender: TObject);

var n,i,j:integer;

begin

n:= StrToInt(txtRazmer.text);

if (n<1) or (n>10000) then

begin

application.MessageBox('Неправильный Размер','Ошибка',48);

txtRazmer.SetFocus;

exit;

end;

grdMatrix.ColCount:=n+1;

grdMatrix.RowCount:=n+1;

grdX.RowCount:=n+1;

grdVector.RowCount:=n+1;

for i:=1 to n do

begin

grdMatrix.Cols[i][0]:=IntToStr(i);

grdMatrix.Rows[i][0] := IntToStr(i);

end;

for i:= 1 to n do

for j:= 1 to n do

grdMatrix.Rows[i][j]:=IntToStr(-10+Random(20));

for i:=1 to n do

begin

grdVector.Rows[i][0]:=IntToStr(-10+Random(20));

grdX.Rows[i][0]:='';

end;

end;

procedure TForm8.mnuMatrixCalcClick(Sender: TObject); // заполнение стринг грида рандомными числами черзе массив)//

var n,i,j,k,imax:integer;

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

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

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

koef,max,sum,s,m:real;

begin

n:=grdMatrix.ColCount-1;

for i:= 1 to n do

begin // решение уравнения //

for j:= 1 to n do

a[i][j]:= StrToFloat(grdMatrix.Rows[i][j]);

a[i][n+1]:=StrToFloat(grdVector.Rows[i][0]);

grdX.Rows[i][0]:='';

end;

for i:=1 to n-1 do

begin

max:=abs(a[i][i]);

imax:=i;

for j:= i+1 to n do

if abs(a[j][i])>max then

begin

max:=abs(a[j][i]);

imax:= j;

end;

if i<>imax then

begin

for j:= i to n+1 do

begin

max:=a[i][j];

a[i][j]:=a[imax][j];

a[imax][j]:=max;

end

end;

if abs(a[i][i])<1e-10 then

begin

application.MessageBox('Деление на ноль','Ошибка!',16);

exit;

end;

for j:=1 to n+1 do ai[j]:=a[i][j]/a[i][i];

for k:=i+1 to n do

begin

koef:=a[k][i];

for j:=1 to n+1 do

a[k][j]:=a[k][j]-ai[j]*koef;

end;

end;

for i:= n downto 1 do

begin

sum:=0;

for j:= i+1 to n do

sum:=sum+a[i][j]*x[j];

for i:= 1 to n do

grdX.Rows[i][0]:=FloatToStrF(x[i],ffGeneral,7,4);

procedure TForm8.grdMatrixSelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

begin

grdVector.Row:=Arow;

grdX.Row:=Arow;

end

end.

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