Page 1 sur 5 123 ... DernièreDernière
Affiche les résultats de 1 à 10 sur 45

Sujet : else if, je coince!!!

  1. #1
    Grand caméléon Avatar de moniroje
    Inscrit
    novembre 2005
    Lieu
    Massy-les flots
    Distribution
    Debian-Sid & Suse -Tumbleweed
    Environnement
    KDE
    Messages
    3 714

    else if, je coince!!!

    Histoire d'animer Programmation de Alionet
    mais aussi (et surtout) m'éviter la honte chez Developpez.com,
    voilà mon pb:

    Code:
    #include<iostream>
    
    // Quel est ton indice de masse corporelle?
    
    using namespace std;
    
    int main()
    {
    string nom("chais pas");
    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); 
    int tailleAuCarre(100); 
    tailleAuCarre = taille * taille ;
    // imc = poids* 10000/tailleAuCarre;
    // par contre, imc = ça n'a pas marché quand j'ai fait: */
    // cout << imc << endl; 
     /* maître Médinoc: tu peux aussi faire la conversion sans cast, en forçant une  opération avec un double: */
    imc = poids * 10000 * 1.0 /tailleAuCarre;
    // ce qui me plaît le + de par sa simplicité
    
     if (imc < 16.5)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "Dénutrition" << endl;
     }
     else if (16.5<=imc<=18.5)
    // warning: comparisons like 'X<=Y<=Z' do not have their mathematical meaning [ -Wparentheses] tout le long des else if
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "T'es maigre!! "<< endl;
     }
     else if (18.5<=imc<=21.75)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "Svelte, mince, t'es beau !! " << endl;
     }
     else if (21.75<imc<=25)
     {
        cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
        cout << "C'est parfait! "<< endl;
     }
     else if (25<imc<27.5)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "Enrobé (ou rondelette) mais bon! attention à ta gourmandise! "<< endl;
     }
     else if (27.5<= imc <=30)
    // warning comparison of constant '30' with boolean expression is always true [ -Wbool-com...
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "t'es en surpoids; corrige!!! "<< endl;
     }
      else if (30< imc <35)
     // warning comparison of constant '35' with boolean expression is always true [ -Wbool-com...
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "là, ça devient de l'obésité; attention!! "<< endl;
     }
       else if (35< imc <40)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "Obésité sévère "<< endl;
     }
       else (40< imc)
     { // shit! pour cette ligne j'ai ERROR: expected ';' before { token et je vois pas qu'il manque un {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << " Obésité morbide ou massive"<< endl;
     }
    /* ci-dessous selon 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!
     * donc je commente 
    // cin.ignore();
    // cin.get();
    /* 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;
    }
    Alors, questions:
    surtout pourquoi ERROR parce qu'il attend un ; devant { !!! c'est bizarre, ça !! où c'est que ça manque ??
    et puis tous ces Warning énervants.
    http://www.monpcsurmesure.fr/Novembre 2014- Intel I7 4790-Kingston HyperX Fury 2x4 Go ramGygabyte GA-H97-HD3SSDNow V300 240 Go -KingstonSeagate Barracuda 500 SATA Go 6 Gb/sPure Power L8 500 wattsASUS DRW 24 F1s- Debian-Sid & Suse -Tumbleweed-Plasma5, xfce _ fibre Orange: 286Mbps down107Mbps up ping 1ms

  2. #2
    Caméléon arc-en-ciel
    Inscrit
    dcembre 2004
    Lieu
    France
    Distribution
    Leap 15.0
    Environnement
    MATE, XFCE
    Messages
    7 856
    Billets
    1
    Es-tu sûr de la validité de cette ligne :

    Code:
    else if (16.5<=imc<=18.5)
    Cela me gène ces deux omparaisons!
    Que sont 16.5 et 18.5? Des constantes déclarées?
    Et pourquoi "." au lieu de ","?
    Ça fait rrès longtemeps que je n'ai pas programmé en C, et jamais en C++.
    Ce qui reste éternellement incompréhensible dans la nature, c'est que l'on puisse la comprendre.
    Albert Einstein

    Etreignez-vous, millions d'êtres.
    Au monde entier ce baiser!
    Seid umschlungen, Millionen.
    Diesen Kuss der ganzen Welt!
    Friedrich Schiller

  3. #3
    Léon
    Inscrit
    aot 2014
    Distribution
    openSUSE 12.3 (64 bits)
    Environnement
    KDE
    Messages
    15
    Hello,

    Regardes bien ta ligne 72, tu écris else (40<imc) Bon c'est là le probleme, un else tout seul c'est else {block d'instruction}, donc il semblerait que tu aies oublié un petit if apres ton else

  4. #4
    Caméléon arc-en-ciel
    Inscrit
    dcembre 2004
    Lieu
    France
    Distribution
    Leap 15.0
    Environnement
    MATE, XFCE
    Messages
    7 856
    Billets
    1
    Citation Envoyé par jupar Voir le message
    Hello,

    Regardes bien ta ligne 72, tu écris else (40<imc) Bon c'est là le probleme, un else tout seul c'est else {block d'instruction}, donc il semblerait que tu aies oublié un petit if apres ton else
    Donc else doit toujours suivi d'un if ou d'une instruction de condition?
    Ce qui reste éternellement incompréhensible dans la nature, c'est que l'on puisse la comprendre.
    Albert Einstein

    Etreignez-vous, millions d'êtres.
    Au monde entier ce baiser!
    Seid umschlungen, Millionen.
    Diesen Kuss der ganzen Welt!
    Friedrich Schiller

  5. #5
    Grand caméléon Avatar de moniroje
    Inscrit
    novembre 2005
    Lieu
    Massy-les flots
    Distribution
    Debian-Sid & Suse -Tumbleweed
    Environnement
    KDE
    Messages
    3 714
    Hello ahlner!!!
    tu vois, je reprends au début mon apprentissage du C++; paraît-il que j'étais trop fantaisiste...
    nan, ce n'est pas comme tu dis.. c'est le résultat de imc: si son résultat tombe entre 16.5 et 18.5, hop!! ça t'annonce que t'es trop maigre...
    Hello jupar... t'as trouvé!!!
    else non suivi de if n'a pas à avoir de parenthèse avec condition; il a seulement droit à ses accolades.
    J'ai donc fait cela:
    Code:
    #include<iostream>
    
    // Quel est ton indice de masse corporelle?
    
    using namespace std;
    
    int main()
    {
    string nom("chais pas");
    int age, poids, taille; // déclare les variables: age poids en kg & taille en cm
    
     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); 
    int tailleAuCarre(100);
    tailleAuCarre = taille * taille ;
    
    imc = poids * 10000 * 1.0 /tailleAuCarre;
    
     if (imc < 16.5)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "Dénutrition" << endl;
     }
     else if (16.5<=imc<=18.5)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "T'es maigre!! "<< endl;
     }
     else if (18.5<=imc<=21.75)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "Svelte, mince, t'es beau !! " << endl;
     }
     else if (21.75<imc<=25)
     {
        cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
        cout << "C'est parfait! "<< endl;
     }
     else if (25<imc<27.5)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "Enrobé (ou rondelette) mais bon! attention à ta gourmandise! "<< endl;
     }
     else if (27.5<= imc <=30)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "t'es en surpoids; corrige!!! "<< endl;
     }
      else if (30< imc <35)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "là, ça devient de l'obésité; attention!! "<< endl;
     }
       else if (35< imc <40)
     {
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << "Obésité sévère "<< endl;
     }
      else if (40<imc)
     { 
         cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
         cout << " Obésité morbide ou massive"<< endl;
     }
     else
        {
            cout <<"chais pas quoi te dire; salut!"<< endl;
        }
    return 0;
    }
    et là, trop bien!!! ça marche!!!
    Mais heu... le résultat n'est pas conforme:
    Salut! comment tu t'appelles?
    Hélène
    Quel âge as-tu ? 55
    Ta taille en centimètres? 156
    tu pèses combien? rien que les kilos 65
    Cher(e) Hélène ton IMC est de 26.7094
    T'es maigre!!

    Process returned 0 (0x0= execution time: 32.867 s
    Press ENTER to continue
    ma tendre épouse toute contente que ce programme la trouve maigre !!!
    alors qu'il aurait fallu ce message:
    else if (25<imc<27.5)
    {
    cout <<"Cher(e) "<< nom << " ton IMC est de " <<imc<< endl;
    cout << "Enrobé (ou rondelette) mais bon! attention à ta gourmandise! "<< endl;
    http://www.monpcsurmesure.fr/Novembre 2014- Intel I7 4790-Kingston HyperX Fury 2x4 Go ramGygabyte GA-H97-HD3SSDNow V300 240 Go -KingstonSeagate Barracuda 500 SATA Go 6 Gb/sPure Power L8 500 wattsASUS DRW 24 F1s- Debian-Sid & Suse -Tumbleweed-Plasma5, xfce _ fibre Orange: 286Mbps down107Mbps up ping 1ms

  6. #6
    Caméléon bavard Avatar de elleaime
    Inscrit
    septembre 2005
    Lieu
    Colombes (92)
    Distribution
    OpenSUSE Leap 42.3 (64 bits)
    Environnement
    Gnome 3.x
    Messages
    743
    Ca ne serait pas mieux avec des "case" plutôt que tout ces else if ?

    'fin le dis ça, mais ça fais longtemps que je n'ai pas fait de C moi aussi.
    PC de bureau Opensuse 42.3 X86-64 - Gnome 3.20 - GNU/Linux 4.4.76 / Athlon X2 4200+ nVidia GeForce n9400gt
    Portable Toshiba L300DN - Dual Boot : OpenSUSE 12.3 i686 GNU/Linux 2.6.32 / Win Vista SP Home Premium / Intel Dual Core T3400 + CG intel 810
    (\__/)
    (
    O.o)....................................(\__/)
    (> <)
    Voici Bunny. Copiez-le (o.O) et attachez ce message dans votre signature pour l'aider dans sa quête pour dominer le m (\ /)nde.

  7. #7
    Caméléon arc-en-ciel
    Inscrit
    dcembre 2004
    Lieu
    France
    Distribution
    Leap 15.0
    Environnement
    MATE, XFCE
    Messages
    7 856
    Billets
    1
    moni,

    Quand j'ai étudié et pratiqué le C, des expressions telles :

    Code:
    if (25<imc<27.5)
    m'auraient gratifié de mots aimables de la part du compilateur!
    Dernière édition par ahlner; 23/07/2016 à 22h33
    Ce qui reste éternellement incompréhensible dans la nature, c'est que l'on puisse la comprendre.
    Albert Einstein

    Etreignez-vous, millions d'êtres.
    Au monde entier ce baiser!
    Seid umschlungen, Millionen.
    Diesen Kuss der ganzen Welt!
    Friedrich Schiller

  8. #8
    Grand caméléon Avatar de moniroje
    Inscrit
    novembre 2005
    Lieu
    Massy-les flots
    Distribution
    Debian-Sid & Suse -Tumbleweed
    Environnement
    KDE
    Messages
    3 714
    @elleaime
    kikoo!!!
    j'ai regardé avec case; je suppose que tu pensais à switch; j'ai regardé mon cours; ah wé, ça aurait été bien mais:
    switch ne permet de tester que l'égalité. Vous ne pouvez pas tester « Si le nombre d'enfants est supérieur à 2 » avec switch : il faut dans ce cas utiliser if.
    De plus, switch ne peut travailler qu'avec des nombres entiers (int, unsigned int, char). Il est impossible de tester des nombres décimaux (double).
    Maintenant, mon problème, c'est que ce job, il fonctionne, il ouvre la console, il demande les infos et hop! il affiche l'IMC.
    L'ennui, c'est que quelque soit cet indice (j'ai essayé pour l'obèse, le maigrichon, un beau comme moi et j'ai eu 3 indices différents
    mais à ces 3 indices, j'ai le même message: "T'es maigre!!"
    Ça cloche donc quelque part...
    Quelle prise de tête!!
    http://www.monpcsurmesure.fr/Novembre 2014- Intel I7 4790-Kingston HyperX Fury 2x4 Go ramGygabyte GA-H97-HD3SSDNow V300 240 Go -KingstonSeagate Barracuda 500 SATA Go 6 Gb/sPure Power L8 500 wattsASUS DRW 24 F1s- Debian-Sid & Suse -Tumbleweed-Plasma5, xfce _ fibre Orange: 286Mbps down107Mbps up ping 1ms

  9. #9
    Caméléon arc-en-ciel
    Inscrit
    dcembre 2004
    Lieu
    France
    Distribution
    Leap 15.0
    Environnement
    MATE, XFCE
    Messages
    7 856
    Billets
    1
    moni,

    La formule est correcte, l'ayant vérifiée pour deux valeurs quasiment extrêmes.
    Il te faut revoir tes "conditionnelles".
    Dernière édition par ahlner; 23/07/2016 à 22h54
    Ce qui reste éternellement incompréhensible dans la nature, c'est que l'on puisse la comprendre.
    Albert Einstein

    Etreignez-vous, millions d'êtres.
    Au monde entier ce baiser!
    Seid umschlungen, Millionen.
    Diesen Kuss der ganzen Welt!
    Friedrich Schiller

  10. #10
    Caméléon arc-en-ciel
    Inscrit
    dcembre 2004
    Lieu
    France
    Distribution
    Leap 15.0
    Environnement
    MATE, XFCE
    Messages
    7 856
    Billets
    1
    moni,

    Je te propose de modifier les conditions ainsi :

    Code:
    if (imc>=    ) and (imc< ......)
    Il doit y avoir un problème d'évaluation d'un Booléen dans une expression telle que :

    Code:
    if (25<imc<27.5)
    car il y a deux conditions à vérifier :

    if (25<imc) = if (imc>25)

    et

    if (imc<27.5)

    Pour que cette instruction soit exécutée, il faut que les deux conditions soit vérifiées simultanément, Booléen TRUE
    Le compilateur n'interprète pas ce genre d'expression comme un humain. Tel est mon avis.
    Je ne me rprésente pas bien comment ces expressions seront évaluées par le compilateur.

    Dernière édition par ahlner; 24/07/2016 à 21h07
    Ce qui reste éternellement incompréhensible dans la nature, c'est que l'on puisse la comprendre.
    Albert Einstein

    Etreignez-vous, millions d'êtres.
    Au monde entier ce baiser!
    Seid umschlungen, Millionen.
    Diesen Kuss der ganzen Welt!
    Friedrich Schiller

Tags pour ce sujet

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas modifier vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé