![]() |
Arraytypfehler
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Ich verstehe nicht wo der Fehler liegt
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. |
Re: Arraytypfehler
Hast du dein Programm schon mal debuggt um zu sehen, an welcher Stelle der fehler auftritt?
|
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)
|
Re: Arraytypfehler
Delphi-Quellcode:
?
For i:= 0 to N-1 do
begin For j:= 0 to M-1 do |
Re: Arraytypfehler
Entweder habe ich es übersehen, oder da fehlt ein SetLength()für das Matrixarray.
|
Re: Arraytypfehler
Du hast MatrixArray als dynamisches Array deklariert.
Ich habe kein Setlength(MatrixArray,..) gefunden. Grüße Klaus |
Re: Arraytypfehler
check ich gerade nicht was ihr meint :oops:
|
Re: Arraytypfehler
Delphi-Quellcode:
Machst am Besten beim Programmstart bzw. dann, wenn Du weißt, wie groß die Größen sein sollen.
SetLength(MatrixArray, <Größe 1>,<Größe 2>);
|
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.
|
Re: Arraytypfehler
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
nun habe ich ne noch schlimmere fehlermeldung (siehe Anhang) .... ich bin am verzweifeln
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; Aber trotzdem DANKE euch =) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz