Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Arraytypfehler (https://www.delphipraxis.net/110398-arraytypfehler.html)

Kytrix 17. Mär 2008 16:31


Arraytypfehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
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

mkinzler 17. Mär 2008 16:34

Re: Arraytypfehler
 
Hast du dein Programm schon mal debuggt um zu sehen, an welcher Stelle der fehler auftritt?

Kytrix 17. Mär 2008 16:40

Re: Arraytypfehler
 
hatte eigentlich die stelle markiert aber war wohl zu viel anderes mitmarkiert .... naja jetzt ist nur noch die stelle markiert (die fehlermeldung ist als anhang angefügt)

mkinzler 17. Mär 2008 16:43

Re: Arraytypfehler
 
Delphi-Quellcode:
For i:= 0 to N-1 do
begin
  For j:= 0 to M-1 do
?

DeddyH 17. Mär 2008 16:43

Re: Arraytypfehler
 
Entweder habe ich es übersehen, oder da fehlt ein SetLength()für das Matrixarray.

Klaus01 17. Mär 2008 16:45

Re: Arraytypfehler
 
Du hast MatrixArray als dynamisches Array deklariert.
Ich habe kein Setlength(MatrixArray,..) gefunden.

Grüße
Klaus

Kytrix 17. Mär 2008 16:52

Re: Arraytypfehler
 
check ich gerade nicht was ihr meint :oops:

Die Muhkuh 17. Mär 2008 16:55

Re: Arraytypfehler
 
Delphi-Quellcode:
SetLength(MatrixArray, <Größe 1>,<Größe 2>);
Machst am Besten beim Programmstart bzw. dann, wenn Du weißt, wie groß die Größen sein sollen.

DeddyH 17. Mär 2008 16:56

Re: Arraytypfehler
 
Du musst erst mit SetLength() Speicher für das dynamische Array MatrixArray reservieren, bevor Du es befüllen kannst, da dessen Größe ja nicht von vornherein bekannt ist.

Kytrix 17. Mär 2008 17:06

Re: Arraytypfehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure TMain.BtRechnenClick(Sender: TObject);
var i, j: Byte;
begin
SetLength(MatrixArray, N, M);
For i:=1 to N do
begin
  For j:= 1 to M do
  Begin
    MatrixArray[i,j]:=StrToFloat(EditArray[i,j].Text);
  end;
end;
nun habe ich ne noch schlimmere fehlermeldung (siehe Anhang) .... ich bin am verzweifeln

Aber trotzdem DANKE euch =)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz