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 :

Calculatrice de base


Sujet :

C++

  1. #21
    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
    Pour information, je pensais les "multicharacter literals" totalement inutile, il semblerait que ce ne soit pas totalement le cas.
    En fait, switch fonctionne avec, au contraire des char*.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    switch( tag ) {
    	case 'TAG1': ...;
    	case 'TAG2': ...;
    }
    Il peut être intéressant de lire ce document.
    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

  2. #22
    Membre du Club

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2016
    Messages : 16
    Points : 65
    Points
    65
    Par défaut
    Yeah,

    En faite, j'ai appris que le type de variable char s’appuie sur ASCII c'est donc pour ça que mon programme me renvoyait quand même quelque chose de bizarre au début du genre un gros chiffre (1 + 3 = 1965977522) https://upload.wikimedia.org/wikiped...e-wide.svg.png

    Bon, tout fonctionne correctement. Voici le code,

    Main.cpp
    J'ai modifié le type de variable en double pour avoir des nombres a virgule.

    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
     
    #include <iostream>
    #include "fcalcul.h"
     
    using namespace std;
     
     
    int main()
    {
        /*Calculatrice*/
     
        double argUn (0);
        double argDeux (0);
        double resultat1 (0);
        char operateur ('+');
     
        cout << "Bienvenue sur votre calculatrice basique" << endl ;
        cout << "Que voulez-vous calculer ? : " << endl ;
        cout << "Valeur 1 = " ;
        cin >> argUn;
        cout << "Operateur = " ;
        cin >> operateur;
        cout << "Valeur 2 = " ;
        cin >> argDeux;
     
        resultat1 = fcalcul (argUn, argDeux, operateur);
     
        cout << argUn << " " << operateur << " " << argDeux << " = " << resultat1 << endl ;
     
        return 0;
    }

    fcalcul.cpp
    J'ai enlevé les ' ' autour de return argUn + argDeux mais j'ai laissé les break car dans mon cours c'est conseillé et puis je trouve cela plus propre.
    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
     
    #include <iostream>
    #include "fcalcul.h"
     
    using namespace std;
     
     
    /*Fonction Calcul*/
     
    double fcalcul (double argUn , double argDeux , char operateur)
    {
        switch (operateur)
            {
            case '+' : return argUn + argDeux;
                break;
            case '-' : return argUn - argDeux;
                break;
            case '*' : return argUn * argDeux;
                break;
            case '/' : return argUn / argDeux;
                break;
            default : cout << "Vous n'avez utilisé aucun signe de calcul, veuillez recommencer !" << endl ;
                break;
     
            }
    }
    fcalcul.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef FCALCUL_H_INCLUDED
    #define FCALCUL_H_INCLUDED
     
    double fcalcul(double argUn, double argDeux, char operateur);
     
     
    #endif // FCALCUL_H_INCLUDED

    Merci pour votre aide , je vais continuer d'optimiser tout ça.

  3. #23
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Alazban Voir le message
    j'ai appris que le type de variable char s’appuie sur ASCII
    Un char c'est, dans 99% des cas, 8 bits, devant représenter [0; 127]
    A ne pas confondre avec le signed char [-128; 127] et l'unsigned char [0; 255]
    Même si dans la majorité des cas un char sera un signed char, ce n'est pas dans la norme
    Citation Envoyé par Alazban Voir le message
    c'est donc pour ça que mon programme me renvoyait quand même quelque chose de bizarre au début du genre un gros chiffre (1 + 3 = 1965977522)
    Euh.. gni ?!
    On te dit depuis le début que ton problème vient de cette syntaxe wtf return ('argUn + argDeux = resultat1'); qui te retournera tout sauf ton résutlat (ou alors avec une probabilité de... 1/((2^32)-1 ?)

    Ton code n'est toujours pas bon
    - je peux diviser par 0
    - si l'opérateur n'est pas reconnu il n'y a pas de return
    - et donc (au moins) un warning à la compilation, un cas indéterminé et un résultat random dans ce cas

    Citation Envoyé par Alazban Voir le message
    J'ai enlevé les ' ' autour de return argUn + argDeux
    ENFIN !

    Citation Envoyé par Alazban Voir le message
    mais j'ai laissé les break car dans mon cours c'est conseillé
    Quel est ce cours qui semble à jeter en partie ? Les break sont 900% inutiles (voire plus) dans ce cas.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #24
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    break, c'est utile quand il n'y a pas de return.
    Ici, tout ce que les break vont te donner, ce sont des avertissements de compilation "unreachable code", à cause du return juste avant.

    Voici une version où les break sont utiles:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    double fcalcul (double argUn , double argDeux , char operateur)
    {
    	double ret = 0;
    	switch (operateur)
    	{
    	case '+' : ret = argUn + argDeux; break;
    	case '-' : ret = argUn - argDeux; break;
    	case '*' : ret = argUn * argDeux; break;
    	case '/' : ret = argUn / argDeux; break;
    	default : cout << "Vous n'avez utilisé aucun signe de calcul, veuillez recommencer !" << endl ; break;
    	}
    	return ret;
    }
    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.

  5. #25
    Membre du Club

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2016
    Messages : 16
    Points : 65
    Points
    65
    Par défaut
    Merci pour vos réponses, cependant je me pose maintenant la question :

    Logiquement un break (dans le switch) va stopper la lecture de la suite de la condition.??? si oui donc j'ai raison de mettre le break, je vais relire le cours sur le return pour être sur. . ( C'est pour ça que je trouve ça plus propre. Je ne sais pas si vous me suivez)
    C'est pas mal d'écrire le code comme ça medinoc je vais peut être le mettre en place.
    Même avec un return j'ai pas d’erreur "unreachable code".

    Bousk tu ne m'a jamais donné de solution si ce n'est me montrer du doigt les problèmes du codes.
    Exemple :
    Ton code n'est toujours pas bon
    - je peux diviser par 0
    - si l'opérateur n'est pas reconnu il n'y a pas de return
    - et donc (au moins) un warning à la compilation, un cas indéterminé et un résultat random dans ce cas
    même quand je dit que j'ai enlevé les ' ' .... lol tu me dit Enfin !! mais pourtant tu ne pas pas dit que je devais. Bref

    Avec mon niveau actuel je n’ai aucune carte pour changer la donne. Je pense mettre en place une boucle pour que le programme ne s’arrête pas si il y a une erreur ou si je veux continuer a calculer après un premier calcul.

    Je vais me répéter, moi la théorie ça me passe par les trous de nez, jveux du pratique y'a que comme ça que j'apprends. Biensur je suis preneur des principes, notions et autres, mais les grandes école avec leurs enseignements du ça passe ou ça casse ne fonctionne pas avec moi.

    Bien cordialement,

    Alaz

  6. #26
    Membre du Club

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2016
    Messages : 16
    Points : 65
    Points
    65
    Par défaut
    OK donc la définition du return est :
    Termine l'exécution d'une fonction et retourne le contrôle à la fonction d'appel (ou au système d'exploitation si vous transférez le contrôle à partir de la fonction main).L'exécution reprend dans la fonction d'appel au point immédiatement après l'appel.

    Donc pas besoin de break

  7. #27
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Alazban Voir le message
    Logiquement un break (dans le switch) va stopper la lecture de la suite de la condition.??? si oui donc j'ai raison de mettre le break, je vais relire le cours sur le return pour être sur. . ( C'est pour ça que je trouve ça plus propre. Je ne sais pas si vous me suivez)
    C'est pas mal d'écrire le code comme ça medinoc je vais peut être le mettre en place.
    break arrête l'exécution de la boucle/du switch en cours. Return arrête l'exécution de la fonction en cours.
    Citation Envoyé par Alazban Voir le message
    Même avec un return j'ai pas d’erreur "unreachable code".
    A partir du moment où tu n'as même pas de warning pour "not all control paths return a value", je suis pas choqué qu'un unreachable code n'apparaisse pas. Peut-être qu'un unreachable break ne fera pas sourciller le compilo dans tous les cas, franchement, j'en sais rien, et à vrai dire on s'en moque un peu dans ce cas, et au quotidien je ne vois personne écrire un break derrière un return.
    Il faudrait compiler en -wall voire -wextra (ou quelque chose comme ça) pour commencer.

    Citation Envoyé par Alazban Voir le message
    Bousk tu ne m'a jamais donné de solution si ce n'est me montrer du doigt les problèmes du codes.
    même quand je dit que j'ai enlevé les ' ' .... lol tu me dit Enfin !! mais pourtant tu ne pas pas dit que je devais. Bref
    Ha bon ? Réponse #14 que vois-je ?
    Citation Envoyé par Bousk Voir le message
    t'as fait 99% du truc, pourquoi chercher compliqué ? return argUn + argDeux; et basta
    (de moi-même en plus, j'avais oublié)
    Btw, sur ce forum on ne donne que rarement la solution toute faîte, surtout pour des trucs aussi évidents.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #28
    Membre du Club

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2016
    Messages : 16
    Points : 65
    Points
    65
    Par défaut
    Yop,

    Merci pour ton aide .

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Debutant sans bases] Calculatrice
    Par faeze dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/12/2009, 18h57
  2. [Windows]accès base de registre windows
    Par Greg01 dans le forum API standards et tierces
    Réponses: 27
    Dernier message: 05/06/2007, 15h14
  3. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39
  4. sauver une base
    Par phil_java dans le forum Administration
    Réponses: 3
    Dernier message: 07/03/2003, 17h08
  5. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16

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