Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

01.11.2005, 21:12

2D-Arrays

Ich habe Probleme, diese Arrays zu kapieren.also wollt ich mal was ausprobieren:
In allen Beispielen, die ich gefunden hab, ist bei 2D-Arrays immer nur die Rede von quadratischen Arrays (also z.B.5*5Felder), deshalb wollt ich mal ein rechteckiges konsturieren:

#include <iostream>

using namespace std;

int main ()

{

const int Breite = 5;
const int Laenge = 7;

int Karte[Laenge][Breite] = {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,};




for
(int x=0; x<Laenge; x++)
{

for (int y=0; y<Breite; y++)
{

cout<<Karte[x][y];
}

cout<<endl;

}

return 0;
}

Ausgabe auf dem Bildschirm ist:
1 2 3 4 5
6 7 8 9 10
11 12 usw., was ja nicht so schlecht aussieht :)

Tausche ich jetzt in der Befehlszeile cout<<Karte[x][y]; die Variablen, kommt folgende Ausgabe:
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
6 11 16 21 26
7 12 17 22 27 was mich doch verwirrt ???

Das durch das Tauschen der Koordinaten die Reihenfolge der Ausgabe geändert wird, ist klar, aber wieso fehlen manche Zahlen, und andere sind doppelt?
Und von was hängt es ab, daß das Array fünf Felder lang wird und nicht sieben, obwohl ich in diesem Fall beim Erstellen des Arrays zuerst die Konstante Laenge=7 aufgeführt hab?

Im voraus vielen Dank für die Hilfe

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

2

01.11.2005, 21:38

da du nur den aufruf in cout << Karte[y][x] geändert hast, aber nicht den aufbau der schleifen kommt folgender aufruf auch vor:
cout << Karte[1][7];
soweit ich weiß speichert c zwar irgendwie, wie groß einzelne "dimensionen" eines arrays sind, damit diese aufrufe überhaupt funktionieren können.
aber es überprüft glaub ich nicht, ob man jetzt mit der 7 zB das maximum verlässt. das heißt aber, dass ein wert aus einer anderen "Tiefe" aufgerufen wird.
bildlich deine karte 7*5:

C-/C++-Quelltext

1
2
3
4
5
 1  2  3  4  5  
 6  7  8  9 10 
11 12 13 14 15 
16 17 18 19 20 
21...

wenn du jetzt den aufruf Karte[1][7] machst bekommst du den wert 13.
wenn du dann aber nochmal Karte[2][2] aufrufst, was ja auch vorkommt bekommst du wieder 13.
einen fehler bekommst du nicht, weil du den bereich nicht verlässt. aber es kommen werte doppelt vor.
zu mindest könnte ich mir vorstellen, dass es daran liegt.
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

3

02.11.2005, 19:31

Vielen Dank für Deine Antwort.

Werbeanzeige