[Algo - C] algo foireux ?

Fermé
Elfarouge - 5 nov. 2006 à 01:50
 Arezki1985 - 5 nov. 2006 à 15:07
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 :
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 ;
}
A voir également:

3 réponses

Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 745
5 nov. 2006 à 13:50
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 :

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)
0
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
0
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;
}
0