bonjour,
je ne comprend pas pourquoi les cases de la ligne zéro de la grille restent à 0
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 class grille{ private: lieu tabIndices[9][9]; public: grille(); void zero(); void generer(); bool absentLigne(int ligne,int ch); bool absentColonne(int colonne,int ch); bool absentRegion(int region,int ch); bool resteCaseVide(); void afficher(); }; class lieu{ private: std::vector<int> indices; int chiffre; public: int getChiffre(); void setChiffre(int i); void supIndices(); };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int main(){ grille G; srand(time((time_t*)0)%255); G.afficher(); }quelqu'un aurait-il une idée?
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 grille::grille(){ generer(); } void grille::generer(){ int chiffre,ligne,colonne,region; zero(); while(resteCaseVide()){ for(ligne=0;ligne<9;ligne++) for(colonne=0;colonne<9;colonne++){ region=(ligne/3)*3+colonne/3;//région de 9 cases où se trouve ligne //et colonne chiffre=rand()%9+1;//aléatoire 1...9 if(absentLigne(ligne,chiffre)&&absentColonne(colonne,chiffre) &&absentRegion(region,ligne)) tabIndices[ligne][colonne].setChiffre(chiffre); } } } void grille::afficher(){ for(int i(0);i<9;i++){ for(int j(0);j<9;j++) cout<<tabIndices[i][j].getChiffre()<<" "; cout<<endl; } } bool grille::resteCaseVide(){ for(int ligne(0);ligne<9;ligne++) for(int colonne(0);colonne<9;colonne++) if(tabIndices[ligne][colonne].getChiffre()==0) return true; return false; } void grille::zero(){ for(int ligne(0);ligne<9;ligne++) for(int colonne(0);colonne<9;colonne++){ tabIndices[ligne][colonne].supIndices(); tabIndices[ligne][colonne].setChiffre(0); } } bool grille::absentLigne(int ligne,int chiffre){ for(int i(0);i<9;i++) if(tabIndices[ligne][i].getChiffre()==chiffre) return false; return true; } bool grille::absentColonne(int colonne,int chiffre){ for(int i(0);i<9;i++) if(tabIndices[i][colonne].getChiffre()==chiffre) return false; return true; } bool grille::absentRegion(int region,int chiffre){ for(int i(0);i<9;i++) if(tabIndices[(region/3)*3+i/3][(region%3)*3+i%3].getChiffre()==chiffre) //c'est la i ème case de la région qui est testée si elle est égale à chiffre return false; return true; } int lieu::getChiffre(){ return chiffre; } void lieu::setChiffre(int i){ chiffre=i; } void lieu::supIndices(){ indices.clear(); }
Partager