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 Ausgabe Matrix (https://www.delphipraxis.net/4744-ausgabe-matrix.html)

n00b_on_knees 10. Mai 2003 15:17


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;

flomei 10. Mai 2003 15:22

Ich hab den Code mal einfach so eingefügt und er meint:
Zitat:

[Error] Unit1.pas(27): Missing operator or semicolon
[Error] Unit1.pas(29): Missing operator or semicolon
[Error] Unit1.pas(29): Missing operator or semicolon
Die anderen Fehler: Undeclared Identifier... resultieren wohl daraus, dass ich keine definiert habe. ;)

Liegt also vielleicht an den Semicolons. Hat das Ding in der Schule denn funktioniert?

MfG Florian :hi:

n00b_on_knees 10. Mai 2003 15:34

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

Christian S. 10. Mai 2003 15:40

Hi!

Habe den Code gerade mal getestet. Die Meldung

Zitat:

[Fehler] Unit1.pas(34): Inkompatible Typen: 'TStrings' und 'String'
in der Zeile
Delphi-Quellcode:
mmAus.Lines:= mmAus.Lines[i]+format('%3d',[a[i,j]]);
sagt, glaube ich, alles.

MfG,
Peter

n00b_on_knees 10. Mai 2003 15:44

mir leider nicht wirklich xD

Christian S. 10. Mai 2003 16:12

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:
mmAus.Lines[i]+format('%3d',[a[i,j]])
. Das ist ein einzelner String.
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

n00b_on_knees 10. Mai 2003 16:26

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:
 
1. Reihe:
-107523520672090937630777833558  0  0
  2. Reihe:-208103014476482916-2028502058-209466112034583920387584
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.

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.

Christian S. 10. Mai 2003 16:37

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:
procedure FillArray(VAR a: TFeld);
Wobei der Knackpunkt natürlich bei "VAR" liegt.

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.

n00b_on_knees 10. Mai 2003 16:43

es funktioniert tatsächlich, ich hatte das mit dem original verändern bei den referenzparamtern irgendwie vergessen...danke für die hilfe

n00b_on_knees 11. Mai 2003 15:33

tread kann geschlossen werden ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.
Seite 1 von 2  1 2      

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