IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

grille de sudoku


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 401
    Billets dans le blog
    16
    Par défaut grille de sudoku
    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();
    }
    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();
    }
    quelqu'un aurait-il une idée?

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Aucun chiffre n'est mis en ligne 0 car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(absentLigne(ligne,chiffre)&&absentColonne(colonne,chiffre)
    				&&absentRegion(region,ligne))
    l'appel d'absentRegion() ne reçoit pas les bons paramètres.

  3. #3
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 401
    Billets dans le blog
    16
    Par défaut
    merci Dalfab, je n'avait pas vu cette étourderie. il fallait remplacer "ligne" par "chiffre" dans l'appel à la méthode "absentRegion"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    absentRegion(region,chiffre)
    maintenant ça marche!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment résoudre une grille de Sudoku ?
    Par tarik_12 dans le forum Pascal
    Réponses: 1
    Dernier message: 25/04/2007, 20h31
  2. Résoudre grille de Sudoku
    Par Dimitri_87 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 29/08/2006, 11h43
  3. [VB6]Afficher une grille de Sudoku
    Par epaminondas dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 07/03/2006, 17h36
  4. Dessiner un grille de sudoku
    Par etranger dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 17/02/2006, 09h24
  5. générer grille de sudoku sans disjoncteur
    Par javatwister dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/12/2005, 16h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo