if fait l'inverse de ce qui lui est demandé
bonjour,
sachant que ces trois fonctions fonctionnent correctement (j'ai utilisé un front end de gdb (ddd)):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| bool grille::absentLigne(int ligne,int indice){
int i;
for(i=0;i<9;i++)
if(getChiffreGrille(ligne,i)==indice)
return false;
return true;
}
bool grille::absentColonne(int colonne,int indice){
int i;
for(i=0;i<9;i++)
if(getChiffreGrille(colonne,i)==indice)
return false;
return true;
}
bool grille::absentRegion(int region,int indice){
int i;
for(i=0;i<9;i++)
if(getChiffreGrille((region/3)*3+i/3,(region%3)*3+i%3==indice))
return false;
return true;
} |
le but de ces trois fonction est de donner true quand un chiffre est absent dans la ligne, la colonne et la région.
je ne comprends pas très bien pourquoi la conditionnelle suivante exécute le else quand ces trois fonction donnent true:
Code:
1 2 3 4 5 6 7 8 9 10 11
| void grille::indicer(){
int ligne,colonne,indice;
for(ligne=0;ligne<9;ligne++)
for(colonne=0;colonne<9;colonne++)
for(indice=1;indice<=9;indice++)
if(absentLigne(ligne,indice) && absentColonne(colonne,indice)&& absentRegion((ligne/3)*3+colonne/3,indice))
setPossiblesGrille(true,ligne,colonne,indice);
else
setPossiblesGrille(false,ligne,colonne,indice);
} |
les régions regroupent 9 par 9 (3x3) les cases du tableau. Le numéro de région est (ligne/3)*3+colonne/3:
Code:
1 2 3 4 5 6 7 8 9
| 000111222
000111222
000111222
333444555
333444555
333444555
666777888
666777888
666777888 |
voici la grille en question:
Code:
1 2 3 4 5 6 7 8 9
| 0 0 2 9 5 0 6 3 0
6 0 0 0 0 2 0 0 0
5 9 0 4 6 0 0 0 7
0 2 0 0 0 4 7 0 6
0 4 0 0 0 0 0 8 0
7 0 6 1 0 0 0 4 0
2 0 0 0 4 9 0 1 8
0 0 0 5 0 0 0 0 9
0 1 5 0 8 6 3 0 0 |
quelqu'un a une idée?