Thema: Delphi Arraytypfehler

Einzelnen Beitrag anzeigen

Kytrix

Registriert seit: 26. Nov 2007
54 Beiträge
 
#1

Arraytypfehler

  Alt 17. Mär 2008, 16:31
Delphi-Quellcode:
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.
Ich verstehe nicht wo der Fehler liegt
Miniaturansicht angehängter Grafiken
lgs_rechner_158.jpg  
  Mit Zitat antworten Zitat