unit mMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TMain =
class(TForm)
LaSpalten: TLabel;
LaZeilen: TLabel;
EdSpalten: TEdit;
EdZeilen: TEdit;
BtMatrix: TButton;
ScrollBoxMatrix: TScrollBox;
BtRechnen: TButton;
LiBoxLoesungen: TListBox;
procedure BtMatrixClick(Sender: TObject);
procedure EdSpaltenChange(Sender: TObject);
procedure EdZeilenChange(Sender: TObject);
procedure FormCanResize(Sender: TObject;
var NewWidth,
NewHeight: Integer;
var Resize: Boolean);
procedure BtRechnenClick(Sender: TObject);
procedure ShowRealErgebnis;
function Rechnen: Boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Main: TMain;
M, N: Integer;
//Matrix Variablen
EditArray:
array[1..200, 1..200]
of TEdit;
MatrixArray:
array of array of Real;
Ergebnisse:
array of Real;
implementation
{$R *.dfm}
procedure TMain.BtMatrixClick(Sender: TObject);
Var GleichPanel: TPanel;
Anzahl, Variablen: TLabel;
I, J: Byte;
begin
GleichPanel:=TPanel.Create(ScrollBoxMatrix);
GleichPanel.Parent:=ScrollBoxMatrix;
GleichPanel.Left:=(M*40)+50;
GleichPanel.Top:=20;
GleichPanel.Width:=2;
GleichPanel.Height:=N*30;
GleichPanel.Caption:='
';
for i:= 1
to N
do
begin
for j:= 1
to M
do
begin
EditArray[i,j]:= TEdit.Create(ScrollBoxMatrix);
EditArray[i,j].Parent:=ScrollBoxMatrix;
EditArray[i,j].Width:=35;
EditArray[i,j].Height:=25;
EditArray[i,j].Left:=J*40;
EditArray[i,j].Top:=I*30;
end;
end;
for I:=1
to N
do
begin
EditArray[i,j]:= TEdit.Create(ScrollBoxMatrix);
EditArray[i,j].Parent:=ScrollBoxMatrix;
EditArray[i,j].Width:=35;
EditArray[i,j].Height:=25;
EditArray[i,j].Left:=(J*40)+30;
EditArray[i,j].Top:=I*30;
Anzahl:=TLabel.Create(ScrollBoxMatrix);
Anzahl.Parent:=ScrollBoxMatrix;
Anzahl.Left:=15;
Anzahl.Top:=I*30;
Anzahl.Font.Style:=[fsBold];
Anzahl.Font.Size:=10;
Anzahl.Caption:=IntToStr(I);
end;
for J:=1
to M
do
begin
Variablen:=TLabel.Create(ScrollBoxMatrix);
Variablen.Parent:=ScrollBoxMatrix;
Variablen.Left:=J*40;
Variablen.Top:=10;
Variablen.Font.Style:=[fsBold];
Variablen.Font.Size:=11;
Variablen.Caption:='
x'+IntToStr(J);
end;
end;
procedure TMain.EdSpaltenChange(Sender: TObject);
begin
If EdSpalten.Text<>'
'
then
M:=StrToInt(EdSpalten.Text);
end;
procedure TMain.EdZeilenChange(Sender: TObject);
begin
If EdZeilen.Text<>'
'
then
N:=StrToInt(EdZeilen.Text);
end;
procedure TMain.FormCanResize(Sender: TObject;
var NewWidth,
NewHeight: Integer;
var Resize: Boolean);
begin
ScrollBoxMatrix.Width:=Main.ClientWidth -18;
ScrollBoxMatrix.Height:=Main.ClientHeight -94;
LiBoxLoesungen.Width:=Main.ClientWidth -353;
end;
procedure TMain.BtRechnenClick(Sender: TObject);
var i, j: Byte;
begin
For i:=1
to N
do
begin
For j:= 1
to M
do
Begin
[B]MatrixArray[i,j]:=StrToFloat(EditArray[i,j].Text);[/B]
//****#######****// Hier Bekomme ich den Fehler gemeldet
end;
end;
LiBoxLoesungen.Items.BeginUpdate;
LiBoxLoesungen.MultiSelect := true;
LiBoxLoesungen.SelectAll;
LiBoxLoesungen.DeleteSelected;
LiBoxLoesungen.MultiSelect := false;
LiBoxLoesungen.Items.EndUpdate;
if not Rechnen
then
begin
ShowMessage('
Keine Loesung moeglich');
exit;
end;
ShowRealErgebnis;
end;
procedure TMain.ShowRealErgebnis;
var
i1: Byte;
begin
LiBoxLoesungen.Items.BeginUpdate;
for i1 := Low(ergebnisse)
to High(ergebnisse)
do
begin
LiBoxLoesungen.Items.Add(chr(97 + i1) + '
= ' + FloatToStr(Ergebnisse[i1]));
end;
LiBoxLoesungen.Items.EndUpdate;
Beep;
Beep;
Beep;
end;
function TMain.Rechnen: Boolean;
var
i1, i2, i3, i4, i5: Byte;
begin
result := true;
try
for i3 := 0
to M
do
begin
for i2 := i3
to M
do
for i1 := N
downto 0
do
Matrixarray[i1, i2] := Matrixarray[i1, i2] / Matrixarray[i3, i2];
for i4 := i3 + 1
to M
do
for i5 := N
downto 0
do
Matrixarray[i5, i4] := Matrixarray[i5, i3] - Matrixarray[i5, i4];
end;
SetLength(ergebnisse, N);
for i1 := High(ergebnisse)
downto Low(ergebnisse)
do
ergebnisse[i1] := Matrixarray[N, i1];
for i1 := High(ergebnisse)
downto 1
do
for i2 := i1
downto 1
do
ergebnisse[i2 - 1] := ergebnisse[i2 - 1] - (ergebnisse[i1] * Matrixarray[i1, i2 - 1]);
except
result := false;
end;
end;
end.