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

GCC Discussion :

if fait l'inverse de ce qui lui est demandé


Sujet :

GCC

  1. #1
    Membre confirmé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    361
    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 : 361
    Points : 452
    Points
    452
    Billets dans le blog
    15
    Par défaut if fait l'inverse de ce qui lui est demandé
    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?

  2. #2
    Membre confirmé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    361
    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 : 361
    Points : 452
    Points
    452
    Billets dans le blog
    15
    Par défaut
    laissez tomber, j'ai vu où je me suis planté:j'ai fait:
    if(getChiffreGrille((region/3)*3+i/3,(region%3)*3+i%3==indice))
    return false;
    return true;
    au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(getChiffreGrille((region/3)*3+i/3,(region%3)*3+i%3)==indice)
    			return false;
    	return true;

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/01/2013, 23h12
  2. Réponses: 2
    Dernier message: 03/11/2011, 12h52
  3. un select case qui ne fait pas tout ce qu'on lui demande
    Par will Igetit dans le forum Excel
    Réponses: 1
    Dernier message: 17/12/2008, 21h18
  4. [Bug ?] intval et test d'égalité fait ce qui lui plait.
    Par titoumimi dans le forum Langage
    Réponses: 8
    Dernier message: 22/12/2006, 10h17
  5. Réponses: 2
    Dernier message: 26/07/2006, 14h40

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