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 :

Problème code source calculatrice !


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Débutant
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Débutant

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Problème code source calculatrice !
    Bonjours a tous,
    Je viens de débuter un cours de programmation C++ et étant très autodidacte j'ai penser gros pour un début (j'ai lu peu de pages)
    J'ai dériver du cours pour construire un petit programme tout ce qu'il y a de plus simple pour mémoriser le langage C++
    Ma calculatrice fonctionne bien pour l'addition et la soustraction mais arriver a la multiplication et la division j'ai un sérieux problème,
    ma calculatrice est fausse ! Je n'arrive malheureusement pas a trouver le problème de syntaxe dans mon code..
    Je vous demande si vous le voulez bien de m'expliquer ce qui ne marche pas car mon cours ne l'explique pas..

    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
    89
    90
    91
    92
    93
     
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int addition(double n1, double n2)
    {
        double resultat(0);
        resultat = n1+n2;
        return resultat;
    }
     
    int soustaction(double n1, double n2)
    {
        double resultat(0);
        resultat = n1-n2;
        return resultat;
    }
     
    int multiplication(double n1, double n2)
    {
        double resultat;
        resultat = n1*n2;
        return resultat;
    }
     
    int division(double n1, double n2)
    {
        double resultat;
        resultat = n1/n2;
        return resultat;
    }
     
    int main()
    {
        double nombre1(0), nombre2(0), nombre3(0);
        char signe;
        int menu(-1);
        cout << "Calculatrice" << endl;
        cout << "Menu" << endl;
        cout << "1- Addition" << endl;
        cout << "2- Soustraction" << endl;
        cout << "3- Multiplication" << endl;
        cout << "4- Division" << endl;
        cout << "0- Quitter" << endl;
        cin >> menu;
        switch (menu)
        {
            case 1:
     
        cout << "Entrer le premier chiffre a calculer :" << endl;
        cin >> nombre1;
        cout << "Maintenant le deuxieme :" << endl;;
        cin >> nombre2;
        nombre3 = addition(nombre1, nombre2);
        cout << "le resultat est : " << nombre3 << endl;
            break;
     
            case 2:
     
        cout << "Entrer le premier chiffre a calculer :" << endl;
        cin >> nombre1;
        cout << "Maintenant le deuxieme :" << endl;
        cin >> nombre2;
        nombre3 = soustaction(nombre1, nombre2);
        cout << "le resultat est : " << nombre3 << endl;
            break;
     
            case 3:
     
        cout << "Entrer le premier chiffre a calculer :" << endl;
        cin >> nombre1;
        cout << "Maintenant le deuxieme :" << endl;;
        cin >> nombre2;
        nombre3 = addition(nombre1, nombre2);
        cout << "le resultat est : " << nombre3 << endl;
            break;
     
            case 4:
     
        cout << "Entrer le premier chiffre a calculer :" << endl;
        cin >> nombre1;
        cout << "Maintenant le deuxieme :" << endl;;
        cin >> nombre2;
        nombre3 = addition(nombre1, nombre2);
        cout << "le resultat est : " << nombre3 << endl;
     
            break;
        }
     
        return 0;
    }

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur réseaux
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Points : 101
    Points
    101
    Par défaut
    Bonjour,
    Il y a déjà des erreurs dans le 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
    case 3:
     
        cout << "Entrer le premier chiffre a calculer :" << endl;
        cin >> nombre1;
        cout << "Maintenant le deuxieme :" << endl;;
        cin >> nombre2;
        nombre3 = addition(nombre1, nombre2);
        cout << "le resultat est : " << nombre3 << endl;
            break;
     
            case 4:
     
        cout << "Entrer le premier chiffre a calculer :" << endl;
        cin >> nombre1;
        cout << "Maintenant le deuxieme :" << endl;;
        cin >> nombre2;
        nombre3 = addition(nombre1, nombre2);
        cout << "le resultat est : " << nombre3 << endl;
     
            break;
        }
    Lorsque l'utilisateur choisit 3 ou 4, vous appelez la méthode addition, c'est donc normal que la calculatrice donne un mauvais résultat. Il faut comme bien indiqué dans le programme, appeler la méthode multiplication dans case 3 et la méthode division dans case 4. Sinon, je ne trouve aucune erreur dans le code.

    N'hésitez pas à rappeler en cas de problème!!!

    P.S : Essayez de commenter le code, vous en sortirez mieux...
    Cordialement.

    ZeRedDiamond

    I'm back after all these years !!!

    Mon blog personnel

  3. #3
    Membre averti
    Homme Profil pro
    [SciComp]
    Inscrit en
    Août 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : [SciComp]

    Informations forums :
    Inscription : Août 2013
    Messages : 134
    Points : 323
    Points
    323
    Par défaut
    Bonjour,

    Il y a aussi une maladresse dans le typage des fonctions :
    en int, alors que les opérandes sont double, et que le renvoi des fonctions est déclaré double aussi.

    Cordialement,
    xflr6

    PS: vous pourriez rajouter aussi le cas par défaut pour gérer les erreurs de saisie par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    switch(menu)
    {
    case 1 :
     [...]
    case 2 :
     [...]
    default:
     [...]
    }

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Si tu as des penchants autodidactes et que le C++ te plaît, je te conseille le livre Programmation : Principes et pratique avec C++ de Bjarne Stroustrup (l'auteur du langage C++). Les premiers chapitres sont consacrés justement à la programmation d'une calculette, un peu plus puissante que la tienne puisqu'elle lit des expressions ("1+2*3-4").

    C'est un bon sujet de programmation pour commencer, qui pourra t'accompagner quelques temps, et qui te permet aussi de t'initier à plein de sujets:
    - interaction avec l'utilisateur
    - validation des saisies de l'utilisateur
    - gestion des erreurs
    - concepts et techniques de base des compilateurs / interpréteurs

    Pour le code que je vois et qui n'est pas mal du tout, j'ai quelques suggestions au-delà de celles qui ont déjà été faites:
    - déclare moins de variables:
    est tout aussi valable que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double res(0);
    res = arg1 - arg2;
    return res;
    - déclare celles que tu es obligé d'utiliser le plus près possible de l'endroit où tu les utilises (tu verras que ça aide vraiment quand le programme s'agrandit).
    - je te conseille aussi de ne pas utiliser "using namespace std" et de préfixer plutôt les fonctions de std que tu utilises, c'est une bonne habitude à prendre dès le début, qui t'incitera à créer tes propres namespaces au fur et à mesure.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Débutant
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Débutant

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Merci a tous !
    Un grand merci pour vos conseils, et pour mes fautes énormes d’inattention ^^
    Pour ce qui es du code je viens juste de m'y mettre donc les namespaces sont ceux conseiller dans mon cours, disons que j'ai juste pris en compte les commandes de bases (cout, cin, int, double, string, les variables ect) mais je n'ai pas attaquer encore les .h ni même les namespaces, mais je tiendrais en compte vos conseils quand j'aurais fini mon cours C++, pour voir les autres alternatives et merci pour le livre je vais trouver ça pour le lire après celui que j'ai entamer.

  6. #6
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Il y a beaucoup de répétitions, ça peut se factoriser.

    Par exemple
    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
    #include <iostream>
    #include <string>
     
    double addition(double n1, double n2) { return n1+n2; }
    double soustaction(double n1, double n2) { return n1-n2; }
    double multiplication(double n1, double n2) { return n1*n2; }
    double division(double n1, double n2) { return n1/n2; }
     
    int main() {
    	double nombre1, nombre2;
    	int menu;
    	cout << "Calculatrice" << endl;
    	do {
    		std::cout << "Menu" << endl;
    		std::cout << "1- Addition" << endl;
    		std::cout << "2- Soustraction" << endl;
    		std::cout << "3- Multiplication" << endl;
    		std::cout << "4- Division" << endl;
    		std::cout << "0- Quitter" << endl;
    		std::cin >> menu;
    	} while(menu > 4 || menu < 0);
     
    	std::cout << "Entrer le premier chiffre a calculer :" << endl;
    	std::cin >> nombre1;
    	std::cout << "Maintenant le deuxieme :" << endl;;
    	std::cin >> nombre2;
     
    	switch (menu) {
    	case 1:
    		std::cout << "le resultat est : " << addition(nombre1, nombre2) << endl;
    		break;
    	case 2:
    		std::cout << "le resultat est : " << soustaction(nombre1, nombre2) << endl;
    		break;
    	case 3:
    		std::cout << "le resultat est : " << multiplication(nombre1, nombre2) << endl;
    		break;
    	case 4:
    		std::cout << "le resultat est : " << division(nombre1, nombre2) << endl;
    		break;
    	}
     
    	return 0;
    }

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Et encore, j'irai utiliser une map<operation_id_type, operation_function> pour lier les identifiants (1, 2, 3, 4) aux identifiants de fonctions, de façon à me passer complêtement du switch.
    Ca peut être une idée pour continuer le projet.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Pas con ouais.

    Le projet peut aussi être continué pour gérer les expressions du type "3 + 2 / 8", un bon moyen de voir a quoi ressemble les ASTs.

  9. #9
    Membre actif Avatar de Basile le disciple
    Homme Profil pro
    étudiant Centrale Supélec
    Inscrit en
    Avril 2013
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : étudiant Centrale Supélec

    Informations forums :
    Inscription : Avril 2013
    Messages : 147
    Points : 279
    Points
    279
    Par défaut
    Bonjour à tous,

    un bon moyen de voir a quoi ressemble les ASTs.
    En parlant d'arbres binaires, je tiens juste à dire qu'il existe un cours sur developpez.net ici qui permet de créer une calculatrice gérant les priorités(ce que tu veux ici) mais aussi les parenthèses si tu veux aller plus loin. Je l'ai d'ailleurs étudié et il est très bien fait. Certes, le langage utilisé est du pascal(sous delphi) mais le but du cours est plutôt de nous présenter la logique...

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

Discussions similaires

  1. Problème code source SQL d'un formulaire
    Par vbenjamin dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 14/08/2012, 10h37
  2. Problème code source debutant
    Par donald54470 dans le forum Débuter
    Réponses: 10
    Dernier message: 23/07/2011, 23h09
  3. Problème code source affichage du nom de l'utilisateur
    Par Voitures007 dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 21/12/2010, 15h28
  4. Problème Code Source de la page
    Par imparator_42 dans le forum VBScript
    Réponses: 11
    Dernier message: 14/04/2008, 11h33

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