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 :

Petite question d'un débutant en C++


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Petite question d'un débutant en C++
    Bonjour,
    j'ai une petite question à poser à propos des calculs en C++.
    J'ai un petit code tout simple pour illustrer ça:

    #include <iostream>

    main()
    {
    int Nombre1=192;
    double Nombre2;

    Nombre2=Nombre1/100;
    std::cout<<Nombre2;

    return 0;
    }

    Quand je fais ça la console m'affiche 1 au lieu de m'afficher 1.92.
    Je pense que c'est parce que Nombre1 est un entier et Nombre2 est un double et que le compilateur a besoin de nombres de même type pour effectuer un calcul.
    Pourtant j'ai lu dans un bouquin de C++ que dans une opération , lorsque l'un
    des opérandes est un double, l'autre est automatiquement converti en double, alors je ne comprends plus, est-ce que quelqu'un sait pourquoi ici le nombre n'est pas converti???

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut


    Dans ton bouquin, ils ont raison, mais Nombre2 n'est pas un opérande...
    Seuls Nombre1 et 100 en sont, et ce sont tous deux des int.

    Essaie plutôt ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iostream>
     
    main()
    {
    int Nombre1=192;
    double Nombre2;
     
    Nombre2=Nombre1/100.0;
    std::cout<<Nombre2;
     
    return 0;
    }

  3. #3
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    en fait, ce qui se passe est tout simple, mais quand on n'est pas habitué avec les opérations implicite, ca surprend toujours au début...

    détaillons les opérations que le compilateur va générer dans l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nombre2 = Nombre1 / 100;
    la premiere opération effectuée est la division. Nombre1 étant de type entier, l'opérateur / utilisé sera celui qui prend des entiers en parametres. le résultat de la divvision est donc 1.92, et puisqu'on tronque à la valeur entiere : 1.
    puis, on a notre entier temporaire ( 1. ) qui est envoyé dans une vartiable de type double, donc le compilo effectue une conversion implicite avant l'écriture dans Nombre2.

    pour résoudre ton pb, ,il faut donc qu'un des deux parametres de la division soit de type double.
    style C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nombre2 = (double)Nombre1 / 100;
    style C++:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nombre2 = static_cast<double>(Nombre1) / 100;
    C ou C++, mais plus subtile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nombre2 = Nombre1 / 100.;
    besoin de réponses ? demande a un pote

  4. #4
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    ça marche!!
    Merci pour ton aide.
    Mais si Nombre2 n'est pas un opérande alors c'est quoi ???

  5. #5
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    Citation Envoyé par faboulous
    Mais si Nombre2 n'est pas un opérande alors c'est quoi ???
    il faut juste savoir de quelle opération on parle. Nombre2 est opérande si on veut, mais pas de la division. uniquement de l'affectation
    besoin de réponses ? demande a un pote

  6. #6
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    C'est vrai que j'ai été un peu rapide.
    Ce n'est pas un opérande pour l'opération de division. C'est un opérande pour l'opération d'affectation (=).
    Donc le résultat de la division (l'autre opérande de l'opération d'affectation) est convertis en double.

  7. #7
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    faboulous, pense au
    besoin de réponses ? demande a un pote

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

Discussions similaires

  1. Petite question sur RoR (débutant)
    Par Burnsoul dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 19/08/2011, 16h34
  2. Petites questions d'un débutant en SDL
    Par sugarcoma dans le forum SDL
    Réponses: 6
    Dernier message: 13/01/2009, 12h07
  3. petite question d'un débutant
    Par isoman dans le forum Outils
    Réponses: 2
    Dernier message: 12/06/2008, 16h19
  4. Petites questions de débutant
    Par mickael.be dans le forum Débuter
    Réponses: 15
    Dernier message: 28/12/2005, 17h06
  5. petite question d'un curieux, débutant en C ...
    Par TutuXoZaure dans le forum C
    Réponses: 10
    Dernier message: 14/12/2005, 01h46

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