Autor |
Beitrag |
driv3r
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 09.11.10 11:35
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.
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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 09.11.10 11:39
Hallo und  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.
_________________ We are, we were and will not be.
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: 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).
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
driv3r 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
driv3r 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 11.11.10 11:51
Hat sich mehr oder weniger erledigt. Ich hätte lieber doch die Aufgabenstellung genauer lesen sollen.
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:
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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|