[Algo - C] algo foireux ?
Elfarouge
-
Arezki1985 -
Arezki1985 -
Bonjour à tous et à toutes !
J'ai un petit problème tel que j'en recontre rarement. Un programme en C que j'ai écrit ne fonctionne pas correctement !
On définit dans le code un tableau de 9*9 en variable globale, et la fonction suivante se doit de vérifier s'il s'agit d'une grille de sudoku correctement remplie. Elle retourne 1 le cas échéant, 0 sinon. Il semble néanmoins qu'elle ne remplit pas son objectif, ce que je ne comprends pas après avoir maintes fois relu le code.
Pouvez-vous m'aider ?
Merci beaucoup
la fonction :
J'ai un petit problème tel que j'en recontre rarement. Un programme en C que j'ai écrit ne fonctionne pas correctement !
On définit dans le code un tableau de 9*9 en variable globale, et la fonction suivante se doit de vérifier s'il s'agit d'une grille de sudoku correctement remplie. Elle retourne 1 le cas échéant, 0 sinon. Il semble néanmoins qu'elle ne remplit pas son objectif, ce que je ne comprends pas après avoir maintes fois relu le code.
Pouvez-vous m'aider ?
Merci beaucoup
la fonction :
int test_sudoku(void)
{
int i, j, k, l, m, val ;
int verif[9] ;
for (i = 0 ; i < 9 ; i++ )
{
for (k = 0 ; k < 9 ; k++)
verif[k] = 0 ;
for (j = 0 ; j < 9 ; j++)
{
val = sudoku[i][j] ;
if(verif[val] == 1)
return 0 ;
else
verif[val] = 1 ;
}
}
for (i = 0 ; i < 9 ; i++ )
{
for (k = 0 ; k < 9 ; k++ )
verif[k] = 0 ;
for (j = 0 ; j < 9 ; j++)
{
val = sudoku[j][i] ;
if(verif[val] == 1)
return 0 ;
else
verif[val] = 1 ;
}
}
for(i = 0 ; i < 9 ; i + 3)
{
for(j = 0 ; j < 9 ; j + 3)
{
for(k = 0 ; k < 9 ; k++)
verif[k] = 0 ;
for(l = 0 ; l < 3 ; l++)
{
for(m = 0 ; m < 3 ; m++)
{
val = sudoku[i+l][j+m] ;
if (verif[val] == 1)
return 0 ;
else if (verif[val] == 0)
verif[val] = 1 ;
}
}
}
}
return 1 ;
}
3 réponses
Slt,
Je n'ai jamais fais de C, mais que du C++. Mais il me semble qu'une fonction void ne retourne rien, d'ou ton problème.
Il faut que tu passe ta grille en paramètre :
Sinon, je sais pas si ça existe aussi en C mais essaye d'utiliser un booléen. La fonction retourne vrai su c'est une grille correcte, ou faux sinon. Ca donne :
Je n'ai jamais fais de C, mais que du C++. Mais il me semble qu'une fonction void ne retourne rien, d'ou ton problème.
Il faut que tu passe ta grille en paramètre :
int test_sudoku(tableau de sudoku à vérifier)
Sinon, je sais pas si ça existe aussi en C mais essaye d'utiliser un booléen. La fonction retourne vrai su c'est une grille correcte, ou faux sinon. Ca donne :
bool test_sudoku(tableau de sudoku à vérifier)
Slt Elfarouge,
j'ai posé le probléme à un ami qui métrise trés bien le C et il a trouvé deux fautes:
1ère faute: Il faut changer val = sudoku[i][j] - 1 dans 3endroit;
2ème faute: il faut 'j=j+3' au lieu de 'j + 3' dans les boucles for, pareil pour le i
cela devrait marché puisk on l'a essayé et sa marche
j'ai posé le probléme à un ami qui métrise trés bien le C et il a trouvé deux fautes:
1ère faute: Il faut changer val = sudoku[i][j] - 1 dans 3endroit;
2ème faute: il faut 'j=j+3' au lieu de 'j + 3' dans les boucles for, pareil pour le i
cela devrait marché puisk on l'a essayé et sa marche
Ce code marche bien : de la part de sam:
#include <stdio.h>
int sudoku[9][9] = {
{9, 8, 7, 3, 6, 1, 5, 2, 4},
{1, 5, 2, 9, 4, 8, 7, 6, 3},
{6, 3, 4, 7, 2, 5, 8, 9, 1},
{8, 6, 1, 5, 9, 2, 3, 4, 7},
{7, 2, 9, 1, 3, 4, 6, 5, 8},
{3, 4, 5, 6, 8, 7, 2, 1, 9},
{2, 9, 3, 4, 7, 6, 1, 8, 5},
{4, 1, 6, 8, 5, 3, 9, 7, 2},
{5, 7, 8, 2, 1, 9, 4, 3, 6}
};
int main (){
print_sudoku();
if(test_sudoku()==1)
printf("La solution est bonne!");
else
printf("La solution n'est PAS bonne!");
}
int test_sudoku(void)
{
int i, j, k, l, m, val ;
int verif[9] ;
for (i = 0 ; i < 9 ; i++ )
{
for (k = 0 ; k < 9 ; k++)
verif[k] = 0 ;
for (j = 0 ; j < 9 ; j++)
{
val = sudoku[i][j] - 1;
if(verif[val] == 1)
return 0 ;
else
verif[val] = 1 ;
}
}
for (i = 0 ; i < 9 ; i++ )
{
for (k = 0 ; k < 9 ; k++ )
verif[k] = 0 ;
for (j = 0 ; j < 9 ; j++)
{
val = sudoku[j][i] - 1;
if(verif[val] == 1)
return 0 ;
else
verif[val] = 1 ;
}
}
for(i = 0 ; i < 9 ; i += 3)
{
for(j = 0 ; j < 9 ; j += 3)
{
for(k = 0 ; k < 9 ; k++)
verif[k] = 0 ;
for(l = 0 ; l < 3 ; l++)
{
for(m = 0 ; m < 3 ; m++)
{
val = sudoku[i+l][j+m] - 1;
if (verif[val] == 1)
return 0 ;
else if (verif[val] == 0)
verif[val] = 1 ;
}
}
}
}
return 1 ;
}
int print_sudoku(void) {
int i, j;
for (i = 0 ; i < 9 ; i++ ){
for (j = 0 ; j < 9 ; j++){
printf("%d ",sudoku[i][j]);
}
printf("\n\n");
}
return 0;
}
#include <stdio.h>
int sudoku[9][9] = {
{9, 8, 7, 3, 6, 1, 5, 2, 4},
{1, 5, 2, 9, 4, 8, 7, 6, 3},
{6, 3, 4, 7, 2, 5, 8, 9, 1},
{8, 6, 1, 5, 9, 2, 3, 4, 7},
{7, 2, 9, 1, 3, 4, 6, 5, 8},
{3, 4, 5, 6, 8, 7, 2, 1, 9},
{2, 9, 3, 4, 7, 6, 1, 8, 5},
{4, 1, 6, 8, 5, 3, 9, 7, 2},
{5, 7, 8, 2, 1, 9, 4, 3, 6}
};
int main (){
print_sudoku();
if(test_sudoku()==1)
printf("La solution est bonne!");
else
printf("La solution n'est PAS bonne!");
}
int test_sudoku(void)
{
int i, j, k, l, m, val ;
int verif[9] ;
for (i = 0 ; i < 9 ; i++ )
{
for (k = 0 ; k < 9 ; k++)
verif[k] = 0 ;
for (j = 0 ; j < 9 ; j++)
{
val = sudoku[i][j] - 1;
if(verif[val] == 1)
return 0 ;
else
verif[val] = 1 ;
}
}
for (i = 0 ; i < 9 ; i++ )
{
for (k = 0 ; k < 9 ; k++ )
verif[k] = 0 ;
for (j = 0 ; j < 9 ; j++)
{
val = sudoku[j][i] - 1;
if(verif[val] == 1)
return 0 ;
else
verif[val] = 1 ;
}
}
for(i = 0 ; i < 9 ; i += 3)
{
for(j = 0 ; j < 9 ; j += 3)
{
for(k = 0 ; k < 9 ; k++)
verif[k] = 0 ;
for(l = 0 ; l < 3 ; l++)
{
for(m = 0 ; m < 3 ; m++)
{
val = sudoku[i+l][j+m] - 1;
if (verif[val] == 1)
return 0 ;
else if (verif[val] == 0)
verif[val] = 1 ;
}
}
}
}
return 1 ;
}
int print_sudoku(void) {
int i, j;
for (i = 0 ; i < 9 ; i++ ){
for (j = 0 ; j < 9 ; j++){
printf("%d ",sudoku[i][j]);
}
printf("\n\n");
}
return 0;
}