Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calculette

Un premier programme original :P (Et une question )

Anonyme
    26 novembre 2005 à 13:01:57

    Je vais paraître un peu "en manque d'imagination" mais pour mon premier programme j'ai choisi une... Calculette! :p
    C'est un code assez simple pour essayer de me rappeler de la syntaxe du C++ sans copier coller des cours.
    Et pour me rappeler des fonctions.

    Le voici le voila :

    #include <cstdlib>
    #include <iostream>

    using namespace std;
    double a = 0;
    double b = 0;
    double c = 0;
    int choix = 0;
    double somme(double a, double b);
    double soust(double a, double b);
    double multi(double a, double b);
    double divis(double a, double b);

    int main(int argc, char *argv[])
    {
        cout << "Calculette de test Par Lerat"<< endl;
        cout << "\nTapez 1 pour une addition, 2 pour une soustraction 3 pour une multiplication et 4 pour une division."<< endl;
        cout << ">> ";
        cin >> choix;
        system("CLS");
        cout << "Calculette de test Par Lerat"<< endl;
        cout << "\nEntrez le premier nombre." << endl;
        cout << ">> ";
        cin >> a;
        system("CLS");
        cout << "Calculette de test Par Lerat"<< endl;
        cout << "\nEntrez le deuxieme nombre." << endl;
        cout << ">> ";
        cin >> b;
        system("CLS");
        cout << "Calculette de test Par Lerat"<< endl;
        if (choix == 1)
        {
                  somme(a, b);
                  cout << "\n" << a << " + " << b << " = " << c << endl;
        }
        else if (choix == 2)
        {
             soust(a, b);
             cout << "\n" << a << " - " << b << " = " << c << endl;
        }
       
        else if (choix == 3)
        {
             multi(a, b);
             cout << "\n" << a << " * " << b << " = " << c << endl;
        }
       
        else
        {
            divis(a, b);
            cout << "\n" << a << " / " << b << " = " << c << endl;
        }
        cout << "\n";
        system("PAUSE");
        return EXIT_SUCCESS;
    }

    double somme(double a, double b)
    {
        c=a+b;
        return c;
    }

    double soust(double a, double b)
    {
        c=a-b;
        return c;
    }

    double multi(double a, double b)
    {
        c=a*b;
        return c;
    }

    double divis(double a, double b)
    {
        c=a/b;
        return c;
    }


    Je sais que j'aurais pu me passer des fonctions mais c'est un entrainement.
    Et sur ce je pose une question comment faire pour qu'au lieu de taper entrée à la fin du choix de l'opération j'ai juste à appuyer sur la touche ?
    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2005 à 13:09:43

      Bah tu saisis des doubles, donc c'est impossible, le programme peut pas savoir quand l'utilisateur a fini sa saisie. Enfin j'ai peut-etre mal compris ta question.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        26 novembre 2005 à 13:16:44

        C'est juste pour le choix de l'opération (+-*/)
        • Partager sur Facebook
        • Partager sur Twitter
          26 novembre 2005 à 13:17:14

          Pour les opérations, pourquoi ne pas proposer de rentrer :
          + - * /
          au lieu de 1 2 3 4 ?

          Tu ne devrais pas utiliser system("CLS"); : ce n'est pas très utile et ce n'est pas portable : ton programme ne fonctionnera pas sous linux par exemple.
          • Partager sur Facebook
          • Partager sur Twitter
            26 novembre 2005 à 13:20:14

            Avec un peu de logique (et en programmant en C aussi :p) tu peux faire :

            double op1,op2;/* les opérandes */
            char opcode; /* l'opérateur */
            printf("Saisissez votre opération : ");
            scanf("%lf%c%lf",&op1,&opcode,&op2);
            switch(opcode)
            {
            ....
            }

            Je ne sais pas si cela marche avec cin (à essayer :) )
            • Partager sur Facebook
            • Partager sur Twitter
              26 novembre 2005 à 13:27:04

              Avec cin ça risque d'être un peu plus compliqué, j'ai pas souvenir qu'on puisse attribué une valeur à plusieurs variable avec la même entrée clavier.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                26 novembre 2005 à 13:58:21

                cin >> a;
                a=b=c;

                ^^
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  26 novembre 2005 à 14:34:54

                  Je crois qu'il pensait plutôt à

                  cin >> op1 >> opcode >> op2;

                  pour être équivalent au

                  scanf("%lf%c%lf",&op1,&opcode,&op2);
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 novembre 2005 à 14:49:15

                    Bigloo a raison , c'est effectivement à ca que je pensais mais c'est impossible car
                    cin>>a>>b>>c
                    équivaut à
                    cin>>a;
                    cin>>b;
                    cin>>c;

                    Soit 3 appels claviers différents donc vive scanf !! ( mais on peut le faire ac la libstdc++ je pense avec des moyens détournés)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 novembre 2005 à 15:21:03

                      tu peux surtout écrire un scanf dans du code C++, ce qui reste le plus simple hein.

                      Pour ton histoire de cin, j'ai pas compris pourquoi tu explication montrait que c'était pas possible.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 novembre 2005 à 15:56:19

                        Lorsque tu frappe au clavier, elle ne sont inscrit que dans le "fichier stdin" qu'une fois validé par la touche entrée.
                        Or j'ai montré que
                        cin>>a>>b>>c
                        revenait à 3 cin donc 3 saisies distinctes au clavier et donc il aurait fallu appuyer 3 fois sur la touche entrée, alors que scanf prélève une fois dans le fichier stdin (car scanf = fscanf(stdin, ) et après seulement applique le format.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 novembre 2005 à 16:13:38

                          D'accord, là j'ai compris.

                          Merci :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 novembre 2005 à 16:57:39

                            autrement tu eput faire une version pour l'addtion une version pour la soustraction etc...
                            mais c'ets déjà plus long :(

                            By Kitsune :ninja:
                            • Partager sur Facebook
                            • Partager sur Twitter
                              26 novembre 2005 à 17:04:52

                              si tu fait cin>>a>>b>>c;

                              apres tu a que a taper 1 + 3 (enter)

                              et il donnera a=1 b='+' et c=3

                              Sinon meme si tu a cin>>a;
                              cin>>b; cin>>c;
                              cela revien au meme

                              Si tu separe tes entre au clavie par espace, il considere que l'assiqnation est termine
                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 novembre 2005 à 19:14:48

                                C'est vrai, mais c'est plus pratique de pas avoir à mettre d'espace et pis la lib standard C, c'est plus pratique, tu sais ce qu'il se passe parce que la lib stdc++ c'est vraiment dégeulasse (je parle du code)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 novembre 2005 à 19:55:12

                                  Dans le même style, tu peux définire un tableau, ou associer de tête :

                                  1->+
                                  2->-

                                  ...

                                  Tu récupères la valeures rentrée au tableau dans un char, et tu test ton char ;)

                                  Et sinon, tu peux aussi faire ça avec des #DEFINE pour un code plus clair (mais Rz0 aime pas ;) ), et je crois que c'est un peu tôt ;)

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    27 novembre 2005 à 17:41:29

                                    Je l'ai refait du début en ajoutant quelques fonction (une :p )

                                    Kalkoulaite!
                                    (Windows Only)

                                    Vous voulez son code? (J'ai encore un problème...)

                                    #include <cstdlib>
                                    #include <iostream>

                                    using namespace std;

                                    int choix = 0;

                                    long double a = 0;
                                    long int a2 = 0;
                                    long double b = 0;
                                    long int b2 = 0;
                                    long double c = 0;

                                    long int q = 0;
                                    long int r = 0;

                                    void op_somme(long double a, long double b);
                                    void op_soust(long double a, long double b);
                                    void op_multi(long double a, long double b);
                                    void op_divis(long double a, long double b);

                                    void af_header(void);
                                    void af_choix(void);

                                    int main(int argc, char *argv[])
                                    {
                                            system("COLOR 02");
                                            system("TITLE Kalkoulaite");
                                            et_debut:system("CLS");
                                            af_header();
                                            af_choix();
                                            cout << "\nFaites votre choix" << endl;
                                            cout << ">> ";
                                            cin >> choix;
                                            system("CLS");
                                            af_header();
                                            cout << "\nEntrez le premier nombre." << endl;
                                            cout << ">> ";
                                            cin >> a;
                                            et_if0:cout << "\nEntrez le deuxieme nombre." << endl;
                                            cout << ">> ";
                                            cin >> b;
                                           
                                            if (choix == 1)
                                            {
                                                    op_somme(a, b);
                                            }
                                           
                                            if (choix == 2)
                                            {
                                                    op_soust(a, b);
                                            }
                                           
                                            if (choix == 3)
                                            {
                                                    op_multi(a, b);
                                            }
                                           
                                            if (choix == 4)
                                            {
                                                    if (b != 0)
                                                    {
                                                            op_divis(a, b);
                                                    }
                                                   
                                                    else
                                                    {
                                                            cout << "Vous ne pouvez pas diviser par 0" << endl;
                                                            goto et_if0;
                                                    }
                                            }
                                           
                                            getchar();
                                            cout << "Appuyez sur entree pour recommencer." << endl;
                                            getchar();
                                            goto et_debut;
                                            return 0;
                                    }

                                    void op_somme(long double a, long double b)
                                    {
                                             system("CLS");
                                             af_header();
                                             c=a+b;
                                             cout << a << " + " << b << " = " << c << endl;
                                    }

                                    void op_soust(long double a, long double b)
                                    {
                                            system("CLS");
                                            af_header();
                                            c=a-b;
                                            cout << a << " - " << b << " = " << c << endl;
                                    }

                                    void op_multi(long double a, long double b)
                                    {
                                            system("CLS");
                                            af_header();
                                            c=a*b;
                                            cout << a << " * " << b << " = " << c << endl;
                                    }

                                    void op_divis(long double a, long double b)
                                    {
                                            c=a/b;
                                            a2 = a;
                                            b2 = b;
                                            q=a2/b2;
                                            r=a2%b2;
                                            if (r != 0 & r < q)
                                            {
                                                    system("CLS");
                                                    af_header();
                                                    cout << "Division normale :" << endl;
                                                    cout << a << " / " << b << " = " << c << endl;
                                                    cout << "Division euclidienne :" << endl;
                                                    cout << a << " / " << b << " = " << q << " reste " << r << endl;
                                            }
                                            else
                                            {
                                                    system("CLS");
                                                    af_header();
                                                    cout << a << " / " << b << " = " << c << endl;
                                            }
                                           
                                    }

                                    void af_header(void)
                                    {
                                            cout << "-------------------------------------" << endl;
                                            cout << "|                                   |" << endl;
                                            cout << "|       Kalkoulaite par Lerat       |" << endl;
                                            cout << "|                                   |" << endl;
                                            cout << "-------------------------------------" << endl;
                                    }

                                    void af_choix(void)
                                    {
                                            cout << "-------------------------------------" << endl;
                                            cout << "|                                   |" << endl;
                                            cout << "|      Tapez 1 pour additioner      |" << endl;
                                            cout << "|      Tapez 2 pour soustraire      |" << endl;
                                            cout << "|      Tapez 3 pour multiplier      |" << endl;
                                            cout << "|       Tapez 4 pour  diviser       |" << endl;
                                            cout << "|                                   |" << endl;
                                            cout << "-------------------------------------" << endl;
                                    }


                                    En fait le problème c'est quand on tape une virgule au lieu d'un point et c'est très... bizarre :p
                                    Essayez vous verrez que ça fait une boucle infinie des fois en répétant le cout qui signale gentiment que l'on ne peut pas diviser par zéro
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      27 novembre 2005 à 17:52:27

                                      C'est bien, sauf les globales.

                                      Et le fait que ça ressemble plus à du BASIC qu'a du C vu la forme du programme ^^
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        27 novembre 2005 à 18:00:18

                                        Avant je faisais du QBASIC
                                        :D
                                        Et j'ai pas trouvé autre chose que les goto pour revenir...

                                        Mais ... C'est quoi les globales? :D
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          27 novembre 2005 à 18:08:15

                                          Pour revenir, pourquoi ne pas utiliser un do... while () ?
                                          c'est plus propre, non ?
                                          A part ça, je trouve ta calculatrice bien.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            27 novembre 2005 à 18:24:37

                                            les variables globales, c'est celle qui sont déclaré hors d'une fonction, elles sont donc accessibles de partout
                                            normalement, on déclare les variables 'principales' dans `main', c'est pas très appréciés les variables globales
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              27 novembre 2005 à 18:25:46

                                              Dans un projet comme ça ça change peu de choses. Mais faut apprendre à ne pas les utiliser pour des raisons de non-gaspillage de mémoire.
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Calculette

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown