bonjour,

sachant que ces trois fonctions fonctionnent correctement (j'ai utilisé un front end de gdb (ddd)):


Code : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
000111222
000111222
000111222
333444555
333444555
333444555
666777888
666777888
666777888
voici la grille en question:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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?