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 :

Resolution 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 Resolution sudoku
    Voila, j'ai un petit probleme lors de l'execution de mon programme, quand je le lanceet qu'il atteint la partie "resolution" j'ai ce message qui apparait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Segmentation fault (core dumped)
    Voila la fonction incriminé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
     
    void resoudre(int grille[9][9])
    {
    	essai e;
    	stack<essai> p;
    	bool b=false;
    	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);
    				p.push(e);
    				if( !(p.top().q.empty()) )
    				{
    					grille[i][j]=p.top().q.front();
    				}
    				else
    				{
    					while(p.top().q.size()<2)
    					{
    						p.pop();
    					}
    					p.top().q.pop();
    					i=p.top().pos.lig;
    					j=p.top().pos.col;
    					grille[i][j]=p.top().q.front();
    				}
    			}
    		}
    	}
    }
    Petite explication rapide, pour chaque case du tableau ou il ya un 0, je cherche quel sont les candidats possible pour cette case, je le stocke sous forme de file, une fois les candidats trouvés, je les range du une pile d'essais dont la structure est la suivante;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct essai
    {
    	position pos;
    	queue<int> q;
    };
    tant qu'on a un candidat possible pour la case, on le met dedans (la tete de la file), si on en a pas, on depile et on prend le candidat suivant, etc, etc ... la solution est trouvée quand toute les cases du tableau sont remplies...

    Le seul probleme, c'est que je vois pas il me dis que je sors du tableau...

    quequ'un pourrait il me dire d'ou vient le probleme???
    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
    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'espere que quelqu'un peu repondre dans les plus bref delai, je susi bloqué ...
    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

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    As-tu essayé d'utiliser un debuggeur (ce serait nettement plus simple...) ?
    As-tu tenté d'attraper les éventuelles exceptions lancées par les objets que tu manipules (en particulier std::stack) ?
    As-tu systématiquement placé les tests adéquats (par exemple, vérifier la taille de tes piles avant de faire un pop ou un top) ?
    As-tu essayé d'extraire un code minimal mais complet reproduisant le problème ?

  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
    euh
    Citation Envoyé par Loulou24
    As-tu essayé d'utiliser un debuggeur (ce serait nettement plus simple...) ?
    Je fais que sa, des tests pour trouver la source du probleme ...

    Citation Envoyé par Loulou24
    As-tu tenté d'attraper les éventuelles exceptions lancées par les objets que tu manipules (en particulier std::stack) ?
    Comment sa ???

    Citation Envoyé par Loulou24
    As-tu systématiquement placé les tests adéquats (par exemple, vérifier la taille de tes piles avant de faire un pop ou un top) ?
    Je pense que oui...


    Citation Envoyé par Loulou24
    As-tu essayé d'extraire un code minimal mais complet reproduisant le problème ?
    Un code minimal, c'est quoi sa???

    Au passage, j'ai quelque peu modifié le code a partir de la boucle else:
    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
    else
    {
    	p.pop();
    	p.top().q.pop();
    	while(b)
    	{
    		if(p.top().q.size()<=1)
    	        {
    	                p.pop();
    	                grille[p.top().pos.lig][p.top().pos.col]=0;
    		}          
    		else         
    		{              
    			b=false;
    		}
    	}
    	i=p.top().pos.lig;
    	j=p.top().pos.col;
    	grille[i][j]=p.top().q.front();
    }
    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
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Esque tu a bien vérifier, par exemple a l'aide de std::cerr, les valeurs de tes itérateures? Et a tu aussi vérifier la taille de ton objet en même temp. En plus le fait d'utiliser std::cerr te permêtra d'avoir exactement lma situation qui provoque la fin du programme(il sufit de regarder ou s'est arrèter la boucle).

    Mentenant loulou24 parle d'extraire un code minimale, je croi qu'il veut dire "la plus petite portion de code avec la quel ce problèmme se produit toujours".
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  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
    On ne parle pas de tests, on parle de débuggeur. Tu prends ton programme et tu le débuggues ligne par ligne.

  7. #7
    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
    Merci JC_Master, la portion de code minimale, c'est la boucle else que j'avais posté dans mon second post ...

    Et puis pour std::cer, je ne l'ai jamais utilisé, je ne sais donc pas ou il faut l'introduire dans ma portion de code... Neanmoins je vais deja essayé en attente d'une reponse.

    Encore merci JC_Master de ton aide
    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

  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
    Citation Envoyé par Miles
    On ne parle pas de tests, on parle de débuggeur. Tu prends ton programme et tu le débuggues ligne par ligne.
    Euh non, je suis sous linux, je sais pas comment faire pour debugguer

    dsl d'etre un newbiiiiiiiiiiiii ...
    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
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Loulou24 a écrit:
    As-tu essayé d'utiliser un debuggeur (ce serait nettement plus simple...) ?

    Je fais que sa, des tests pour trouver la source du probleme ...
    Je pense que Loulou24 parle d'un vrai débuggeur, pas de la phase de débuggage en elle même. Le mieux, c'est de lancer ton programme en mode débug, puis d'executer cette portion de code pas à pas pour voir à quel moment ça plante...

    edit: Ah, si tu es sous Linux je ne peux pas t'aider, je ne connais pas de bon débuggers. Mais je suis sûr que quelqu'un ici pourra t'en indiquer un, avec lequel tu pourras executer ton programme "ligne par ligne".
    And still we will be here, standing like statues ...

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je fais que sa, des tests pour trouver la source du probleme ...
    Un debuggeur te permettra d'avoir la ligne qui gêne, la pile d'appels de fonctions, la valeur des variables à cet instant, etc. Sous Linux tu as gdb. Si tu es allergique à la ligne de commande, tu dois pouvoir trouver des front-end graphiques. Les EDI tels que KDevelop l'intègrent également bien.

    Comment sa ???
    Les conteneurs de la STL sont susceptibles de lever des exceptions en cas d'erreur. Si tu ne les rattrape pas, tu auras droit à un message standard Windows quelque soit l'exception lancée. Pour le moment tu peux simplement mettre un bloc try / catch autour de ta fonction qui plante, et voir si ça dit quelque chose.
    http://c.developpez.com/faq/cpp/?page=exceptions

    Je pense que oui...
    J'ai l'impression qu'il en manque quelques uns (des tests)

    Un code minimal, c'est quoi sa???
    Un code ne contenant que ce qu'il faut pour reproduire l'erreur. Ca permet d'une part de virer 99% de code inutile et de se concentrer sur l'erreur, mais surtout dans 90% des cas, de trouver l'erreur tout seul en extrayant le code minimal. Et occasionnellement, ça aide aussi les membres qui te répondent sur le forum.

    Esque tu a bien vérifier, par exemple a l'aide de std::cerr, les valeurs de tes itérateures? Et a tu aussi vérifier la taille de ton objet en même temp. En plus le fait d'utiliser std::cerr te permêtra d'avoir exactement lma situation qui provoque la fin du programme(il sufit de regarder ou s'est arrèter la boucle).
    std::cerr n'est qu'un flux (de sortie qui plus est), il n'y aura dedans rien de plus que ce que tu vas y écrire. Donc en l'occurence, rien permettant d'identifier une quelconque erreur.

  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
    Je ne suis pas allergique a la ligne de commande, j'ai trouvé gdb, plus qu'a trouver comment l'utiliser maintenant pour lui faire executer le programme pas a pas, en tout cas merci a vous
    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
    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 trouvé le probleme, je depilais avant de remettre la valeur de la case a 0 , alors qu'il fallat faire l'inverse 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

  13. #13
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    En fait j'ai dit std::cerr mais tu peut aussi utiliser std::cout. Sinon ce que je disait c'était de vérifier l'état des diférentes variables'itérateur). En fait je n'ai ajmais réussi a utiliser un débugguer ^^
    Heureux que tu ai trouver ton problème
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

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

Discussions similaires

  1. resolution des sudoku
    Par Razgriz dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 17/11/2006, 19h16
  2. [TP]Utilisation de la souris en haute résolution
    Par Gabi dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 08/01/2004, 18h46
  3. [VB6]Résolution d'IP
    Par Sadneth dans le forum VB 6 et antérieur
    Réponses: 37
    Dernier message: 04/01/2004, 00h03
  4. (Debutant) resolution et fps
    Par silverdelph dans le forum DirectX
    Réponses: 4
    Dernier message: 12/07/2003, 12h50
  5. [Kylix] Resolution e Kylix
    Par ulisse dans le forum EDI
    Réponses: 1
    Dernier message: 02/03/2003, 15h57

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