Saisir une fonction mathématique au clavier

Signaler
Messages postés
14
Date d'inscription
dimanche 5 avril 2009
Statut
Membre
Dernière intervention
5 avril 2009
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
Bonsoir, je travaille actuellement sur un projet visant à résoudre des équations apres transformée de fourrier. Pour ce faire je rentre une fonction initiale à l'instant t0. Mon probleme c'est que pour y arriver je n'ai que deux solutions:
Soit je met la fonction dans mon code (et quand je veux la changer il faut changer partout^^)
Soit je la saisie au clavier au lancement du programme (et la fonction se rajoutera partout où j'en ai besoin dans mon code)

Pour avoir un petit peu cherche sur le net je crois savoir que ce genre de programme portent un nom, les interpreteurs^^. Le petit probleme c'est que je code depuis peu, et donc lorsque j'ai vu le code de ces fameux interpreteurs j'ai eu une frayeur^^.
Je voulais donc savoir si il n'y avait pas ici une ame charitable qui pourrait m'expliquer en terme plus ou moins simple le fonctionnement de ces interpreteurs (qu'est ce qu'ils prennent comme parametres, qu'est ce qu'ils renvoient...).

Donc voila, j'espere que quelqu'un saura m'aider dans cette rude épreuve^^, bonne soirée, ++

10 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
salut

si tu acceptes de ne pas avoir des expressions mathematiques ecrites sous la forme classique, alors c'est simple : la syntaxe RPN est vraiment tres facile a interpreter.

sinon, tu peux convertir une expression normale en expression rpn pour ensuite l'interpreter.

ici, t'as un code de convertion en javascript : http://www.javascriptfr.com/codes/NOTATION-CLASSIQUE-VERS-NOTATION-NPI_48072.aspx

et ici, t'as des explications sur le rpn : http://fr.wikipedia.org/wiki/Notation_polonaise_inverse
Messages postés
14
Date d'inscription
dimanche 5 avril 2009
Statut
Membre
Dernière intervention
5 avril 2009

merci de m'avoir répondu coucou747 mais le probleme c'est que cette méthode ne gere pas les equation comportant des variables, comme par exemple f(x)=x*(1-x). Petite precision aussi je programme en C (si je me suis trompé de partie du forum excusez moi je déplacerai le sujet^^).
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
tu ne t'es pas trompe de forum, mais j'avais pas d'exemple en C sous la main, et ce qui t'interesse, c'est bien l'algo ?

tu peux assez facilement integrer le principe des variables dans ce genre de choses.

de toute facon, dit toi bien que tu ne pourras pas creer une fonction en C. tu ne pourras pas te trouver avec un code du genre :

int (*f(int i));

scanf( ... , expression);
f = evaluer(expression);

printf("f(1) = %d\n", f(1));

ca ne pourra pas fonctionner ca le C n'est pas un langage fonctionnel, t'as rien pour creer de nouvelles fonctions.
Messages postés
14
Date d'inscription
dimanche 5 avril 2009
Statut
Membre
Dernière intervention
5 avril 2009

ben en fait d'apres ce que j'ai lu, il existe des codes appellées interpreteurs qui se chargent de ça, mais je n'arrive pas à les déchiffrer.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
ouais, ma ca revient a faire :

int resultat = eval(expression, x);

c'est pas la meme chose.
Messages postés
14
Date d'inscription
dimanche 5 avril 2009
Statut
Membre
Dernière intervention
5 avril 2009

oui mais une fonciotn qui ferait ça ça me suffirait, car avec ça je pourrais calculer les points qui m'interresse et les stocker dnas un tableau, pour pouvoir ensuite faire ma TF et mes RK. Tu connais un programme qui fait ça?
Messages postés
14
Date d'inscription
dimanche 5 avril 2009
Statut
Membre
Dernière intervention
5 avril 2009

qqun aurait il une idée lol?^^
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
faire une fonction de type :

bt parse(char * expression){
// met ton code ici
}

et une autre de type

int eval(bt tree, int valeur_de_x)

tu ne sais pas du tout comment ca peut se faire ?

il faut faire un bout de code qui decoupe ton expression en une liste de "tokens" ces tokens sont soit des nombres, soit des operateurs (tu associes une priorite aux operateurs) soit des noms de variables. Tu ignores les espaces aussi.

ensuite, tu as un parseur qui va lire les tokens et qui va te faire un arbre binaire pret a etre evalue.

la fonction d'evaluation est bidon.

le lexeur n'est pas tres dur a faire, ce qui est chiant, c'est les regles dans le parseur.

le plus dur, c'est la gestion des priorites.
Messages postés
14
Date d'inscription
dimanche 5 avril 2009
Statut
Membre
Dernière intervention
5 avril 2009

ok, je m'y colle de suite alors, merci pour les precisions.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
si t'as des questions, essaie de faire plus precis que : "comment faire ?"

parce-que c'est vraiment dur de t'aider sachant que t'as deja a ta disposition des codes qui font ca.