probleme d'incrémentation
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

probleme d'incrémentation



  1. #1
    invite7f58f807

    probleme d'incrémentation


    ------

    bonsoir tout le monde
    je rencontre un probleme dans un code en C++,j'ai déclaré une fonction qui caree(a) qui calcule le caré de a, je fait les instruction:
    cout <<"le caree de "<<a++ <<"est : "<<carre(a++)<<endl;
    cout <<"le caree de "<<++a <<"est : "<<carre(++a)<<endl;
    et ça me donne
    le caree de 3 est 4
    le caree de 6 est 25
    vous pouvez m'expliquer d'ou vient ceci?

    -----

  2. #2
    Jackyzgood

    Re : probleme d'incrémentation

    Il me semble que lorsqu'on effectue une incrémentation du style :
    Code:
     i = i++;
    Le comportement n'est pas défini, c'est a dire que la variable sera incrémenté avant la fin de l'instruction, mais à quel moment précisément, on en a aucune idée. Je pense que c'est ce qu'il se passe lors de l'appel de ta fonction, car la fonction va faire une copie de la variable. Enfin je demande quand même confirmation.
    si c'est idiot mais que ca marche, c'est que ce n'est pas idiot

  3. #3
    bzh_nicolas

    Re : probleme d'incrémentation

    a++ va donner la valeur puis l'incrémenter
    ++a va incrémenter la valeur puis la donner
    Par contre je ne comprends pas trop l'affichage que tu as en résultat.
    J'aimerais bien voir le code en entier. A combien est initialisé a ?

  4. #4
    invite7f58f807

    Re : probleme d'incrémentation

    bon,wi tout a fait d'accord avec toi, mais j'ai pas compris l'affichage non plus,
    ma valeur a est initialisée à 2
    voila mon code vous pouvez l'essayer:
    #include<iostream>
    using namespace std;
    inline int carre(int a)
    {
    return (a*a);
    }

    int main()
    {
    int a(2);
    cout <<"le caree de 2 est : "<<carre(a)<<endl <<endl;
    cout <<"le caree de "<<a++ <<"est : "<<carre(a++)<<endl;
    cout <<"le caree de "<<++a <<"est : "<<carre(++a)<<endl;
    system ("PAUSE");
    return 0;

    }

  5. A voir en vidéo sur Futura
  6. #5
    invite7f58f807

    Re : probleme d'incrémentation

    bonsoir,merci pour ta réponse
    vous pouvez clarifier votre point de vue,je l'ai pas bien assimilé,en fait ce qui s'est passé ici, c'est que dans l'instruction
    cout <<"le caree de "<<a++ <<"est : "<<carre(a++)<<endl;
    carre(a++) est calculer avant , c-a-d le processus est fait de droite à gauche ,c'est pas logique,mais c'est ma seule explication

  7. #6
    Jack
    Modérateur

    Re : probleme d'incrémentation

    ce que je ne comprends pas dans ton programme, c'est qu'on retrouve 2 incrémentations de a sur la même ligne: donc la valeur dont on veut déterminer le carré ne sera pas celle dont on calculera le carré.

    Bref, au lieu de
    Code:
    cout <<"le caree de "<<a++ <<"est : "<<carre(a++)<<endl;
    il faudrait écrire
    Code:
    cout <<"le caree de "<<a <<"est : "<<carre(a++)<<endl;
    PS: il faudrait également en profiter pour rectifier l'orthographe.

    A++

  8. #7
    invite7f58f807

    Re : probleme d'incrémentation

    même avec cela
    cout <<"le caree de "<<a <<"est : "<<carre(a++)<<endl;
    ça marche pas et me donne " le caree de 3 est : 4

  9. #8
    Jack
    Modérateur

    Re : probleme d'incrémentation

    l'expression semble en effet évaluée de la droite vers la gauche, mais il ne s'agit pas à proprement parler d'une évaluation. C'est dû à l'opérateur << il me semble qui renvoie une référence vers un flux et qui doit donc commencer par analyser à partir de la droite pour injecter finalement le tout dans le flux cout.

    Du coup, afin d'éviter toute ambigüité, je séparerais l'incrémentation de la ligne d'affichage.

    A+

  10. #9
    invite7f58f807

    Re : probleme d'incrémentation

    je sais pas vraiment,mais ces résultats ne me semble pas logiques

  11. #10
    Jack
    Modérateur

    Re : probleme d'incrémentation

    Citation Envoyé par ensayste Voir le message
    je sais pas vraiment,mais ces résultats ne me semble pas logiques
    Effectivement, pour les raisons que j'ai données dans mon post #8. C'est donc dû à l'implémentation de l'opérateur <<

    A+

  12. #11
    polo974

    Re : probleme d'incrémentation

    Citation Envoyé par ensayste Voir le message
    je sais pas vraiment,mais ces résultats ne me semble pas logiques
    Logiques, si, absolument, mais pas intuitifs (du moins au début).

    Petit rappel, quand on ne sait pas exactement ce qu'il se passe (surtout ne pas le prendre mal), il vaut mieux faire i++ tout seul dans son coin.
    exemple:
    max(i++,3)
    si max est une fonction, on fait le max, puis on incrémente i, tout va bien
    mais si c'est une macro:
    #define max(a,b) (a>b?a:b)
    on voit que a est reproduit 2 fois, et donc appliqué à l'exemple, il ressort:
    (i++>3?i++;b)
    on fait le test, on incrémente i, et ensuite, selon le cas, on rend i déjà incrémenté mais on l'incrémente une 2ème fois ou bien on rend 3...

    donc méfiance avec les incrémentations...

    De plus, le code sera plus lisible, ce qui a aussi son importance ! ! !

    Pourtant, on a même le droit de faire ++i--, mais est-ce raisonnable ? ? ?
    Jusqu'ici tout va bien...

  13. #12
    invite7f58f807

    Re : probleme d'incrémentation

    merci pour toute vos réponses

Discussions similaires

  1. Réponses: 11
    Dernier message: 26/05/2011, 12h27
  2. problème d'incrémentation pic12F683
    Par invite4716c6c3 dans le forum Électronique
    Réponses: 3
    Dernier message: 22/04/2010, 16h52
  3. Un petit problème qui me pause problème lol
    Par invitef2853e5d dans le forum Mathématiques du supérieur
    Réponses: 13
    Dernier message: 31/03/2009, 15h28
  4. problème avec un lecteur mp4(le problème vient de l'ordinateur)
    Par mat_the_bad_boy dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 29/10/2007, 16h53