witam wiec musze napisac program w delphi na obracanie macierzy, oto jego kod:
zastosowałem 2x Tedit i 1x Tbutton
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//globalne deklaracje stałych i zmiennych oraz definicja typu.
Const
Max = 50; { Maksymalny stopien macierzy }
Zero = 1.0E-7; { Umowne zero }
Type
TMacierz= Array[1..Max,1..Max] of Real;
var
Form1: TForm1;
//-------------------------
implementation
{$R *.dfm}
Function OdwracanieMacierzy(Var Macierz: TMacierz;Stopien:Byte): Boolean;
Var
w,k,w1,k1,i, { zmienne wykorzystywane przy iteracji }
p,q : Integer; { wspolrzedne elementu osiowego }
c : Array[1..Max] of Byte;
BylaJuzKolOsiowa: Array[1..Max]of boolean;
Max : Real;
MacPom : TMacierz;
begin
FillChar(BylaJuzKolOsiowa,SizeOf(BylaJuzKolOsiowa) ,False);
for w:=1 to Stopien do
begin
c[w]:=0;
Max:=0.0;
for k:=1 to Stopien do
begin
if not(BylaJuzKolOsiowa[k]) then
if Max < Abs(Macierz[w,k]) then
begin
Max:=Abs(Macierz[w,k]);
p:=w;
q:=k;
end;
end;
if Max<Zero then
begin
OdwracanieMacierzy:= False;
Exit;
end;
for w1:=1 to Stopien do
for k1:=1 to Stopien do
if (w1<>p)and(k1<>q)then
Macierz[w1,k1]:= Macierz[w1,k1]-(Macierz[p,k1]*Macierz[w1,q]/Macierz[p,q]);
for w1:=1 to Stopien do
if w1<>p then Macierz[w1,q]:= -Macierz[w1,q]/Macierz[p,q];
for k1:=1 to Stopien do
if k1<>q then Macierz[p,k1]:= Macierz[p,k1]/Macierz[p,q];
Macierz[p,q]:= 1/Macierz[p,q];
c[w]:= q;
BylaJuzKolOsiowa[q]:= True;
end;
(* Permutowanie macierzy *)
MacPom:=Macierz;
for k:=1 to Stopien do
for i:=1 to Stopien do
Macierz[c[k],i]:= MacPom[k,i];
MacPom:=Macierz;
for k:=1 to Stopien do
for i:=1 to Stopien do
Macierz[i,k]:= MacPom[i,c[k]];
OdwracanieMacierzy:= True;
end;
Procedure Wczytaj(var Macierz:TMacierz;var Stopien:Byte);
Var
f : Text;
i,j : Integer;
Begin
Assign(f,Form1.Edit1.Text);
Reset(f);
ReadLn(f,Stopien);
if Stopien>max then
begin
ShowMessage('Macierz za duża!!!');
Exit;
end;
for i:=1 to Stopien do
begin
for j:=1 to Stopien do
Read(f,Macierz[i,j]);
ReadLn(f);
end;
Close(f);
end;
Procedure Zapisz(Var Macierz:TMacierz; Stopien:Integer; OK:Boolean);
Var
f : Text;
i,j : Integer;
Begin
Assign(f,Form1.Edit2.Text);
Rewrite(f);
if OK then
for i:=1 to Stopien do
begin
for j:=1 to Stopien do
Write(f,Macierz[i,j],' ');
WriteLn(f);
end
else
WriteLn(f,'Macierz osobliwa!!!');
Close(f);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Macierz : TMacierz;
Stopien : Byte;
begin
Wczytaj(Macierz,Stopien);
if OdwracanieMacierzy(Macierz,Stopien) then
Zapisz(Macierz,Stopien,True)
else
Zapisz(Macierz,Stopien,False);
ShowMessage('Skończyłem');
end;
end.
trzeba podac adres plku z macierza napisany w notatniku i adres pliku gdzie ma byc zapisany wynik.
czy umialby by ktos tak zmienic kod by mozna bylo wpisywac macierz w programie wewnatrz i zeby wewnatrz wyswietlał wynik (czyli w okienku programu bez potrzebu posiadania pliku z macierza)?
pozdrawiam