Autor Beitrag
driv3r
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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.

ausblenden volle Höhe 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; //wenn sie(matrix) 3D sein soll, dann müsste doch hier [1..Max, 1..Max, 1..Max] stehen, oder?
    z, s : Integer; //dementsprechend dann hier eine zusätliche Var


begin
randomize;
    for z := 1 to MAX_ZEILEN do
      for s := 1 to MAX_SPALTEN do
          Matrix[z,s]:= random(10); //hier dann auch

    for z := 1 to MAX_ZEILEN do
      begin
          for s:= 1 to MAX_SPALTEN do
          Write(Matrix[z,s],' '); // und hier
          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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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.

_________________
We are, we were and will not be.
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
array of array of array					

zurückgreifen, oder?

ps: ich muss auch sagen, dass ich absoluter Anfänger bin.
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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:
ausblenden volle Höhe 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;


//       Write(Matrix[8,89,44]);
       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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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:
ausblenden 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^^