Suche
Suche Menü

Zweidimensionale Felder

Bisher haben wir eindimensionale Felder kennengelernt, die einer einfachen Liste entsprachen. Für viele Zwecke benötigt man aber mehrdimensionale Felder. Im Folgendem wollen wir ein Schachbrett simulieren. Ein Schachbrett hat 8 x 8 Felder, die wir mit einem zweidimensionalen Array darstellen können

int brett[8][8];

Man kann sich das Brett wie ein Koordinatensystem vorstellen, wobei man mit dem ersten Index die Y-Achse und mit dem zweiten Index die X-Achse anspricht: brett[Y][X]. Es bietet sich an, den ersten Index als den Zeilenindex und den zweiten Index als den Spaltenindex zu wählen, weil in dieser Reihenfolge das Feld auch im Speicher abgelegt wird. Zudem müssen wir bei einer Bildschirmausgabe die Feldinhalte auch zeilenweise ausgeben. In der Programmierung empfiehlt es sich deshalb den Ursprung des Koordinatensystems in die linke obere Ecke zu legen, wie es in der unteren Grafik zu sehen ist. Insgesamt haben wir hier 8 * 8 Elemente, also 64. Die blauen Zahlen sollen Werte darstellen, diesen Stand erhalten wir mit folgendem Code. Man kann sich vorstellen, dass ein Wert einer bestimmten Spielfigur entspricht.

brett[2][1] = 1;
brett[4][2] = 2;
brett[3][5] = 3;
brett[6][7] = 4;

Hier nun das komplette Programm mit Ausgabe, für welche wir aufgrund der zwei Achsen auch zwei verschachtelte Schleifen benötigen, um jeden Wert erreichen zu können.

int brett[8][8] = { 0 };

brett[2][1] = 1;
brett[4][2] = 2;
brett[3][5] = 3;
brett[6][7] = 4;

int i, j;

// Schleife fuer Zeilen, Y-Achse
for(i=0; i<8; i++) {
	// Schleife fuer Spalten, X-Achse
	for(j=0; j<8; j++) {
		printf("%d ", brett[i][j]);
	}
	printf("\n");
}

0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 0 0 0 3 0 0
0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 4
0 0 0 0 0 0 0 0

Initialisierung

Die Initialisierung zweidimensionaler Felder erfolgt nach unserer Definition der Achsen spaltenweise.

int brett[8][8] = { 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4 };

1 2 3 4 5 6 7 8
1 2 3 4 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

Allgemein wird bei Null angefangen zu zählen und von rechts her hochgezählt. Bei unserem Beispiel mit zwei Dimensionen und 12 Initialisierungs-Werten sind dabei folgende Indexierungen betroffen:

Zeile 1: [0][0], [0][1], [0][2], [0][3], [0][4], [0][5], [0][6], [0][7]
Zeile 2: [1][0], [1][1], [1][2], [1][3]