Verständnisfrage - Mehrdimensionales Array
-
Hi, ich komme bei einer Zeile Code leider nicht weiter. Habe dazu nichts wirklich passendes im Netz gefunden und daher meine Frage an euch.
int main() { const int Breite{ 3 }; const int Hoehe{ 3 }; int Karte[Breite][Hoehe]; int x, y; int Zaehler{ 0 }; for (y = 0; y < Hoehe; y++) { for (x = 0; x < Breite; x++) { Karte[x][y] = Zaehler; Zaehler++; } } for (y = 0; y < Hoehe; y++) { for (x = 0; x < Breite; x++) { cout << Karte[x][y]; } cout << endl; }
In Zeile 13 wird das Array ja gefüllt mit den Zahlen 0-8.
Allerdings irritiert mich Karte[x][y] = Zähler.
Wie und warum werden die Werte nur bei x eingegeben?
-
@Lumberjack sagte in Verständnisfrage - Mehrdimensionales Array:
In Zeile 13 wird das Array ja gefüllt mit den Zahlen 0-8.
Allerdings irritiert mich Karte[x][y] = Zähler.
Wie und warum werden die Werte nur bei x eingegeben?Ich glaube, ich verstehe deine Frage nicht.
Karte[x][y]
ist das Element und dem weist du etwas zu. Was meinst du mit "nur bei x eingegeben"?Eine andere Sache: Arrays in C++ sind row-major, das heißt, zuerst kommt die Zeile, dann die Spalte. Du solltest also dein Array als
int Karte[Hohe][Breie]
definieren und mitKarte[y][x]
zugreifen. Siehe auch https://en.wikipedia.org/wiki/Row-_and_column-major_order
-
@wob sagte in Verständnisfrage - Mehrdimensionales Array:
@Lumberjack sagte in Verständnisfrage - Mehrdimensionales Array:
In Zeile 13 wird das Array ja gefüllt mit den Zahlen 0-8.
Allerdings irritiert mich Karte[ ][y] = Zähler.
Wie und warum werden die Werte nur bei x eingegeben?Ich glaube, ich verstehe deine Frage nicht.
Karte[x][y]
ist das Element und dem weist du etwas zu. Was meinst du mit "nur bei x eingegeben"?Eine andere Sache: Arrays in C++ sind row-major, das heißt, zuerst kommt die Zeile, dann die Spalte. Du solltest also dein Array als
int Karte[Hohe][Breie]
definieren und mitKarte[y][x]
zugreifen. Siehe auch https://en.wikipedia.org/wiki/Row-_and_column-major_orderDas Beispiel habe ich aus einem Buch. Die Ausgabe passt auch mit:
012
345
678Meine Frage ist, wenn y=0 ist und x drei mal durchläuft.
y=1 ist, x erneut wieder drei mal durchläuft, wieso sich da auch nicht der Wert von [ y ] ändert. [ x ]tut es ja.
-
for (y = 0; y < Hoehe; y++) { cout << "hier wurde y geändert: " << y << endl; for (x = 0; x < Breite; x++) { cout << "hier wurde x geändert: " << x << endl; Karte[x][y] = Zaehler; Zaehler++; } }
Dein Stichwort: verschachtelte for schleife
-
@daMicha sagte in Verständnisfrage - Mehrdimensionales Array:
for (y = 0; y < Hoehe; y++) { cout << "hier wurde y geändert: " << y << endl; for (x = 0; x < Breite; x++) { cout << "hier wurde x geändert: " << x << endl; Karte[x][y] = Zaehler; Zaehler++; } }
Dein Stichwort: verschachtelte for schleife
Das verstehe ich schon. Nur die beschriebene Aktion nicht.
-
@Lumberjack sagte in Verständnisfrage - Mehrdimensionales Array:
Meine Frage ist, wenn y=0 ist und x drei mal durchläuft.
y=1 ist, x erneut wieder drei mal durchläuft, wieso sich da auch nicht der Wert von [ y ] ändert. [ x ]tut es ja.Ich habe die Frage immer noch nicht verstanden - und ich dachte, dass dir das Beispiel von @daMicha weiterhelfen würde.
Was meinst du in deiner Frage mit den eckigen Klammern? Sollen die sowas wie Anführungszeichen sein? Denn was soll der Wert von
[x]
sein? Die eckigen Klammern funktionieren ja nicht für sich allein, sondern funktionieren in einem Array als Zugriff and der Stelle x.Dein
Karten
ist ein 2d-Array. MitKarten[x]
bekommst du ein 1d-Array der gesamten Zeile x des Arrays. Und mitKarten[x][y]
bekommst du dann eben den Wert, der in derx
-ten Zeile und dery
-ten Spalte steht.Ansonsten formuliere deine Frage bitte ausführlicher, sodass wir eine Chance haben, deine Verständnisprobleme zu verstehen und dir besser zu helfen.
-
@wob sagte in Verständnisfrage - Mehrdimensionales Array:
@Lumberjack sagte in Verständnisfrage - Mehrdimensionales Array:
Meine Frage ist, wenn y=0 ist und x drei mal durchläuft.
y=1 ist, x erneut wieder drei mal durchläuft, wieso sich da auch nicht der Wert von [ y ] ändert. [ x ]tut es ja.Ich habe die Frage immer noch nicht verstanden - und ich dachte, dass dir das Beispiel von @daMicha weiterhelfen würde.
Was meinst du in deiner Frage mit den eckigen Klammern? Sollen die sowas wie Anführungszeichen sein? Denn was soll der Wert von
[x]
sein? Die eckigen Klammern funktionieren ja nicht für sich allein, sondern funktionieren in einem Array als Zugriff and der Stelle x.Dein
Karten
ist ein 2d-Array. MitKarten[x]
bekommst du ein 1d-Array der gesamten Zeile x des Arrays. Und mitKarten[x][y]
bekommst du dann eben den Wert, der in derx
-ten Zeile und dery
-ten Spalte steht.Ansonsten formuliere deine Frage bitte ausführlicher, sodass wir eine Chance haben, deine Verständnisprobleme zu verstehen und dir besser zu helfen.
Zum füllen des 2D-Arrays wird ja die Variable "Zaehler" benutzt.
Wie das funktioniert, verstehe ich nicht ganz.
-
Ergänze doch mal um eine Ausgabe:
for (x = 0; x < Breite; x++) { Karte[x][y] = Zaehler; cout << "Fuelle Karte[" << x << "][" << y << "] mit " << Zaehler << '\n'; // diese Zeile hinzufügen Zaehler++; }
Vielleicht hilft das?
-
@Belli sagte in Verständnisfrage - Mehrdimensionales Array:
Ergänze doch mal um eine Ausgabe:
for (x = 0; x < Breite; x++) { Karte[x][y] = Zaehler; cout << "Fuelle Karte[" << x << "][" << y << "] mit " << Zaehler << '\n'; // diese Zeile hinzufügen Zaehler++; }
Vielleicht hilft das?
Jetzt sieht man es genau. Danke hat geholfen