Faire des calculs simple demandé par l'utilisateur.
madshell
Messages postés59Date d'inscriptiondimanche 29 avril 2007StatutMembreDernière intervention21 août 2007
-
13 juin 2007 à 16:34
kevindu77270
Messages postés3Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 mars 2010
-
4 avril 2009 à 23:10
Bonjour,
Je suis en train de créer un robot msn qui réponds à l'utilisateur et j'aimerais qu'il calcul lorsqu'on lui demande :
5 + 5 (par exemple)
Je cherche le moyen de procéder sachant que s'il detecte des chiffres, il faut qu'il supprime toutes les lettres, mais aussi qu'il repère les opérateurs mais je ne vois pas comment faire.
Une âme généreuse pourrais t-elle me fournir un peu d'aide ?
Merci d'avance.
cs_niky
Messages postés168Date d'inscriptionjeudi 28 juin 2001StatutMembreDernière intervention18 octobre 20087 13 juin 2007 à 17:53
Salut,
Ton post me rappelle mes cours sur les machines de Turing et la compilation... c'était affreux
Premièrement, je dirais que pour conserver uniquement une expression au sein d'un texte (C'est à dire transformer "Combien font 5 + 5 ?" en "5 + 5"), tu devrais utiliser les expressions régulières (un super site sur les regex : http://www.regular-expressions.info/).
Ensuite, il faut savoir si tu veux prendre en compte la priorité des opérateurs ou pas.
Si tu ne prends pas en compte la priorité, il suffit de lire la chaîne caractère par caractère et de faire les opérations dans l'ordre (sachant que dans le parcours, tu vas alterner la recherche d'un nombre et d'un opérateur).
Si tu prends en compte la priorité, c'est plus embêtant. Il faut transformer ta chaîne en un arbre binaire ou en notation préfixée (ce qui, dans la pratique revient au même). Mais en utilisant une pile ou une petite récursion, on s'en sort très bien.
Une petite recherche sur l'évaluation des expressions arithmétiques devrait pouvoir te sauver
cs_niky
Messages postés168Date d'inscriptionjeudi 28 juin 2001StatutMembreDernière intervention18 octobre 20087 13 juin 2007 à 18:08
Un petit bout de code qui devrait est capable (... enfin je crois, je l'ai pas testé) d'évaluer une expression très rudimentaire :
Supporte 4 opérateurs. Prise en compte uniquement des nombres entiers. Pas de parenthèsage. Pas de respect de la priorité des opérateurs.
foreach (char c in expression)
{
if (c == ' ') // Ignore les espaces
continue;
switch (c)
{
case '+':
resultat = Calculer(resultat, op, nombreCourant); nombreCourant signe 0;
op = 0;
break;
case '-':
resultat = Calculer(resultat, op, nombreCourant); nombreCourant signe 0;
op = 1;
break;
case '*':
resultat = Calculer(resultat, op, nombreCourant); nombreCourant signe 0;
op = 2;
break;
case '/':
resultat = Calculer(resultat, op, nombreCourant); nombreCourant signe 0;
op = 3;
break;
default:
if (c >= '0' && c <= '9')
nombreCourant = nombreCourant * 10 + (c - '0');
else
throw new Exception();
break;
}
}
}
double Calculer(double res, int op, double value)
{
switch (op)
{
case 0:
return res + value;
case 1:
return res - value;
case 2:
return res * value;
case 3:
return res / value;
default:
throw new Exception();
}
}
Même si c'est pas très juste, ça devrait te donner une idée de la manière de procéder.
madshell
Messages postés59Date d'inscriptiondimanche 29 avril 2007StatutMembreDernière intervention21 août 20077 13 juin 2007 à 18:14
Aie aie aie, c'est bien compliqué tout ça ! Je ne pense pas utiliser les priorités de calcul, c'est juste pour montrer à l'utilisateur qu'il s'est faire 2 + 2 ou 65 + 5.
madshell
Messages postés59Date d'inscriptiondimanche 29 avril 2007StatutMembreDernière intervention21 août 20077 13 juin 2007 à 18:21
Ah désolé j'avais pas encore vu ton code niky. Oui ça va surement m'être utile merci. Par contre où se place mon opération de dépard dans tout ça ? Je débute moi !
Vous n’avez pas trouvé la réponse que vous recherchez ?
kevindu77270
Messages postés3Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 mars 2010 4 avril 2009 à 23:10
Bonsoir,
Je sais ce topic est vieux, mais je débute dans la programmation de robot msn et je voudrais faire calculette sur le robot pour 4 + 8 ou 512 + 785.
Je suis débutant et ne comprend pas très bien ou inséré ce code dans ma source du robot.
Je vous remercie de votre aide.
(Adresse du robot : kebot@live.fr)