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 :

int/int = double comment fait-on ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de moniroje
    Homme Profil pro
    retraité
    Inscrit en
    Février 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Février 2006
    Messages : 17
    Par défaut int/int = double comment fait-on ?
    Hello ... world!!
    hi hi, j'en suis là
    et hou que je suis énervé et que j'ai honte de vous montrer que déjà je coince!!!
    Voilà mon pb:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include<iostream>
     
    // Quel est ton indice de masse corporelle?
     
    using namespace std;
     
    int main()
    {
    string nom("chais pas");
    // ne pas oublier le ; !!! sinon, ERROR
    // tout ce qu'on déclare doit être utilisé sinon ERROR
    int age, poids, taille; 
     
     cout << "Salut!! comment tu t'appelles? " <<endl;
     cin >> nom; 
     cout << "Quel âge as-tu ? " ; cin >> age;
     cout << "Ta taille, en centimètres ? "; cin >> taille;
     cout << "tu pèses combien ? rien que les kilos " ; cin >> poids;
     
    // calcul de l'IMC = Poids/taille au carré
    double imc(0); // je déclare cette variable qui risque d'être avec virgule
    int tailleAuCarre(100); 
    tailleAuCarre = taille * taille ; // ça marche
    imc = poids/tailleAuCarre;
    // par contre, imc = ça ne marche pas !! ?? */
    cout << imc << endl;
     
     cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
     
    /* ci-dessous se:on le corrigé: je crois comprendre que c'est pour celui que ça
     * n'intéresse pas: */
    // cout << "Appuyez sur une touche pour continuer." << endl;
    // on appuie sur une touche, ça la tape et c'est tout... bizarre!
    // selon corrigé: zut, c'est pourquoi faire ??
    cin.ignore();
    cin.get();
     
    //  return 0 ;
    /* Cette fonction main() doit renvoyer un entier (puisque de type int) pour
     * signaler si elle a été menée à bien ou non au système d'exploitation...
     * La valeur de cet entier est 0 si ca c'est bien passé (il existe une constante
     * EXIT_SUCCESS, qui vaut elle aussi 0) */
    // return EXIT_SUCCESS; ben non, ça m'a envoyé: ERROR: 'EXIT_SUCCESS' was not declared in this scope; donc:
    return 0;
     
    }
    Ça marche presque!!! ça coince pour ma division imc = poids/tailleAuCarre; je me demande bien pourquoi!!
    ou bien ?? mieux vaut que j'apprenne à planter des asperges ???

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,

    Tes 2 variables poids et tailleAuCarre étant des int, la division est faite comme division entière (dans laquelle, par exemple 5/2 => 2).

    Il faut écrire imc = double(poids)/tailleAuCarre pour quelle se fasse dans le type double.

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour,
    Ton code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imc = poids/tailleAuCarre;
    En C++, comme dans tout langage, les instructions sont soit des structures de controle de flux (if, switch, for, while...) soit des expressions-instructions.

    Dans ton cas, il s'agit d'une expression composée.
    l'opérateur = étant de priorité inférieure à l'opérateur / (la division), l'instruction correspond en fait à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imc = ( poids / tailleAuCarre );
    Chaque sous expression est évaluée, et son type dépend essentiellement du type de ses arguments.
    poids et tailleAuCarre étant des int, la division donne un int, qui ne connait pas les virgules.
    Le langage ne passera qu'aux nombres à virgules flottantes que si tu convertis l'un des opérandes est de ce type.
    Il convient donc de procéder à une conversion qui peut s'écrire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imc = static_cast<double>(poids) / tailleAuCarre;
    Tu pourrais convertir tailleAuCarre, voire les deux, mais le langage le fera automatiquement, par les mécanismes de promotions arithmétiques

    Note que la vieille syntaxe, tirée du C, serait: imc = (double)(poids) / tailleAuCarre;. Elle est toujours possible, mais présente des inconvénients dans certains cas, sans avoir d'avantage réel.

  4. #4
    Membre averti Avatar de moniroje
    Homme Profil pro
    retraité
    Inscrit en
    Février 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Février 2006
    Messages : 17
    Par défaut
    Chouette, vous avez répondu super-vite!!! et super-bien-expliqué!!!
    et j'ai répondu lentement, sorry, parce que ... réfléchir à vos réponses
    puis essayer et chouette, ça marche!!!
    et me faire une tite note de vos remarques pour mon tuto.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Tu peux aussi faire la conversion sans cast, en forçant une opération avec un double:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    imc = poids * 1.0 /tailleAuCarre;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti Avatar de moniroje
    Homme Profil pro
    retraité
    Inscrit en
    Février 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Février 2006
    Messages : 17
    Par défaut
    j'étais venu pour marquer Résolu,
    houla, vous m'avez dévancé!!!
    et chouette, une réponse de Médinoc!!!
    voilà une corde de plus à mon arc!! merci.
    Naou, je vais mettre dans ce job des boucles; aussi faire une fonction de imc ??

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

Discussions similaires

  1. Ce forum n'est PAS destiné à vos demande de stages !!!
    Par Marc Lussac dans le forum Stages
    Réponses: 0
    Dernier message: 06/03/2007, 16h58
  2. [Axis][Débutant] Message d'erreur dans la demande de réponse.
    Par angearael dans le forum Services Web
    Réponses: 16
    Dernier message: 22/11/2006, 17h26
  3. [C#][Débutant] Qu est ce qui serait le plus judiceux pour faire ca
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/05/2006, 18h57
  4. Réponses: 3
    Dernier message: 10/08/2005, 11h44
  5. Réponses: 4
    Dernier message: 12/03/2005, 16h43

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