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

C++ Discussion :

Sudoku


Sujet :

C++

  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut Sudoku
    Voila, voila, dans le cadre d'un projet de TP en informatique, on doit faire un programme permettant de résoudre un Sudoku, seulement il y a 2 ou 3 choses que je ne comprend pas dans l'énoncé....
    pour trouver la solution en fait, on utilise une pile ...
    " Pour chaque essai, on conserve dans une structure essai:
    - la posistion de la case pour laquelle on fait l'essai
    la file des prochains symboles à essayer pour cette case. Cette file est une partie de la file des candidats initiaux.
    Chaque structure est conservée sur une pile d'essais appelée essais.

    Voila j'en viens a ma question, comment il faut faire ce type de structure en C++ ???
    Je ne vraiment pas commment il faut la faire, si quelqu'un pouvais me guider ...
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    pile : std::stack
    file : std::queue
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Salut,

    dois tu les reimplémenter ou bien peux tu utiliser la STL ?

    XXiemeciel
    XXiemeciel

  4. #4
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    j'ai fait une fonction "estDansLigne", une "estDansRegion" et une "estDansColonne", j'ai fait une fonction "candidat" qui fait appel au 3 fonctions précédentes pour déterminer quels sont les candidats possibles pour une case donnée... je stocke ce résultat sous forme de file...

    Maintenant faut que je passe a la résolution proprement dite, et j'ai pour seule aide l'énoncé que je vous ai recopié dans le premier post ...
    Citation Envoyé par xxiemeciel
    dois tu les reimplémenter ou bien peux tu utiliser la STL ?
    Comment sa ???
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    La pile et la file sont des structures toutes prêtes en C++, dans la STL.

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut Re: Sudoku
    Citation Envoyé par bucheron67
    Voila, voila, dans le cadre d'un projet de TP en informatique, on doit faire un programme permettant de résoudre un Sudoku, seulement il y a 2 ou 3 choses que je ne comprend pas dans l'énoncé....
    pour trouver la solution en fait, on utilise une pile ...
    " Pour chaque essai, on conserve dans une structure essai:
    - la posistion de la case pour laquelle on fait l'essai
    la file des prochains symboles à essayer pour cette case. Cette file est une partie de la file des candidats initiaux.
    Chaque structure est conservée sur une pile d'essais appelée essais.

    Voila j'en viens a ma question, comment il faut faire ce type de structure en C++ ???
    Je ne vraiment pas commment il faut la faire, si quelqu'un pouvais me guider ...
    T'es obligé d'y aller en force brute ? C'est plus amusant de résoudre un sudoku par connaissance, avec des règles de résolution qu'en testant bêtement toutes les solutions !

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 180
    Points : 86
    Points
    86
    Par défaut
    J ai justement commence il y a quelques jours a ecrire un programme qui resou les sudoku par regles logiques.
    J ai aussi fait un tableau a 2 index de 81 sur 9 pour tester toutes les possibilites de chaque case, si dans une case il y a que une possibilite , ou bien que une possibilite peut etre seulement dans une case cette possibilite rentre dans la case!

  8. #8
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Eh bien "Miles" sache qu'il s'agit d'un TP noté en cours et donc on a plutot intérpet a suivre les règles imposé...

    Ont doit faire une structure de pile, et faire des essais, donc voila je sais pas comment faut faire sa ...
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    C'est vraiment tordu comme énoncé et vraiment pas génial du tout. Je ne dirai rien sur ton prof... Le pire, c'est que j'ai du mal à voir ce qu'il veut que vous fassiez exactement tellement la phrase est floue !
    Je ne vois vraiment pas où une liste est indispensable dans la structure essai, une liste qui contiendrai la liste des prochaines valeurs possibles, normalement on utilise une pile pour parcourir un arbre en profondeur, l'arbre ici, je le vois comme étant l'arbre des grilles possibles, la profondeur étant le nombre de cases fixées suppélemntaires, et si on arrive à la profondeur 81, la grille est résolue...

  10. #10
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Bon ben le mieux a faire je crois, c'est de voir a la rentrée ce qu'il attendait exactement, en attendant, ben merci quand meme...
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  11. #11
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    en fait, je viens de comprendre, c'est chaud mais bon: j'ai une autre question a posé:

    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
    struct position
     
    {
     
    	int lig;
     
    	int col;
     
    };
     
    struct essai
    {
    	position pos;
    	queue<int> q;
    };
    void resoudre(int grille[9][9])
    {
    	essai e;
    	stack<essai> p;
    	queue<int> f;
    	for(int i=0;i<9;i++)
    	{
    		for(int j=0;j<9;j++)
    		{
    			int s=essai.top().q.size();
    			if(grille[i][j]==0)
    			{
    				e.pos.lig=i;
    				e.pos.col=j;
    Y a une suite évidemment, mais j'aiumerais savoir pourquoi quand je compile il me dis que le
    il me dit que "expected primary-expression before "." token

    Je comprend pas pourquoi il me met cela a chaque ligne ou j'ai plus d'un point (par ex e.pos.col)
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  12. #12
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Quand tu as d'autre question, ouvre un nouveau fil...

    Quand tu postes du code avec un problème, essaie de poster un code minimum (enlève tout ce qui n'est pas nécessaire), montrant le problème mais n'en ayant pas d'autres (ici il manque les inclusions, la fin de la fonction).

    Citation Envoyé par bucheron67
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct essai
    {
    	position pos;
    	queue<int> q;
    };
     
    int s=essai.top().q.size();
    essai est un type, pas un objet.

    Je comprend pas pourquoi il me met cela a chaque ligne ou j'ai plus d'un point (par ex e.pos.col)
    Par contre là ça me semble correct.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  13. #13
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    euh oui, je sais pour le
    int s=essai.top().q.size();
    je l'ai enlevé, c'etait juste un test ...

    mais je ne comprend pas pourquoi il me dis a chaque fois que j'ai une chose du genre
    essai.top().q.pop();
    , qu'il me dise qu'il y a une erreur a la compilation, c'est possible que sa vienne du compilateur ???

    (dsl pour le dernier post, premiere fois que je post un code... )
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  14. #14
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par bucheron67
    je ne comprend pas pourquoi il me dis a chaque fois que j'ai une chose du genre
    essai.top().q.pop();
    Si tu as un problème avec essai, c'est normal, c'est un nom de type. Si tu as un problème avec e.pos.lig=i;, c'est a priori pas normal. J'ai pris ton code et l'ai complèté comme suit:
    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
    #include <queue>
    #include <stack>
     
    using namespace std;
     
    struct position
    {
       int lig;
       int col;
    };
     
    struct essai
    {
       position pos;
       queue<int> q;
    };
     
    void resoudre(int grille[9][9])
    {
       essai e;
       stack<essai> p;
       queue<int> f;
       for(int i=0;i<9;i++)
       {
          for(int j=0;j<9;j++)
          {
             if(grille[i][j]==0)
             {
                e.pos.lig=i;
                e.pos.col=j;
             }
          }
       }
    }
    je n'ai pas de problème de compilation. Si tu en as, poste le code complet qui permet de le reproduire et indique précisément quel message d'erreur tu as.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  15. #15
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Je sais pas comment faire pour poster le source en complet sans faire qu'utiliser les balises code, et vu que le programme fait une centaine de ligne, j'aimerais ne pas les poster ici...

    En tout cas le message d'erreur est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ... primary-expression before " . " token
    Il me met cette erreur a chaque fois qu'il rencontre une ligne du type
    ou
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  16. #16
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par bucheron67
    Je sais pas comment faire pour poster le source en complet sans faire qu'utiliser les balises code
    Quel est le problème des balises codes?

    et vu que le programme fait une centaine de ligne, j'aimerais ne pas les poster ici...
    Et bien tu commences par supprimer ce qui n'a pas de rapport avec ton problème.

    Il me met cette erreur a chaque fois qu'il rencontre une ligne du type
    ou
    Sans voir les déclarations de tous ces noms, il est impossible de se prononcer. J'ai donné du code qui compile sans problème, l'as-tu essayé?
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  17. #17
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    J'ai essayé ce que tu ma proposé et sa ne marche pas , voila mon code...

    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
    #include <iostream>
    #include <string>
    #include <stack>
    #include <queue>
    #include <cassert>
     
    using namespace std;
     
    struct position
    {
    	int lig;
    	int col;
    };
    struct essai
    {
    	position pos;
    	queue<int> q;
    };
     
    void resoudre(int grille[9][9])
    {
    	essai e;
    	stack<essai> p;
    	queue<int> f;
    	for(int i=0;i<9;i++)
    	{
    		for(int j=0;j<9;j++)
    		{
    			if(grille[i][j]==0)
    			{
    				e.pos.lig=i;
    				e.pos.col=j;
    				e.q=candidats(e.pos,grille);
    				essai.push(e);
    			}
    			while(!essai.empty())
     
     			{
     
    				if (essai.top().q.size()==1)
     
    				{
    					grille[essai.pos.lig][essai.pos.col]=essai.top().q.front();
     
    					essai.pop();  
     
    				}
    			}
    		}
    	}
    }
    int main()
     
    {
     
    	int grille[9][9]={0};
    	saisie(grille);
    	afficher(grille);
    	resoudre(grille);
     
    }
    Voila la procedure qui ne marche pas (je l'ai pas encore terminée, mais sa devrait la compiler quand meme ...
    J'ai regardé, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    e.pos.lig=i;
    e.pos.col=j;
    ne pose plus de probleme à la compilation, c'est la suite qui pose probleme, les lignes d'apres ...
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  18. #18
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    mouarf, je suis vraiment un mauvais, j'appelle ma pile p et quand je l'utilise je met "sssai" pas etonnat que sa marche pas, dsl du dérangement et merci a tous...
    8)
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

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

Discussions similaires

  1. Automatiser la réponse au Sudoku
    Par Manopower dans le forum Algorithmes et structures de données
    Réponses: 204
    Dernier message: 08/12/2006, 14h31
  2. Résolution Sudoku, demande aide...
    Par Alain15 dans le forum C++
    Réponses: 25
    Dernier message: 02/01/2006, 15h29
  3. Resolution sudoku
    Par Arnaud F. dans le forum C++
    Réponses: 12
    Dernier message: 20/12/2005, 20h01
  4. Sudoku++
    Par reggae dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 29/11/2005, 16h54

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