Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - eine Matrix darstellen
driv3r - Di 09.11.10 11:35
Titel: eine Matrix darstellen
Hallo allerseits,
habe mich soeben angemeldet und hoffe, dass mir weitergeholfen wird, da ich nicht weiterkomme.
Mein Problem: Ich müsste eine Matrix in der Konsole erstellen, die 50x50x50 sein soll und die Werte sollen mit Zufallszahlen befüllt werden, wenn ich es richtig sehe, dann müsste sie 3D sein, oder? Da 50x50x50.
Ich komme aber nur bis 2D.
Habe bisher diese Code gebastelt, aber ich denke, dass sie nicht korrekt ist.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| program 3D Matrix;
{$APPTYPE CONSOLE}
uses SysUtils;
const MAX_ZEILEN = 50; MAX_SPALTEN = 50;
var Matrix : array [1..MAX_ZEILEN, 1..MAX_SPALTEN] of Integer; z, s : Integer;
begin randomize; for z := 1 to MAX_ZEILEN do for s := 1 to MAX_SPALTEN do Matrix[z,s]:= random(10); for z := 1 to MAX_ZEILEN do begin for s:= 1 to MAX_SPALTEN do Write(Matrix[z,s],' '); writeln; end;
Readln;
end. |
Jedoch wenn ich es so mache wie es ergänzen möchte (//die Kommentare) dann wird bei mir keine Matrix ausgegeben. Weiß vlt. einer ein Rat?
Gausi - Di 09.11.10 11:39
Hallo und :welcome: in der Entwickler-Ecke,
Dein Problem ist, dass du ein 3-dimensionales Objekt auf der 2-dimensionaln Konsole ausgeben willst. Das kann ja nicht direkt klappen. ;-)
Du könntest jede "Ebene" für sich als 2D-Matrix betrachten, und diese wie in deinem Code ausgeben. Ob das dann noch übersichtlich ist, ist natürlich eine andere Frage.
platzwart - Di 09.11.10 12:24
Die Frage ist, soll es wirklich 3D sein oder ist das nur ein Missverständnis? Wenn du ein 2D Array hast mit jeweils einem Wert gespeichert, dann hast du die Wertepaare (x, y, Wert).
driv3r - Di 09.11.10 12:35
Laut Aufgabenstellung soll es eine 3D Matrix 50x50x50 sein. Es müssen 3 Dimensionen vorhanden sein.
@ Gausi
Soll ich das quasi als Koordinatensystem (X-Y-Z) vorstellen, oder wie?
Ich mache sozusagen eine Procedure, die die Matrix in X-Y Richtung füllt, dann noch eine, die die Matrix in X-Z Richtung und noch eine, die es in Y-Z Richtung macht, oder was meinst du mit den Ebenen?
Ich hätte dann meine 3 Dimensionen, oder sehe ich das falsch?
Jedoch für 3Dim. sollte ich doch auf
Delphi-Quelltext
1:
| array of array of array |
zurückgreifen, oder?
ps: ich muss auch sagen, dass ich absoluter Anfänger bin.
Bergmann89 - Di 09.11.10 12:55
Hey,
das mit den Ebnen is so gemeint: gibst erst alle Werte von [1,1,1] bis [50, 50, 1] aus, dann gehst du eine Ebene tiefer (oder anders erklärt du erhöhst den Z-Wert). Dann gibst du alle Werte von [1,1,2] bis [50, 50, 2] aus, usw.
Dann hast du 50 Felder die 50x50 groß sind auf dem Schirm.
€: man kann sich das auch so vorstellen, das man die Matrix entlang der Z-Achse in 50 Teile Zerschneidet, und diese Teile dann auf dem 2D-Schrim ausgibt
MfG Bergmann.
driv3r - Do 11.11.10 11:51
Hat sich mehr oder weniger erledigt. Ich hätte lieber doch die Aufgabenstellung genauer lesen sollen. :roll:
Es war zwar richtig, dass man eine 3D Matrix mit Delphi erstellen sollen. Man müßte sie aber nicht mit der Konsole ausgeben.
Habe jetzt die Code verändert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| program 3DMatrix;
{$APPTYPE CONSOLE}
uses SysUtils;
const MAX_ZEILEN = 50; MAX_SPALTEN = 50; MAX_DIAG = 50;
var Matrix : array [1 .. MAX_ZEILEN, 1 .. MAX_SPALTEN, 1 .. MAX_DIAG ] of Integer; a, b, c: Integer;
begin randomize; begin for a := 1 to MAX_ZEILEN do begin for b := 1 to MAX_SPALTEN do begin for c := 1 to MAX_DIAG do
Matrix[a,b,c] := random(10);
end; end; end;
Writeln;
Readln;
end. |
Eine Frage hätte ich jedoch noch. Wie muss die Schleife bzw. Fkt lauten, die den Mittelwert der Matrix ermittelt und den dann in der Konsole zurückgibt.
Mag vlt. leicht klingen, aber i-wie komme ich mom. nicht auf die Idee.
War wahrscheinlich zuviel Delphi.
Gausi - Do 11.11.10 11:57
Dafür musst du die Matrix komplett durchgehen, alle Einträge aufsummieren und hinterher durch die Anzahl aller Elemente teilen.
Bergmann89 - Do 11.11.10 15:54
Hey,
wenn es nicht unbedingt eine extra Funktion sein sollte, dann würde ich das gleich beim befüllen der Matrix machen:
Delphi-Quelltext
1: 2:
| Matrix[a,b,c] := random(10); inc(sum, Matrix[a,b,c]); |
MfG Bergmann
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!