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 mit Karte[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 mit Karte[y][x] zugreifen. Siehe auch https://en.wikipedia.org/wiki/Row-_and_column-major_order

    Das Beispiel habe ich aus einem Buch. Die Ausgabe passt auch mit:
    012
    345
    678

    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.



  • @Lumberjack

    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:

    @Lumberjack

    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. Mit Karten[x] bekommst du ein 1d-Array der gesamten Zeile x des Arrays. Und mit Karten[x][y] bekommst du dann eben den Wert, der in der x-ten Zeile und der y-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. Mit Karten[x] bekommst du ein 1d-Array der gesamten Zeile x des Arrays. Und mit Karten[x][y] bekommst du dann eben den Wert, der in der x-ten Zeile und der y-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 🙂


Anmelden zum Antworten