IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

[debutant]interprétation d'une équation [php]


Sujet :

Mathématiques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 50
    Points
    50
    Par défaut [debutant]interprétation d'une équation [php]
    Bonjour, je suis débutant en algo (mais moins en php ) et je cherche a faire un programme qui permettrait au gens de tracer une courbe (ou une droite)d'après son équation.

    Je sais faire du php, et donc, tracer la courbe en elle même pourra sefaire sans trop de problème (via imagesetpixel).

    Mon problème viens du fait que je dois analyser l'équation.

    Pour une équation simple, de type x+2, je peux m'en sortir avec une sorte de eval dans une fonction (en remplacant tous les x par des $x, php l'interprète tout seul).

    Mais cette "solution" est vraiment... écoeurante coté sécurité (je peux faire plein sde verif, je sais que eval est un gouffre de sécurité ), et en plus elle ne fonctionne plus dèq que l'on commence a rentrer dans des équations complexe (déjà pour le symbole ², ça ne marche plus).

    Ce que je cherche a faire pourrai ressembler a ce qu'il y a sur les calculatrices graphiques.
    Est-ce que vous connaissez un algorithme pour pouvoir traiter une chaine de ce type (je subodore du récursif en veux tu en voila).

    Si non, connaitriez vous une bibliothèque ou une fonction qui réalise directement ceci (du type $y = equation($equation, $x); avec $equation qui contient l'équation et $x la valeur de x).

    Merci beaucoup pour votre aide

  2. #2
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Pas moyen de faire propre sans passer par une description des expressions à l'aide d'une grammaire type BNF par exemple.
    Ensuite écrire un parser (analyseur syntaxique).
    L'évaluateur travaille à partir de la structure retournée par le parser.
    On ne peut guère faire l'économie de cette méthodologie désormais classique.
    On doit pouvoir trouver des exemples simples traités (voir les cours de Lisp). Il suffit ensuite de complexifier en ajoutant de nouvelles règles

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    pour des equaions ce n'est pas forcement la peine de sortir la grosse artillerie, mais en gros l'idee est d'ecrire une fonction recursive qui "separe" les differentes parties de ton equation par rapport aux symboles, en respectant priorités et parentheses. cette fonction te permettra de stocker ton equation sous forme d'arbre qui rend facile l'evaluation.

    par exemple, l'equation 3*x+2 pourrait etre representée par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                         +
                        /   \
                      *      2
                    /  \
                  3     x

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup jobherzt

    Je vais pouvoir progresser avec ça (je comprend ce que tu dis, et l'idée me plait).

    je ne comprennais rien du tout sinon ^^

    bon, je laisse le topic sans mettre résolu, car je subbodore que j'aurai plein de problème ^^.

    P.S: hors sujet mais bon: j'ai vu comment on fait de la compressions sans perte, et je suis abasourdi: c'est tellement inteligent est simple en même temps que ça force le respect

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    pour des equaions ce n'est pas forcement la peine de sortir la grosse artillerie, mais en gros l'idee est d'ecrire une fonction recursive qui "separe" les differentes parties de ton equation par rapport aux symboles, en respectant priorités et parentheses. cette fonction te permettra de stocker ton equation sous forme d'arbre qui rend facile l'evaluation.
    La grosse artillerie n'est peut-être pas une si mauvaise idée que cela en utilisant les outils adaptés (flex et/ou bison), on résoud le problème sans trop de difficulté et de façon relativement rapide. Pour ce qui est de l'écriture de la fonction récursive, elle n'est pas forcément si triviale que ça.

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    oui oui bien sur, je voulais dire "si on part de 0". et puis ca peut etre un exercice interressant.

    j'en profite pour dire aussi que j'ignore si (f)lex/(bison)yacc sont dispo pour PHP, et puis ils ne sont peut etre pas installé sur son hebergeur (si tant est que ca soit necessaire)... enfin bref, c'etait juste pour apporter un peu d'eau au moulin

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 50
    Points
    50
    Par défaut
    Pour ce qui est de l'écriture de la fonction récursive, elle n'est pas forcément si triviale que ça.
    Je viens de m'en rendre compte lol

    Bon, je crois que je vais devoir laisser ça aux autres pour le moment.

    Mais vous êtes sur qu'il n'existe pas un petit moyen pour le faire (toute les calculettes graphiques le font ^^)

    En tout cas merci pour votre aide.

    désolé pour le dérangement.

    P.S: qui est interessé par voir les possibilité de mon log en php (et pour me conseiller et me dire ce que je pourrais faire en plus , voir, pour faire beta testeur ^^ )

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    ben comme dis plus haut, si ya moyen de faire marcher un analyseur type lex/yacc avec PHP, c'est facile.

    apres, au niveau de PHP, je pensais surtout aux possibilités des expression régulières qui a mon avis permettent assez simplement d'ecrire cette fonction recursive... a mon avis ca n'est pas si compliqué que ca. par contre pour stocker une structure d'arbre c'est peut etre plus coton

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    au passage, si tu peux te le permettre, utilise la notation polonaise inversée, ou impose l'usage systematique des parentheses, ca devrait deja simplifier le schmilblick.

  10. #10
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    au passage, si tu peux te le permettre, utilise la notation polonaise inversée, ou impose l'usage systematique des parentheses, ca devrait deja simplifier le schmilblick.
    C'est déplacer le problème vers l'utilisateur, ce qui n'est pas une bonne chose coté ergonomie.

    Mais vous êtes sur qu'il n'existe pas un petit moyen pour le faire (toute les calculettes graphiques le font ^^)
    Tu peux te recoder les analyses syntaxiques et lexicales que font flex et bison. Pour l'analyse lexicale, les expressions syntaxiques de php devraient suffire, ensuite, pour l'analyse lexicale, il suffit de créer un automate des items LR0 puis d'en déduire la table d'action. C'est peut-être un peu fastidieux à coder mais avec du temps ça devrait pouvoir être possible.

    En tout état de cause, bon courage

    En fait, si tu as déjà définit une grammaire pour ton système, tu devrais pouvoir simplement récupérer la table d'action (avec bison) et donc pouvoir construire ton analyse syntaxique facilement.

Discussions similaires

  1. Interprétation d'une équation
    Par Alfred15 dans le forum Mathématiques
    Réponses: 9
    Dernier message: 08/09/2009, 11h01
  2. Obtenir de xslt qu'il affiche une variable php sans l'interpréter
    Par Dendrite dans le forum XSL/XSLT/XPATH
    Réponses: 16
    Dernier message: 15/07/2008, 11h51
  3. Interpréter une équation
    Par Maheu dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2008, 18h53
  4. Réponses: 2
    Dernier message: 04/08/2006, 14h23
  5. Réponses: 2
    Dernier message: 12/07/2006, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo