Partage
  • Partager sur Facebook
  • Partager sur Twitter

comment faire pour ...

une calcultrice.....

    21 octobre 2006 à 21:49:02

    bonsoir

    je fais une calculatrice et a un moment l'utilisateur rentre le nombre de nombres a additionner alors il faudrait pas utiliser les pointeur???
    merci d'avance
    mon code (je ne met que l'important pour ca)
    operation simple.c:

    #include <stdio.h>
     #include <stdlib.h>
     #include <math.h>
     #include "les prototypes.h"

    long oprSimple()
    {
                //les variables:
                long choixSpl = 0, nbrA_Add = 0;

                printf("Vous avez choisi : Operation simple .\n\n\n");
                printf("Choissisez une partie.\n\n");

                printf("1. Addition :\n");
                printf("2. Soustraction :\n");
                printf("3. Multiplication :\n");
                printf("4. Division :\n");
                printf("5. Retour au menu principal :\n");
                printf("6. Quitter :\n\n\n");
                printf("Votre choix est le numero ");
                scanf("%ld", &choixSpl);
                printf("\n\n\n\n\n");

                        switch(choixSpl)
                       {
                            case 1:
                            printf("Vous avez choisi : Addition.\n\n\n");
                            printf("\n\n\n");
                            printf("Entrer un nombre pour choisir le nombre de chiffre a additioner.\n\n");
                            scanf("%ld", &nbrA_Add);
                            printf("\n\n\n\n\n");
                            break;
                       }
    }


    merci
    • Partager sur Facebook
    • Partager sur Twitter
      21 octobre 2006 à 21:53:44

      Euh... oui.
      Je ne comprends pas bien ta question.
      Bien que ceci :

      scanf("%ld", nbrA_Add);

      est à remplacer par cela :

      scanf("%ld", &nbrA_Add);

      Pour la suite de ton programme, je pense que tu devras utiliser l'allocation dynamique pour créer un tableau contenant exactement le nombre de nombre à additionner. Et donc des pointeurs.
      Voilà. Je sais pas si cette réponse te convient.
      • Partager sur Facebook
      • Partager sur Twitter
        21 octobre 2006 à 21:55:51

        Déja, je ne te conseille pas de mettre d'espaces dans tes noms de fichiers :
        ==>
        #include "les_prototypes.h"


        Puis, pour un long, toujours &nom ( avec scanf ) :
        ==>
        scanf("%ld", &nbrA_Add);




        [EDIT] Grilled :D
        • Partager sur Facebook
        • Partager sur Twitter
          21 octobre 2006 à 21:56:07

          ok mais ca va etre dur non???
          je suis sur !! :lol:

          edit: j'ai regarder un peu le chapitre des tableaux dynamique.

          voila
          • Partager sur Facebook
          • Partager sur Twitter
            21 octobre 2006 à 22:05:19

            Ce que tu peux faire c'est de créer une variable locale somme, puis ajouter le nombre que l'utilisateur saisit au fur et à mesure.
            • Partager sur Facebook
            • Partager sur Twitter
              21 octobre 2006 à 22:09:41

              Oui, c'est vrai que c'est plus simple. Mais pourquoi faire simple quand on peut faire compliqué. :)
              • Partager sur Facebook
              • Partager sur Twitter
                21 octobre 2006 à 22:09:55

                Citation : kudo2

                oui c'est ca !!



                Donc pas besoin de tableaux.
                • Partager sur Facebook
                • Partager sur Twitter
                  21 octobre 2006 à 22:22:50

                  tu crée une fonction Add(int a,int b) qui return (a+b);
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 octobre 2006 à 22:28:21

                    Oui mais lui, il à peut-être a,b,c et d puisque c'est l'utilisateur qui choisi la quantité de nombre à ajouter.
                    Mais tu peux utiliser les fonctions à nombre d'argument variable si tu ne veux pas utiliser l'allocation dynamique :pirate: . C'est la soirée des solutions simples, profitez en.
                    Ou alors, tu fais comme Octal a dit et tu te couche plus tôt.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 octobre 2006 à 22:29:22

                      je te recommande une fonction a argument variable alors effectivement ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 octobre 2006 à 22:31:16

                        ouai mais j'en suis aux chaines de caracteres
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 octobre 2006 à 22:40:21

                          et ce n'est pas encor traité en cours ;)

                          #include <stdarg.h>
                          #include <stdio.h>

                          int add(int first, ...) {
                              va_list pointeur;   
                              int m=0, next=first;
                             
                              va_start(pointeur,first);

                              while(next>=0) {
                                m+=next;
                                next=va_arg(pointeur, double);
                              }

                              va_end(pointeur);
                              return m;
                          }

                          Cela implique que tu apelle :
                          add(premier,deuxieme,troisieme,Xieme);
                          et ca devrait marcher ( je ne suis pas sur :p )
                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 octobre 2006 à 20:16:39

                            j'ai fait ca mais c'est une boucle infini !!! je pense etre pres de la soluce!!
                            alors : operation simple.c


                             #include <stdio.h>
                             #include <stdlib.h>
                             #include <math.h>
                             #include "les prototypes.h"

                            long oprSimple()
                            {
                                        //les variables:
                                        long choixSpl = 0, nbrA_AddEntrer = 0, nbrA_Add, nbrA_Sous = 0;

                                        printf("Vous avez choisi : Operation simple .\n\n\n");
                                        printf("Choissisez une partie.\n\n");

                                        printf("1. Addition :\n");
                                        printf("2. Soustraction :\n");
                                        printf("3. Multiplication :\n");
                                        printf("4. Division :\n");
                                        printf("5. Retour au menu principal :\n");
                                        printf("6. Quitter :\n\n\n");
                                        printf("Votre choix est le numero ");
                                        scanf("%ld", &choixSpl);
                                        printf("\n\n\n\n\n");

                                                switch(choixSpl)
                                               {
                                                    case 1:
                                                    printf("Vous avez choisi : Addition.\n\n\n");
                                                    printf("\n\n\n");
                                                    printf("Entrer un nombre pour choisir le nombre de chiffre a additioner.\n\n");
                                                    scanf("%ld", &nbrA_AddEntrer);
                                                    printf("\n\n\n\n\n");
                                                    nbrA_AddEntrer = nbrA_Add;

                                                    for (nbrA_Add = 0 ; nbrA_Add != nbrA_AddEntrer ; nbrA_Add++)
                                                    {
                                                        printf("Entrer un nombre\n");
                                                    }
                                                    break;

                                                    case 2:
                                                    printf("Vous avez choisi : Soustraction.\n\n\n");
                                                    printf("\n\n\n");
                                                    printf("Entrer un nombre pour choisir le nombre de chiffre a soustraire.\n\n");
                                                    scanf("%ld", &nbrA_Sous);
                                                    printf("\n\n\n\n\n");
                                                    break;
                                               }
                            }

                            merci
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 octobre 2006 à 21:23:11

                              Sinon tu fais tout simplement une boucle comme celle-ci :
                              int next = 1, somme = 0, nb_enter = 0;
                              while (next)
                              {
                                  /*On demande à l'utilisateur un nombre nb_enter*/
                                  /*une condition if qui test si l'utilisateur rentre "s" par exemple (pour stop):
                                     si "s" alors on attribue 0 à next et break (on sort de la boucle)*/

                                   /*sinon on ajoute nb_enter à somme*/
                              }


                              Attention cependant, cela oblige à demander à l'utilisateur de rentrer une chaine de caractères que tu convertis ensuite en nombre avec un sscanf.
                              Pour des saisies de chaines de caractères, vas voir ici
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 octobre 2006 à 10:52:37

                                Salut. Ou alors, tu vérifies le type de retour de scanf pour vérifier si la saisie s'est bien passée. Voici un code que je viens de faire, tu peux t'en inspirer :


                                #include <stdio.h>

                                static void purge(void)
                                {
                                        int c;
                                        while ((c = getchar()) != '\n' && c != EOF)
                                        {
                                        }
                                }

                                static void afficheErr(void)
                                {
                                        printf("Erreur de saisie, recommencez: ");
                                        fflush(stdout);
                                }

                                int main(void)
                                {
                                        int nb_nombres = 0, nombre = 0, somme = 0, res = 0;
                                        printf("Combien de nombres voulez vous ajouter ? ");
                                        fflush(stdout);
                                        while ((res = scanf("%d", &nb_nombres)) < 1)
                                        {
                                                afficheErr();
                                                purge();
                                        }
                                        while (nb_nombres)
                                        {
                                                printf("Entrez le nombre: ");
                                                fflush(stdout);
                                                while ((res = scanf("%d", &nombre)) < 1)
                                                {
                                                        afficheErr();
                                                        purge();
                                                }
                                                somme += nombre;
                                                nb_nombres--;
                                        }
                                        printf("La somme des nombres est %d\n", somme);
                                        return 0;
                                }



                                Resultat de l'éxécution :


                                Combien de nombres voulez vous ajouter ? tret
                                Erreur de saisie, recommencez: molp
                                Erreur de saisie, recommencez: 4
                                Entrez le nombre: gf*
                                Erreur de saisie, recommencez: 3
                                Entrez le nombre: 4
                                Entrez le nombre: 9
                                Entrez le nombre: $*!
                                Erreur de saisie, recommencez: 8
                                La somme des nombres est 24
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 octobre 2006 à 17:35:44

                                  qu'est-ce que c'est : fflush(stdout);
                                  merci
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 octobre 2006 à 17:40:32

                                    C'est pour vider le buffer :)

                                    Il est vidé quand :
                                    • Le tampon d'émission est plein (incontrôlable)
                                    • Un '\n' a été placé dans le tampon ( pas si c'est redirigé sur un fichier )
                                    • La commande de forçage a été activée


                                    Va voir
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 octobre 2006 à 17:49:44

                                      quelqu'un peux m'expliquer le code de octal
                                      merci
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        23 octobre 2006 à 19:12:01

                                        Octal te l'expliquera sûrement lui-même, mais comme tu vois scanf() c'est un peu merdique à utiliser ^^ !
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          23 octobre 2006 à 19:15:25

                                          Citation : kudo2

                                          quelqu'un peux m'expliquer le code de octal
                                          merci



                                          Salut. Pose des questions précises sur ce que tu ne comprends pas pour que je sache quoi t'expliquer.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 octobre 2006 à 19:18:14

                                            la variable "res" sert a quoi ??
                                            c'est pas restart ou un truc comme ca!!
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              23 octobre 2006 à 19:22:55

                                              Citation : kudo2

                                              la variable "res" sert a quoi ??
                                              c'est pas restart ou un truc comme ca!!



                                              J'ai choisi d'appeler ça pour 'resultat'. En clair, cette variable sert à stoquer le retour de scanf. scanf retourne le nombre de saisies effectuées, si ce nombre est inférieur à 1, celà signifie qu'il y a eu un problème lors de la saisie, il faut donc recommencer (avec la fonction afficheErr) puis vider les caractères qui seraient restés dans le tampon (buffer), laissés par la saisie erronée lors du scanf.
                                              J'ai mis fflush(stdout) car certains de mes printf ne sont pas terminés par un '\n', il faut donc forcer l'affichage et un lien direct t'a été donné ;)
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              comment faire pour ...

                                              × 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