Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Schiffe versenken in C (http://www.informatikerboard.de/board/thread.php?threadid=2682)


Geschrieben von Lars am 11.12.2015 um 21:16:

  Schiffe versenken in C

Meine Frage:
Ich bin's mal wieder, diesmal müssen wir in C Schiffe versenken programmieren und haben dafür eine Vorgabe bekommen. Bloß das Zählen, ob alle Schiffe versenkt wurden klappt net, ich verstehe nicht wieso. Es geht bis zu einer bestimmten Zahl, aber für alle klappts nicht unglücklich .

Meine Ideen:
code:
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:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
#include <stdio.h>

void anzeigen(char feld[][10])
{
	for (int i = 0; i != 10; ++i)
{
  for (int j = 0; j != 10; ++j)
    printf("%c", feld[i][j]);
  printf("\n");
}
}

int main() 
{
  char spielfeld[10][10]  = {
  {'s','s','.','s','.','.','s','s','s','s'},
  {'.','.','.','s','.','.','.','.','.','.'},
  {'s','.','.','s','.','s','s','s','.','s'},
  {'s','.','.','.','.','.','.','.','.','s'},
  {'s','.','.','.','.','.','.','.','.','.'},
  {'s','.','.','.','.','s','.','.','.','s'},
  {'.','.','.','.','.','s','.','.','.','s'},
  {'s','s','.','.','.','.','.','.','.','s'},
  {'.','.','.','.','.','.','.','.','.','.'},
  {'.','.','.','.','.','s','s','s','s','s'}
  };
 
  int schritte = 0;
  int y=0;

  while(y!=30) 
  {  
    anzeigen(spielfeld);
    int xko = 0; 
    int yko = 0;
    printf("\nFalls du beenden willst, gib [-1] ein");
    printf("\nGib die x-Koordinate (Spalte) ein, die du beschiessen willst (1-10): ");
    scanf("%i", &xko);
    printf("\nGib die y-Koordinate (Zeile) ein, die du beschiessen willst (1-10): ");
    scanf("%i", &yko);
    if(xko==-1 || yko==-1)break;
    schritte++;

    if(spielfeld[yko-1][xko-1] == 's') 
    { 
      printf("\nGetroffen! \n");
      spielfeld[yko-1][xko-1] = 'x';
    }
    else printf("\nnicht Getroffen. \n");
	

	for (int i = 0; i != 10; ++i)
	{
	 int x=0;
 	 for (int j = 0; j != 10; ++j)
 	 if(spielfeld[i][j]=='x')x++;
 	 if(x==30)
	  {
	  anzeigen(spielfeld);
	  y=x;
	  continue;
	  }
 	}
  
       
  }
 weiter: printf("Das waren %i Runden.\n", schritte);
 return 0;
}



Geschrieben von Lars am 11.12.2015 um 21:36:

 

Sorry, ich bin dämlich, ich hab das x falsch deklariert, nun funktioniert alles. Und ich saß 1h und hab den Fehler gesucht... Forum Kloppe
code:
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:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
#include <stdio.h>

void anzeigen(char feld[][10])
{
	for (int i = 0; i != 10; ++i)
{
  for (int j = 0; j != 10; ++j)
    printf("%c", feld[i][j]);
  printf("\n");
}
}

int main() 
{
  char spielfeld[10][10]  = {
  {'s','s','.','s','.','.','s','s','s','s'},
  {'.','.','.','s','.','.','.','.','.','.'},
  {'s','.','.','s','.','s','s','s','.','s'},
  {'s','.','.','.','.','.','.','.','.','s'},
  {'s','.','.','.','.','.','.','.','.','.'},
  {'s','.','.','.','.','s','.','.','.','s'},
  {'.','.','.','.','.','s','.','.','.','s'},
  {'s','s','.','.','.','.','.','.','.','s'},
  {'.','.','.','.','.','.','.','.','.','.'},
  {'.','.','.','.','.','s','s','s','s','s'}
  };
 
  int schritte = 0;
  int y=0;

  while(y!=30) 
  {  
    anzeigen(spielfeld);
    int xko = 0; 
    int yko = 0;
    printf("\nFalls du beenden willst, gib [-1] ein");
    printf("\nGib die x-Koordinate (Spalte) ein, die du beschiessen willst (1-10): ");
    scanf("%i", &xko);
    printf("\nGib die y-Koordinate (Zeile) ein, die du beschiessen willst (1-10): ");
    scanf("%i", &yko);
    if(xko==-1 || yko==-1)break;
    schritte++;

    if(spielfeld[yko-1][xko-1] == 's') 
    { 
      printf("\nGetroffen! \n");
      spielfeld[yko-1][xko-1] = 'x';
    }
    else printf("\nnicht Getroffen. \n");
	
	int x=0;
	for (int s = 0; s != 10; ++s)
	{
 	 for (int d = 0; d != 10; ++d)
 	 if(spielfeld[s][d]=='x')x++;
 	 if(x==30)
	  {
	  anzeigen(spielfeld);
	  y=x;
	  continue;
	  }
 	}
  
       
  }


Forensoftware: Burning Board, entwickelt von WoltLab GmbH