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 :

programme calculatrice c++


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 51
    Points : 42
    Points
    42
    Par défaut programme calculatrice c++
    Bonjour a tous le monde, je suis novice en c++ et dans mon apprentissage dans ce fabuleux langage je me suis donner comme exercice de faire une calculatrice, mode console. Lors de la compilation j'ai des erreurs. Pourriez vous m'aider. voici mon code :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
     
        cout << "Bonjour, et Bienvenue dans la calculatrice !!" << endl << endl;
        cout << "Que voulez vous faire ?" << endl << endl;
     
                        cout << "Taper 1 pour une multiplication" << endl;
                        cout << "Taper 2 pour une addition"       << endl;
                        cout << "Taper 3 pour une soustraction"   << endl;
                        cout << "Taper 4 pour une division"       << endl;
        int choix (0);
        cin >> choix;
     
        switch(choix)
        {
            case 1 :
     
            cout << "Choisissez 2 nombres a multiplier" << endl;
            double nombresUtilisateur1(0), nombresUtilisateur2(0);
            cin >> nombresUtilisateur1;
            cin >> nombresUtilisateur2;
     
            double resultat(0);
            resultat = nombresUtilisateur1 * nombresUtilisateur2;
     
            cout << "le resultat est : " << resultat << endl;
            break;
     
            case 2 :
     
            cout << "Choisissez 2 nombres a additioner" << endl;
            double nombresUtilisateur1(0), nombresUtilisateur2(0);
            cin >> nombresUtilisateur1;
            cin >> nombresUtilisateur2;
     
            double resultat(0);
            resultat = nombresUtilisateur1 + nombresUtilisateur2;
     
            cout << "le resultat est : " << resultat << endl;
            break;
     
            case 3 :
     
            cout << "Choisissez 2 nombres a soustraire" << endl;
            double nombresUtilisateur1(0), nombresUtilisateur2(0);
            cin >> nombresUtilisateur1;
            cin >> nombresUtilisateur2;
     
            double resultat(0);
            resultat = nombresUtilisateur1 - nombresUtilisateur2;
     
            cout << "le resultat est : " << resultat << endl;
            break;
     
            case 4 :
     
            cout << "Choisissez 2 nombres a diviser" << endl;
            double nombresUtilisateur1(0), nombresUtilisateur2(0);
            cin >> nombresUtilisateur1;
            cin >> nombresUtilisateur2;
     
            double resultat(0);
            resultat = nombresUtilisateur1 / nombresUtilisateur2;
     
            cout << "le resultat est : " << resultat << endl;
            break;
     
            default;
     
        }
    voilà, merci pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Sans les messages d'erreur, difficile de t'aider. Première problème vu en regardant le code pendant 3s : Quand tu veux déclarer des variables dans un case, tu dois créer un scope pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
         case 2 :
         {
            cout << "Choisissez 2 nombres a additioner" << endl;
            double nombresUtilisateur1(0), nombresUtilisateur2(0);
            cin >> nombresUtilisateur1;
            cin >> nombresUtilisateur2;
     
            double resultat(0);
            resultat = nombresUtilisateur1 + nombresUtilisateur2;
     
            cout << "le resultat est : " << resultat << endl;
            break;
         }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 51
    Points : 42
    Points
    42
    Par défaut merci
    je vous remercie, effectivement avec les message d'erreur ces mieux.

    voici les messages d'erreur:

    ||=== calculatrice, Debug ===|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp||In function 'int main()'
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|33|error: jump to case label [-fpermissive]|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|27|error: crosses initialization of 'double resultat'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: crosses initialization of 'double nombresUtilisateur2'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: crosses initialization of 'double nombresUtilisateur1'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|36|error: redeclaration of 'double nombresUtilisateur1'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: 'double nombresUtilisateur1' previously declared here|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|36|error: redeclaration of 'double nombresUtilisateur2'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: 'double nombresUtilisateur2' previously declared here|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|40|error: redeclaration of 'double resultat'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|27|error: 'double resultat' previously declared here|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|46|error: jump to case label [-fpermissive]|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|27|error: crosses initialization of 'double resultat'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: crosses initialization of 'double nombresUtilisateur2'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: crosses initialization of 'double nombresUtilisateur1'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|49|error: redeclaration of 'double nombresUtilisateur1'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: 'double nombresUtilisateur1' previously declared here|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|49|error: redeclaration of 'double nombresUtilisateur2'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: 'double nombresUtilisateur2' previously declared here|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|53|error: redeclaration of 'double resultat'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|27|error: 'double resultat' previously declared here|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|59|error: jump to case label [-fpermissive]|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|27|error: crosses initialization of 'double resultat'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: crosses initialization of 'double nombresUtilisateur2'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: crosses initialization of 'double nombresUtilisateur1'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|62|error: redeclaration of 'double nombresUtilisateur1'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: 'double nombresUtilisateur1' previously declared here|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|62|error: redeclaration of 'double nombresUtilisateur2'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|23|error: 'double nombresUtilisateur2' previously declared here|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|66|error: redeclaration of 'double resultat'|
    C:\Users\alex\Desktop\c++\calculatrice\main.cpp|27|error: 'double resultat' previously declared here|
    ||=== Build finished: 30 errors, 0 warnings (0 minutes, 0 seconds) ===|

    par contre c'est quoi un scope ?

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Points : 86
    Points
    86
    Par défaut
    Hello,

    Le probleme est que tu redefinies des variables que tu as deja definies !
    (entre autre resultat)
    Tu devrais avoir un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     // declaration
     int resultat = 0;
     int nombreUser1 = 0;
     int nombreUser2 = 0;
     
    // code
    // ici tu mets ton code avec les switch en AFFECTANT resultat 
    // et nombreUserX et sans redéclarer une nouvelle variable a chaque fois
    Tu devrais en general respecter cette regle de code, c'est plutot bien d'avoir toutes les declarations d'une fonction (en general) avant le code proprement dit ( tu peux faire des ptites exceptions pour des variables vraiment locales a des boucles dans une fonction, mais c'est en general mieux d'avoir les variables locales a une fonction au debut de celle-ci )
    NB : exception courante : for (int i = 0; i < titi; i++) {} (ici, tu declares la variable 'i' pour tout le for et elle est detruite a la sortie de {})

    Autre probleme : le 'default' case, la synthaxe est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    default:
     // code for default case
     break;
    3eme probleme =p : ta fonction ne retourne aucun resultat, il te faut sans doute rajouter 'return resultat' a ta fonction.
    Cependant, c'est pas "tres propre". Le main retourne en general uniquement 0 (pour signaler que le process s'est deroule avec succes). Mais tu peux a la place faire un std::out du resultat et faire un return 0.

    [NB: tu devrais aussi (de facon un petit peu plus mathematique) check si par exemple, l'utilisateur cherche a diviser par zero et dans ce cas, l'alerter au lieu de creer un bug dans ton programme.]

    [NB: le scope dont parle JolyLoic, c'est justement la remarque precedente avec le 'i' : le scope est defini avec les {} et te permet de creer des variables locales (qui seront detruites lors de '}'). Dans ton cas cependant, tu devrais preferer declarer tes variables avec le switch et uniquement les affecter par la suite.]

    Bonne continuation !

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par gabrielS Voir le message
    Tu devrais en general respecter cette regle de code, c'est plutot bien d'avoir toutes les declarations d'une fonction (en general) avant le code proprement dit ( tu peux faire des ptites exceptions pour des variables vraiment locales a des boucles dans une fonction, mais c'est en general mieux d'avoir les variables locales a une fonction au debut de celle-ci )
    Je suis en grand désaccord avec cette pratique. En effet, il est plus simple de comprendre et de raisonner sur le code s'il a peu d'état. Si on déclare 3 variables a b et c au début d'une fonction, on n'aura probablement pas moyen de les initialiser avec la valeur qu'elles vont devoir prendre par la suite. On va donc avoir le code dans les états a, b, c non valides, puis a valide, mais pas encore b ou c, puis a et c valide, mais pas encore b... Ça se traduit finalement par beaucoup d'états.

    Je déclare au contraire mes variables au plus tard, et je les initialise immédiatement à leur vraie valeur, comme ça, dès qu'elle existent, elles sont valide, et le code est plus clair.

    Et ça a des petits à côté sympas, pas essentiels dans du code écrit proprement et avec des fonctions courtes, mais qui permettent d'aller dans cette direction dans du code de qualité moyenne :
    - On voit le type de la variable au moment où on l'utilise
    - On évite la variable encore déclarée mais plus utilisée
    - On évite d'initialiser avec de mauvaises valeurs (voire pour rien) (perfs)
    - En C++11, on peut alors plus aisément utiliser auto et alléger son code
    - ...

    Sinon, pour ce qui est du cas en question, plutôt que de déclarer un scope {} dans els différents case, si tu as déjà vu comment créer des fonctions, je te conseillerais de déporter dans des fonctions le code que tu mets dans tes case, et à ne garder dans ceux-ci que les appels de fonction.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Tout à fait d'accord avec JolyLoic, et c'est en accord avec la philosophie du c++: on déclare les variables lorsqu'on en a besoin, et on les initialise quand on les déclare:
    Et personnellement, je préfère l'écriture ci-dessus à la suivante:
    qui peut parfois porter à confusion.

    Une précision sur le scope. Le scope, en français c'est la portée. C'est une notion fondamentale en c++ (et dans bien d'autres langages). Tu ouvre une portée en utilisant '{' et tu la fermes avec '}'. Par exemple, lorsque tu déclares une fonction, après la définition de la fonction, tu met un '{', et à la find e la fonction tu met un '}':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ma_fonction()
    {
       // du code ici
    }
    Le '{' ouvre la porté de la fonction, et le '}' la ferme. Cela signifie que tout le code qui est entre est dans la portée de la fonction. Toute variable déclarée dans un scope (portée) existe dans ce scope, et dans les scope "enfants". Car les scopes peuvent s'imbriquer. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void ma_fonction
    { // on entre dans le scope de ma_fonction()
       int variable1 = 0;
       { // on ouvre un scope "enfant"
          varible1 = 1; // ok
          int variable2 = 0;
       } // on ferme le scope "enfant"
       variable2 = 1; // pas ok
    } // on sort du scope de ma_fonction
    la ligne variable2 = 1; ne compilera pas parce que la variable a été déclarée dans le scope "enfant", elle n'existe donc plus dans le scope précédent.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 51
    Points : 42
    Points
    42
    Par défaut
    Bonsoir a tous le monde je vous remercie a tous pour votre aide, j'ai résolu mon problème.

    Etant novice je n'ait pas encore vu les fonction ou méthode donc j'ai pu réglé mon problème avec le {} que j'avais oublié dans chaque case.

    Par contre je suis pas contre un petit exemple de mon programme avec des class.

    merci

    ps: voici mon code résolu !

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
     
        cout << "Bonjour, et Bienvenue dans la calculatrice !!" << endl << endl;
        cout << "Que voulez vous faire ?" << endl << endl;
     
                        cout << "Taper 1 pour une multiplication" << endl;
                        cout << "Taper 2 pour une addition"       << endl;
                        cout << "Taper 3 pour une soustraction"   << endl;
                        cout << "Taper 4 pour une division"       << endl;
        int choix (0);
        cin >> choix;
     
        switch(choix)
        {
            case 1 :
                {
                    cout << "Choisissez 2 nombres a multiplier" << endl;
                    double nombresUtilisateur1(0), nombresUtilisateur2(0);
                    cin >> nombresUtilisateur1;
                    cin >> nombresUtilisateur2;
     
                    double resultat(0);
                    resultat = nombresUtilisateur1 * nombresUtilisateur2;
     
                    cout << "le resultat est : " << resultat << endl;
                    break;
     
                }
     
     
            case 2 :
                {
                    cout << "Choisissez 2 nombres a additioner" << endl;
                    double nombresUtilisateur1(0), nombresUtilisateur2(0);
                    cin >> nombresUtilisateur1;
                    cin >> nombresUtilisateur2;
     
                    double resultat(0);
                    resultat = nombresUtilisateur1 + nombresUtilisateur2;
     
                    cout << "le resultat est : " << resultat << endl;
                    break;
     
                }
     
     
     
            case 3 :
                {
                    cout << "Choisissez 2 nombres a soustraire" << endl;
                    double nombresUtilisateur1(0), nombresUtilisateur2(0);
                    cin >> nombresUtilisateur1;
                    cin >> nombresUtilisateur2;
     
                    double resultat(0);
                    resultat = nombresUtilisateur1 - nombresUtilisateur2;
     
                    cout << "le resultat est : " << resultat << endl;
                    break;
     
                }
     
     
            case 4 :
                {
     
                    cout << "Choisissez 2 nombres a diviser" << endl;
                    double nombresUtilisateur1(0), nombresUtilisateur2(0);
                    cin >> nombresUtilisateur1;
                    cin >> nombresUtilisateur2;
     
                    double resultat(0);
                    resultat = nombresUtilisateur1 / nombresUtilisateur2;
     
                    cout << "le resultat est : " << resultat << endl;
                    break;
                }
     
        }
     
     
        return 0;
    }

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

Discussions similaires

  1. Programme calculatrice GTK+3 Linux.
    Par Luke spywoker dans le forum Débuter
    Réponses: 2
    Dernier message: 16/12/2014, 18h25
  2. programme calculatrice en java besoin d'aide
    Par minouch dans le forum Débuter
    Réponses: 4
    Dernier message: 04/12/2010, 09h24
  3. Erreur dans un programme de calculatrice
    Par gadalla dans le forum Delphi
    Réponses: 6
    Dernier message: 14/07/2007, 15h16
  4. [TP] Programme calculatrice : erreur de syntaxe
    Par goldeneagle1 dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 17/05/2007, 21h03
  5. Programme de calculatrice
    Par lougia dans le forum Assembleur
    Réponses: 6
    Dernier message: 14/05/2007, 20h22

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