![]() |
Ausgabe Matrix
Hallo!
Ich hab da mal wieder ne Frage zu ner Ausgabe ;)... Ich muss ein Mehrdimensionales Feld erstellen, 1..3 und 1..6. Dann muss ich das ganze in einem Memofeld ausgeben, was bei mir nicht so richtig funktioniert, obwohl ich den Teil aus unserem Schulscript hab. Wísst ihr was an diesem Teil falsch ist?
Delphi-Quellcode:
procedure TForm1.ShowArray(a: TFeld);
var i, j: integer; begin for i:=1 to 2 do begin mmAus.Lines.add(format('%3d. Reihe:',[i])); for j:=1 to 6 do mmAus.Lines:= mmAus.Lines[i]+format('%3d',[a[i,j]]); end; end; |
Ich hab den Code mal einfach so eingefügt und er meint:
Zitat:
Liegt also vielleicht an den Semicolons. Hat das Ding in der Schule denn funktioniert? MfG Florian :hi: |
es ist so, wir haben nur kurz eben theoretisch mehrdimensionale felder durchgenommen, von einer ausgabe hat aber keiner geredet, und aufgabe ist eben in nem memo ausgeben, also habe ich den teil aus dem script reingeschrieben, was eben nicht funktioniert, aber funktionieren sollte
|
Hi!
Habe den Code gerade mal getestet. Die Meldung Zitat:
Delphi-Quellcode:
sagt, glaube ich, alles.
mmAus.Lines:= mmAus.Lines[i]+format('%3d',[a[i,j]]);
MfG, Peter |
mir leider nicht wirklich xD
|
Also:
Die linke Seite der Code-Zeile heißt "mmAus.Lines". Da mmAus ein Memo ist, handelt es sich bei "mmAus.Lines" um eine Variable vom Typ TStrings. Also eine Liste von Strings, nämlich die einzelnen Zeilen des Memos. Die rechte Seite der Code-Zeile heißt
Delphi-Quellcode:
. Das ist ein einzelner String.
mmAus.Lines[i]+format('%3d',[a[i,j]])
Folglich versucht Du hier, einer Liste von Strings einen einzelnen String zuzuweisen und das geht natürlich nicht. Wenn Du auf der linken Seite das "mmAus.Lines" durch "mmAus.Lines[i]" ersetzt, dann sollte es funktionieren. MfG, Peter |
danke für die erklärung, es lässt sich auch compelieren usw., nur kommt nicht das gewünscht ergebnis heraus, sondern etwas in form von:
Delphi-Quellcode:
und das ist nicht das ziel. ich poste mal den gesamten quellcode, vielliecht weiß dann jemand auch noch von hier die lösung, oder es hat noch immer mit der ausgabe zu tun.1. Reihe: -107523520672090937630777833558 0 0 2. Reihe:-208103014476482916-2028502058-209466112034583920387584
Delphi-Quellcode:
unit fillarray;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFeld = array [1..3, 1..6] of integer; TForm1 = class(TForm) mmAus: TMemo; btStart: TButton; procedure ShowArray(a: TFeld); procedure FillArray(a: TFeld); procedure btStartClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FillArray(a: TFeld); //Variablendeklaration var i, j: integer; begin for i:= 1 to 3 do for j:=1 to 6 do a[i, j]:= random(9); end; procedure TForm1.ShowArray(a: TFeld); var i, j: integer; begin for i:=1 to 2 do begin mmAus.Lines.add(format('%3d. Reihe:',[i])); for j:=1 to 6 do mmAus.Lines[i]:= mmAus.Lines[i]+format('%3d',[a[i,j]]); end; end; procedure TForm1.btStartClick(Sender: TObject); //Variablendeklaration var a: TFeld; begin FillArray(a); ShowArray(a); end; end. |
Das Problem liegt in der Prozedur "FillArray". Die Prozedur ist so deklariert, dass das Array, welches Du in FillArray verarbeitest, nicht das gleiche Array ist, welches in "btStartClick" deklariert ist. Wenn Du "FillArray" wie folgt änderst, sollte es funktionieren:
Delphi-Quellcode:
Wobei der Knackpunkt natürlich bei "VAR" liegt.
procedure FillArray(VAR a: TFeld);
MfG, Peter P.S.: Musst Du natürlich im Interface- und Implementation-Teil ändern. //Edit: in der Funktion ShowArray solltest Du das Memo vor der neuen Ausgabe erst einmal komplett leer machen. Sonst gibt es beim zweiten Button-Klick da 'ne ziemliche Unordnung. |
es funktioniert tatsächlich, ich hatte das mit dem original verändern bei den referenzparamtern irgendwie vergessen...danke für die hilfe
|
tread kann geschlossen werden ;)
|
Bei mir tritt der Fehler eine Zeile früher auf und da sind ganz einfach die Parameter vertauscht! :lol:
//edit: Die Frage zu entfernen finde ich aber nicht so toll ... |
sorry, hatte einen neuen tread eröffnet :oops:
// Edit: Danke, es funktioniert, wieso bin ich nicht gleich selbst darauf gekommen? ^^" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 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