Bonjour je me suis lancé le défis de programmer un sudoku 9*9 pour m'entrainer. Le soucis c'est que je rencontre un problème sur lequel je bloque depuis maintenant quelques jours.
Voici le code, composé de plusieurs fonction que j'utilise entre elles :
//Affiche la grille par défaut
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
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 int print_grid(){ for(int j = 0; j < 9; j++){ for(int i = 0; i < 9; i++){ // tab[abscisses][ordonnées] tab[i][j] = '.'; tab[0][9] = '2'; tab[1][9] = '6'; tab[7][1] = '7'; tab[6][1] = '1'; tab[2][2] = '3'; tab[3][2] = '1'; tab[5][2] = '6'; tab[1][3] = '6'; tab[4][3] = '5'; tab[6][3] = '8'; tab[8][3] = '3'; tab[2][4] = '9'; tab[3][4] = '2'; tab[4][4] = '6'; tab[5][4] = '1'; tab[6][4] = '7'; tab[0][5] = '5'; tab[2][5] = '4'; tab[4][5] = '8'; tab[7][5] = '6'; tab[3][6] = '8'; tab[5][6] = '4'; tab[6][6] = '3'; tab[1][7] = '4'; tab[2][7] = '8'; tab[7][8] = '4'; tab[6][8] = '9'; printf("%c ", tab[i][j]); } printf("\n"); // } }
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
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 //Vérifie si la le chiffre peut être placé ou pas. void check_valid (int x, int y, char n){ if(y>9 || x > 9){ printf("erreur x=%d et y=%d",x,y); exit(1); } if(y < 0 || x < 0){ printf("erreur"); exit(1); } //Verification for(int i = 0; i < 9; i++){ for(int j = 0; j < 9; j++){ if(tab[x][y]!='.'){ printf("blocked.\n");//Provisoire test = 0; exit(0); return 0; }else { //Si valide on print directement dans le nouveau tab tab[x][y] = n; Drawnew_grid(x,y,n); test = 1; return 1; } } } printf("%d",test); }
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
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 //Affiche la grille actualisé avec les coordonnées entrées par l'utilisateur int Drawnew_grid(int x, int y, char n){ for(int j = 0; j < 9; j++){ for(int i = 0; i < 9; i++){ // tab[abscisses][ordonnées] tab[i][j] = '.'; tab[0][9] = '2'; tab[1][9] = '6'; tab[7][1] = '7'; tab[6][1] = '1'; tab[2][2] = '3'; tab[3][2] = '1'; tab[5][2] = '6'; tab[1][3] = '6'; tab[4][3] = '5'; tab[6][3] = '8'; tab[8][3] = '3'; tab[2][4] = '9'; tab[3][4] = '2'; tab[4][4] = '6'; tab[5][4] = '1'; tab[6][4] = '7'; tab[0][5] = '5'; tab[2][5] = '4'; tab[4][5] = '8'; tab[7][5] = '6'; tab[3][6] = '8'; tab[5][6] = '4'; tab[6][6] = '3'; tab[1][7] = '4'; tab[2][7] = '8'; tab[7][8] = '4'; tab[6][8] = '9'; tab[x][y] = n; printf("%c ", tab[i][j]); } printf("\n"); } }
//Le main
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <stdio.h> #include <stdlib.h> char tab[9][9]; void check_valid (int x, int y, char n); int print_grid(); int Drawnew_grid(int x, int y, char n); int empty = 54; int test = 0; int main(int argc, char *argv){ char c = '1'; int x = 0, y = 0; print_grid(); //On test pour 10 tentatives for(int i = 0; i < 10; i++){ printf("\nEntrez une valeur x : "); scanf("%d",&x); printf("Entrez une valeur y : "); scanf("%d",&y); check_valid(x,y,c); } printf("%d", test); return 0; }
Le soucis est que lorsque je rentre nombre, à l'étape suivante celui ci n'est plus à sa position mais à la nouvelle position que je lui ai assigné. Les valeurs X et Y du main sont écrasées lorsque je rentre une nouvelle valeur à ces 2 variables.
Comment faire en sorte que la position du nombre initialement choisie lors de la première étape soit sauvegarder sur la grille ?? En d'autre terme comment faire pour que x et y ne soient pas écrasés par les nouvelles valeurs ? Soyez indulgent, je code en C depuis quelques semaines.
Partager