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).
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 ?
Ç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.
Ç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.
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
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
× 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.
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C