Partage
  • Partager sur Facebook
  • Partager sur Twitter

Différencier un nombre d'une lettre

Sujet résolu
    18 septembre 2017 à 16:12:02

    Bonjour,

    Je suis actuellement sur un programme de calcul et il me faut pouvoir différencier un nombre d'une lettre du genre:

    if (variable est un nombre)

    {

    mon code

    }

    else if (variable est une lettre)

    {

    mon code

    }

    Si vous avez des idées je suis preneur.

    (PS: ça fait 2 jours que je galère sur des forums).

    • Partager sur Facebook
    • Partager sur Twitter

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

      18 septembre 2017 à 16:16:02

      http://www.cplusplus.com/reference/cctype/isalpha/
      • Partager sur Facebook
      • Partager sur Twitter
        18 septembre 2017 à 16:17:16

        Lu'!

        J'imagine que ton but est de pouvoir traiter des expressions fournies par l'utilisateur. Dans ce cas, il va falloir que tu écrives un petit parseur et c'est pendant le parsing que tu vas définir comment reconnaître un nombre/un nom de variable et produire en fonction de cela un noeud, dans l'arbre correspondant à ton expression, du bon type (Variable, Valeur typiquement).

        • Partager sur Facebook
        • Partager sur Twitter

        Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

          18 septembre 2017 à 16:19:41

          Ksass`Peuk a écrit:

          Lu'!

          J'imagine que ton but est de pouvoir traiter des expressions fournies par l'utilisateur. Dans ce cas, il va falloir que tu écrives un petit parseur et c'est pendant le parsing que tu vas définir comment reconnaître un nombre/un nom de variable et produire en fonction de cela un noeud, dans l'arbre correspondant à ton expression, du bon type (Variable, Valeur typiquement).


          T'aurais un lien vers un petit tuto / cour pour apprendre a faire un parser ?
          • Partager sur Facebook
          • Partager sur Twitter
            18 septembre 2017 à 16:23:30

            Ça dépend de ce que tu veux faire. Soit tu veux écrire ton parseur à l'ancienne pour voir comment ça se fait dans le fond, dans ce cas il faut regarder du côté de la théorie des langages, grammaire régulière, algébrique, grammaire LL(k), LR, LALR, etc ... Soit tu veux faire un parseur sans te soucier de comment c'est fabriqué et là il faut se pencher vers les outils de génération de parseurs (et il y en a plein de différents pour pleins de langages). Il faudra quand même avoir quelques notions de théorie des langages pour faire ça proprement.

            • Partager sur Facebook
            • Partager sur Twitter

            Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

              18 septembre 2017 à 16:30:17

              Ksass`Peuk a écrit:

              Ça dépend de ce que tu veux faire. Soit tu veux écrire ton parseur à l'ancienne pour voir comment ça se fait dans le fond, dans ce cas il faut regarder du côté de la théorie des langages, grammaire régulière, algébrique, grammaire LL(k), LR, LALR, etc ... Soit tu veux faire un parseur sans te soucier de comment c'est fabriqué et là il faut se pencher vers les outils de génération de parseurs (et il y en a plein de différents pour pleins de langages). Il faudra quand même avoir quelques notions de théorie des langages pour faire ça proprement.


              J'aime bien comprendre le fonctionnement de la chose en interne , mais si il existe ( ce que je ne doute pas .. ) des outils permettant plutot de definir la syntaxe et de l'utiliser je prendrais ce chemin. Alors si tu as quelques liens , autant pour le fonctionnement interne et la theorie que des outils deja fait , je suis preneur.
              • Partager sur Facebook
              • Partager sur Twitter
                18 septembre 2017 à 16:32:17

                Zérotisme,

                cela ne fonctionne pas en fait il faut que je l'inclue dans ce code:

                        nb:

                        cout<<"Nb metres :";

                        cin>>m;

                            if (la variable et une lettre)

                            {

                                goto nb;

                            }

                            else (la variable est un nombre

                            {

                //           le calcul

                            }

                • Partager sur Facebook
                • Partager sur Twitter

                Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
                Confucius

                  18 septembre 2017 à 16:34:37

                  isalpha veut dire "est un nombre" alors place le a l'endroit approprié.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 septembre 2017 à 16:39:11

                    Comme ça ?
                       nb:
                            cout<<"Nb metres :";
                            cin>>m;
                              int i=0;
                      char str[]="C++";
                      while (str[i])
                      {
                        if (isalpha(str[i]));
                        {
                        }
                        else
                        {
                              goto nb;
                        }
                        i++;
                      }
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
                    Confucius

                      18 septembre 2017 à 16:42:09

                      Alors, tu vas commencer par retirer cet horrible goto qui n'a absolument rien à foutre là. Donc ici, tu as bien trop complexifié ton problème pour rien du tout. Manifestement ici, tu veux juste t'assurer que l'utilisateur te donne un nombre. Donc crée ta variable du bon type pour recevoir un nombre (int par exemple) et vérifie que la saisie a été réalisée correctement.

                      Si tu as besoin de quelque chose de plus complexe, le plus simple est ensuite de procéder en deux étapes : recevoir une chaîne de caractères dans une variable de type std::string, analyser la chaîne pour vérifier son format, et si le format est celui que tu veux, traduire cette chaîne pour remplir une variable du bon type.

                      Merci d'utiliser le bouton prévu à cet effet pour présenter du code, conformément aux règles d'utilisation du forum.

                      -
                      Edité par Ksass`Peuk 18 septembre 2017 à 16:43:21

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                        18 septembre 2017 à 16:43:00

                        ça ne marche pas :

                        |460|error: expected '}' before 'else'|

                        et en plus j'ai besion de goto

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
                        Confucius

                          18 septembre 2017 à 16:43:49

                          Creanics a écrit:

                          et en plus j'ai besion de goto

                          Non.


                          • Partager sur Facebook
                          • Partager sur Twitter

                          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                            18 septembre 2017 à 16:45:16

                            Si je ne mets pas de goto je fait comment pour revenir en haut du code ?
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
                            Confucius

                              18 septembre 2017 à 16:47:50

                              Avec une boucle.

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                18 septembre 2017 à 16:48:11

                                ??????????????

                                Connais pas

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
                                Confucius

                                  18 septembre 2017 à 16:52:39

                                  Alors lis un tutoriel .. ce sont les bases.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 septembre 2017 à 16:53:59

                                    De toute façon même sans le goto ça ne marche pas
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
                                    Confucius

                                      18 septembre 2017 à 16:56:36

                                      Je sens que je vais bien t'aimer toi ... Arrête de taper du code sans réfléchir. Regarde ce qu'est une boucle et lis la documentation.

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                        18 septembre 2017 à 16:59:28

                                         
                                        while(<condition>) { } do { }while(<condition>); for(<initialisation>; <condition>; <increment>) { }

                                        Si tu ne connais pas (ou n'a pas encore abordé) ces trois la, inutile de te pencher sur la répétitivité d'instructions, c'est tout bonnement hors de ta portée.

                                        A ton niveau:
                                        - Soit tu assumes que l'entrée est forcément correcte.
                                        - Soit tu verifie l'entrée, si c'est bon, tu continue, sinon tu sorts (proprement) du programme.

                                        De plus:

                                        nb:
                                        cout << "Nb metres :";
                                        cin >> m;
                                        int i=0;
                                        char str[] = "C++";
                                        while(str[i])
                                        {
                                            if (isalpha(str[i]));
                                            {
                                            }
                                            else
                                            {
                                                  goto nb;
                                            }
                                            i++;
                                        }

                                        Ligne 5: On ne déclare pas les chaines comme cela !! En C++ on utilise std::string.
                                        Ligne 8: Inverse ton test, ca t'évitera un bloc qui ne fais rien.
                                        Ligne 6: Tu ne teste jamais si tu es arrivé en fin de chaine, ta boucle peut tourner à l'infinie.
                                        Ligne 1 et 13: on t'a deja tappé sur les doigts, si C++98 date du crétacé, goto est une instruction pre big-bang.
                                        Enfin, vu l'endroit ou est placé l'étiquette, les variables sont redéclarées à chaque iteration, je ne suis pas sûr du comportement du bousin dans ces conditions ...

                                        -
                                        Edité par Deedolith 18 septembre 2017 à 17:16:27

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 septembre 2017 à 17:08:18

                                          Ksass`Peuk a écrit:

                                          Je sens que je vais bien t'aimer toi ... Arrête de taper du code sans réfléchir. Regarde ce qu'est une boucle et lis la documentation.


                                          Ca risque d'etre torride comme amour ca :')
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            19 septembre 2017 à 8:37:02

                                            En programmation, on évite le goto, c'est l'une des pires instruction jamais introduites. En C++, ça va bien plus loin, on le fuit comme la peste.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug

                                            Différencier un nombre d'une lettre

                                            × 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