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 :

Je ne comprend pas le résultat du programme


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Points : 47
    Points
    47
    Par défaut Je ne comprend pas le résultat du programme
    Bonjour à tous,
    voilà la source de mon exercice, mais je comprend pas le résultat.
    Pourquoi le terminal renvoi
    a et b 0 ou 0
    a et c 1 ou 1
    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
    #include<iostream>
     
    using namespace std;
    class point //Classe
    {
        int x,y;//déclaration des variables de la classe
        public: point(int abs =0,int ord = 2){x=abs;y=ord;}//instruction, initialisation de point de coordonnée x=0 y=2.
        bool coincide(point *);//fonction membre coincide
    };
    bool point::coincide(point *adapt)//référence
    {
        return((adapt->x==x)&&(adapt->y==y)) ;   //si adapt->x est égale au x  de la classe et adapt->y à celui de y, le bool returne 1 sinon 0
    }
     
     
     
     int main(int argc,char *argv[])//programme principal
    {
        point a,b(1),c(0,2);//initialisation des points a, b, c. ceci grace à l'appel de la classe point
        cout<<"a et b "<<a.coincide(&b)<<" ou "<<b.coincide(&a)<<"\n";
        cout<<"a et c "<<a.coincide(&c)<<" ou "<<c.coincide(&a)<<"\n";
     
    }
    1 quand les deux point coïncide, 0 lorsque se n'est pas le cas d'après la déclaration de la fonction booléenne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool point::coincide(point *adapt)
    Je vous remercie des éclaircissements que vous pourrez m'apporter

  2. #2
    Membre éprouvé
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Points : 1 081
    Points
    1 081
    Par défaut
    Je ne vois pas le soucis, si tu décomposes ça fait quoi ?

    A(0; 2) // valeurs par défaut du constructeur
    B(1; 2) // y = 2 par défaut
    C(0; 2)

    A == B ? (0; 2) == (1; 2) ? Non, on renvoie 0 soit false.
    A == C ? (0; 2) == (0; 2) ? Oui, on renvoie 1 ou vrai.
    Si vous ne savez toujours pas ce qu’est la récursivité, relisez cette phrase.

    Mon blog sur la programmation et l'informatique !

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Tu ne devrais déjà pas passer ton point par pointeur à ta fonction coïncide, mais par référence constante...

    Cela te permettrait de garder un code beaucoup plus facile à lire, une référence s'utilisant exactement de la même manière qu'un objet simple.

    Le code (non corrigé pour le reste) ressemblerait alors à
    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
    #include<iostream>
     
    using namespace std;
    class point //Classe
    {
        int x,y;//déclaration des variables de la classe
        public: point(int abs =0,int ord = 2){x=abs;y=ord;}//instruction, initialisation de point de coordonnée x=0 y=2.
        bool coincide(point const & );//fonction membre coincide
    };
    bool point::coincide(point const &adapt)//référence
    {
        return((adapt.x==x)&&(adapt.y==y)) ;   //si adapt.x est égale au x  de la classe et adapt.y à celui de y, le bool returne 1 sinon 0
    }
     
     
     
     int main(int argc,char *argv[])//programme principal
    {
        point a,b(1),c(0,2);//initialisation des points a, b, c. ceci grace à l'appel de la classe point
        cout<<"a et b "<<a.coincide(b)<<" ou "<<b.coincide(a)<<"\n";
        cout<<"a et c "<<a.coincide(c)<<" ou "<<c.coincide(a)<<"\n";
     
    }
    Tu ne trouves pas cela mieux

    Ceci dit:

    Tu fournis des valeurs par défaut à ton constructeur de point...

    Ces valeurs sont:
    1. 0 pour x
    2. 2 pour y
    Quand tu déclares ta variable a sans passer de paramètres, ce sont donc ces valeurs qui seront utilisées, si bien que a.x vaut 0 et a.y vaut 2.

    La coïncidence (mais en est-ce vraiment une ) fait que, quand tu déclares la variable c, ce sont justement ces valeurs qui sont données aux constructeurs, si bien que c.x vaut 0 et c.y vaut... 2.

    Comme a.x est égal à c.x (rappelons que tous les deux valent 0 ET que a.y est égal à c.x (rappelons que tous les deux valent 2 ), il est normal que tu obtiennes un résultat vrai lorsque tu invoques a.coincide(c), tout comme il est normal que tu obtiennes un résultat vrai quand tu invoques c.coincide(a).

    Une dernière remarque au passage concernant le commentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //si adapt.x est égale au x  de la classe et adapt.y à celui de y, le bool returne 1 sinon 0
    Un booléen ne vaut pas 0 ou 1.. mais false ou true.

    Simplement, il se fait que le passage dans un flux (comme std::cout) considère par défaut le fait de les afficher sous les formes de 0 et de 1

    Tu pourrais d'ailleurs formater la sortie de manière à obtenir quelque chose ressemblant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a et b false ou false
    a et c true ou true
    en modifiant les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        cout<<"a et b "<<a.coincide(b)<<" ou "<<b.coincide(a)<<"\n";
        cout<<"a et c "<<a.coincide(c)<<" ou "<<c.coincide(a)<<"\n";
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        cout<<"a et b "<<boolalpha<<a.coincide(b)<<" ou "<<boolalpha<<b.coincide(a)<<"\n";
        cout<<"a et c "<<boolalpha<<a.coincide(c)<<" ou "<<boolalpha<<c.coincide(a)<<"\n";
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Alors là j'comprends pas le résultat de cette requête.
    Par mouche dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/02/2008, 10h14
  2. Réponses: 6
    Dernier message: 12/01/2008, 20h56
  3. Réponses: 3
    Dernier message: 13/06/2007, 17h47
  4. Réponses: 2
    Dernier message: 12/01/2007, 01h27
  5. Je ne comprend pas le code source de ce programme
    Par elmodeno dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/10/2006, 12h16

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