Probleme bei der Matrixausgabe und einiger weiterer Fehler
-
Hallo liebe C/C++-Mitglieder und -Admins,
ich bin ein Neuling in C und beiße mir an einem vielleicht sehr trivialen Problem die Zähne aus.
Die Aufgabe lautet wie folgt:
Beim Schachspiel zieht der Springer jeweils um zwei Felder entlang einer Zeile oder Spalte und um ein Feld senkrecht zu dieser Richtung.
--> Das ist mir klar.
Der Springer stehe auf dem Startfeld (x0 , y0 ). Wir suchen nun für jedes Feld die Länge einer kürzesten Zugfolge des Springers zu diesem Feld. Die rechte Grafik zeigt das Ergebnis, wenn der Springer bei C4 startet. Berechnen Sie nun mittels einer Funktion zugzahl() den gesuchten Wert für jedes Feld des
Schachbretts. Das Startfeld (x0 , y0 ) soll als Parameter an die Funktion übergeben werden können. Ergänzen Sie die Parameterliste und den Rückgabetyp der Funktion entsprechend. Vereinbaren Sie ggf. weitere Funktionen.Aussehen soll es so:
2 3 2 3 2 3 4 3
3 2 3 2 3 2 3 4
4 1 2 1 4 3 2 3
1 2 3 2 1 2 3 4
2 3 0 3 2 3 2 3
1 2 3 2 1 2 3 4
4 1 2 1 4 3 2 3
3 2 3 2 3 2 3 4Meine Probleme:
1. Bei mir gibt es die Matrix nicht richtig aus (Zeile 0 ist oben; Spalten
stimmen).
2. Ich habe leider keine Idee wie ich prüfen kann, ob das Feld belegt ist.Dies sind die Hauptprobleme, vielleicht fällt euch noch mehr auf. Ich bitte dringend um Hilfe und wäre euch sehr dankbar.
Code:
01 #include <stdio.h> 02 03 /*-----------------DIMENSION DES SCHACHBRETTS----------------------*/ 04 05 enum {dim=8}; 06 07 /*-----------------SCHACHBRETT-------------------------------------*/ 08 09 int schachfeld[dim][dim]; 10 11 /*----------------FUNKTION, DIE ZUGZAHL DES SPRINGERS BERECHNET----*/ 12 13 int zugzahl(int x, int y, int zug) { 14 15 16 if ( x>=0 && x<dim && y>=0 && y<dim && schachfeld[x][y]==0 && zug<=4 ) { 17 18 schachfeld[x][y]=zug; 19 20 if ( zugzahl(x+1,y+2,zug+1) || 21 zugzahl(x+2,y+1,zug+1) || 22 zugzahl(x+2,y-1,zug+1) || 23 zugzahl(x+1,y-2,zug+1) || 24 zugzahl(x-1,y-2,zug+1) || 25 zugzahl(x-2,y-1,zug+1) || 26 zugzahl(x-2,y+1,zug+1) || 27 zugzahl(x-1,y+2,zug+1) ) 28 { 29 return 1; 30 } 31 32 33 } 34 35 return 0; 36 37 } 38 39 40 41 int main () { 42 43 int i, j, x, y; 44 45 printf("Bitte einen x- und y-Wert fuer das Startfeld angeben.\n"); 46 printf("Der Wert fuer x ist: \n"); 47 scanf("%d", &x); 48 printf("Der Wert fuer y ist: \n"); 49 scanf("%d", &y); 50 printf("Ergebnis aller Zuege: \n\n"); 51 52 zugzahl(x,y,0); 53 54 55 56 57 58 /*--------AUSGABE SCHACHFELD--------*/ 59 60 61 62 63 for(i=0; i <= dim; i++) { 64 65 printf("\n"); 66 67 for(j=0; j <= dim; j++) { 68 69 printf("%d", schachfeld[i][j]); 70 71 } 72 73 } 74 return 0; 75 76 } 77
Grüße
Kakashi
-
Ich hatte vergessen zu erwähnen, dass bei anderen Startwerten die Matrix natürlich anders aussieht.
MfG
Kakashi
-
kakashi83 schrieb:
1. Bei mir gibt es die Matrix nicht richtig aus (Zeile 0 ist oben; Spalten stimmen).
Dann fang doch an das Feld von hinten auszugeben.
for(i=dim-1; i >= 0; i--) { for(j=0; j < dim; j++) { // Achtung nur < nicht <=
kakashi83 schrieb:
2. Ich habe leider keine Idee wie ich prüfen kann, ob das Feld belegt ist.
Besetze alle Felder vorher mit 0. Wenn dann anderer Wert darin steht, ist das Feld besetzt.
-
Hallo Dirk,
ich versuche es mal mit den Ratschlägen. Ich hoffe es klappt.
MfG
Kakashi