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

Langage Java Discussion :

gestionnaire d'expressions mathématiques


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut gestionnaire d'expressions mathématiques
    Bonjour,
    je dois créer un interpréteur simplifié d’expressions symboliques mathématiques.
    Par exemple si l'utilisateur tape Deriv(4*Ln(x)) alors le programme retourne 4/x ou; Somme(1+ ... + n) Rép. : n*(n+1)/2; Factor(a*b + a*c) Rép. : a*(b+c)
    où a, b, c, ..., n, ..., x, y et z sont des variables symboliques autorisées.
    Dites moi si je n'ai pas été assez clair.
    Je ne vois pas du tout comment faire donc j'aurais besoin d'un peu d'aide au moins pour m'aiguiller au départ car je suis vraiment coincé la!

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Deux suggestions :

  3. #3
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    J'utiliserai une implémentation de Lex et Yacc pour Java. Bon courage

    C'est professionel ou pour les études ?
    Si c'est pour les études, on vous a guidé quand même ? Parceque sinon, c'est CHAUD !

  4. #4
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Si c'est pour les études, jette un oeil dans la partie API pour développeurs Java du site. Il y a une bibliothèque qui existe. Elle ne remplira pas tes besoins complètement, mais c'est un bon début.

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Oui, c'est pour les études. Merci pour vos conseils, je vais déja regarder ça et je vais voir ce que ça donne.

  6. #6
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    Si c'est pour les études, ne t'aventure surotut pas tout seul dans Lex&Yacc, c'est super compliqué.
    A moins que tu ne sois en polytechnique ou que tu ais toute l'année pour faire ton projet, donne une baffe à ton prof, parceque c'est quand même compliqué ton histoire !

    En fait, à part la derivation, c'est pas si compliqué à condition qu'à chaque fois on a un exercice séparé avec un nombre d'entrée possibles très limité.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    En quoi ton interpréteur est-il simplifié?

    As-tu beaucoup de fonctions/d'opérateurs à coder?

    Même si tu ne connais pas Yacc, as-tu quelques notions de parsing, d'analyse LL ou autres?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Pour rester dans Java sinon il y a ANTLR et JavaCC comme Lexer/Parser.

    Je connais surtout ANTLR, il faut un peu de temps au début pour comprendre la logique mais après ça se passe plutôt bien...

  9. #9
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Citation Envoyé par LGnord Voir le message
    Même si tu ne connais pas Yacc, as-tu quelques notions de parsing, d'analyse LL ou autres?
    Non je n'ai aucune notion de tout ça!
    Et je dois rentre ce projet dans 1 mois.
    En fait je suis en deuxième année d'école d'ingénieur et l'informatique est une matière où on a peu d'heures de cours par rapport aux maths, a la thermodynamique, a l'électronique...
    En fait ce qu'on a principalement vu en java c'est les notions de package, d'héritage, de récursivité, d'arbres.

    Pour plus de clarté, je vais copier le sujet entièrement:

    Il vous est demandé de réaliser un interpréteur simplifié d’expressions symboliques à l’instar de l’environnement de calcul symbolique ‘Maple’ (ou ‘Mathematica’ ...).

    L'utilisateur tape, à l’invité choisi (par exemple ‘%%’), des expressions symboliques; votre programme, écrit en Java, devra fournir les résultats typiques ci-après:



    %%Deriv(4*Ln(x)) %%Integ(Ln(x)) %%Eval(exp(1)) %%Somme(1+ ... + n)

    Rép. : 4/x Rép. : x*(Ln(x)-1) Rép. : 2.71828 Rép. : n*(n+1)/2



    %%Factor(a*b + a*c) %%Develop((a+b+c)*z) %%Egal(k*cos(y), Deriv(sin(k*y), y)

    Rép. : a*(b+c) Rép. : a*z+b*z+c*z Rép. : VRAI



    %%quit (ou ‘exit’)

    // pour quitter.



    où a, b, c, ..., n, ..., x, y et z sont des variables symboliques autorisées.

    Traiter AU MOINS cinq parmi les opérations symboliques ci-après:



    Dérivation : ‘Deriv(...)’

    // en tenant compte aussi des formes «(u*v)’ et (u/v)’» ...

    Développement : ‘Develop(...)’

    Test d’égalité : ‘Egal(..., ...)’

    Evaluation : ‘Eval(...)’

    // des fonctions mathématiques usuelles dont les fonctions d’erreur (‘erf’) et d’erreur complémentaire (‘erfc’)

    Factorisation : ‘Factor(...)’

    Intégration : ‘Integ(...)’

    // en tenant compte aussi de la forme d’intégration par parties ...

    Sommation : ‘Somme(...)’

    // des suites arithmétiques et géométriques usuelles

    etc ...

  10. #10
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    Alors pour avoir fait un projet assez similaire, ce n'est pas si compliquer que ca, à condition d'avoir des bases sur les grammaires de langages. Je te conseillerais de creer une grammaire qui permet de lire chacune des formules possibles ainsi que le contenu, grammaire que tu fais parser à JavaCC.
    Si tu n'as jamais entendu parler de grammaire et de JavaCC, bon courage et surtout bonne lecture.
    Après une fois que tu as compris le principe, il faut que tu implementes des regles pour évaluer chacune des formules, pour certaine ca n'est pas trop dure, mais pour d'autre c'est déjà plus compliqué.

  11. #11
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Bonsoir,

    Je te conseille d'utiliser le parser mathematiques Java JEP. C'est pas tres complique a pendre en main et tu peux ajouter tes fonctions a toi.

    Angelo

  12. #12
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    Dis à ton prof que d'après Developpez.com, site web de référence dans le monde de l'informatique, et d'après moi, ex-professeur d'informatique de mon état, qu'il s'est comment dire, un peu emballé.....

    Ce serait bien qu'il apprenne à ses élève ce qu'est une grammaire, ou un graphe d'état, et qu'il fasse des sujets un peu lisible.

    Pour avoir été prof, pourtant généralement apprécié, je sais très qu'on lache par-ci par-là des exos comment dire, pas toutà fait optimisés pour la situation.

    Ce serait bien qu'il vous aide un peu avant de tous vous dégouter de l'informatique.

    Sinon oui, à part les déricées et intégrales, c'est pas si dur.
    Pour les dérivées, c'est pas dur à conditions qu'elles soient toujours du même type (a/x, a/x², etc.).
    Pas si dur à condition de savoir dans quel chemin on met les pieds.

    Bon courage.

  13. #13
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Voila j'ai été voir mon prof aujourd'hui et je lui ai parlé de vos propositions. Il m'a dit de ne pas me compliquer la vie et de réaliser ce projet à mon niveau.
    Apparemment, il recommande de mettre les fonctions sous forme d'arbres et de procéder par une méthode d'équivalence entre les arbres il m'a aussi conseillé d'utiliser le string tokenizer.

  14. #14
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Citation Envoyé par barette54 Voir le message
    Voila j'ai été voir mon prof aujourd'hui et je lui ai parlé de vos propositions. Il m'a dit de ne pas me compliquer la vie et de réaliser ce projet à mon niveau.
    Apparemment, il recommande de mettre les fonctions sous forme d'arbres et de procéder par une méthode d'équivalence entre les arbres il m'a aussi conseillé d'utiliser le string tokenizer.
    Tu peux même créer ta propre méthode personnalisée pour retourner des lexèmes (jetons ou tokens en anglais).

    Pour l'évaluation des expressions mathématiques il existe un méthode (pas dans la bibliotheque java ) qui s'appelle méthode de la descente récursive; elle est simple est puissante.

    Penses aussi à trouver une grammaire pour tes expressions.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    "mettre les fonctions sous forme d'arbres"

    C'est exactement le job d'un parser.

    "équivalence entre les arbres"

    Ola. Encore une notion qui peut vite devenir très complexe.

    "string tokenizer"

    Que fais-tu des tokens?


    Je vois deux grandes approches:
    1) Tu fais un truc propre : tu vas apprendre plein de trucs interressant mais, sans aide, tu vas galérer un peu.
    2) Tu fais un truc had hoc à la main.

    Comme l'a dit Amine_sas, commence par choisir les fonctions que tu veux utiliser et décrit les avec une grammaire.

    As-tu déjà manipulé des grammaires?

  16. #16
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Bonjour,
    je me permets d'insister a nouveau, mais je pense que JEP peut t'etre tres utile.

    Je ne sais pas le but de ton travail, mais si ton but est de travailler sur les fonctions mathematiques et pas le parsing de la grammaire (avec gestion de tokens...) je te conseille tres fortement JEP.

    JEP te propose des fonctiosn mathematiques de base, mais tu peux ajouter toutes les fonctions a toi (c'es ce qui pourrait t'interesser).

    Peut etre que je n'ai pas bien compris ta problematique et si c'est le cas, desole d'avoir pollue ce post avec mon message.

    Angelo

  17. #17
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Citation Envoyé par LGnord Voir le message
    "string tokenizer"

    Que fais-tu des tokens?
    C'est une bonne question
    Je pense qu'une fois que la chaine de caractère a été découpé il faut construire un arbre avec les tokens, je suis en train de réfléchir la dessus...

    Citation Envoyé par LGnord Voir le message
    As-tu déjà manipulé des grammaires?
    Non, je suis en train de me documenter sur la grammaire sur internet mais ça reste encore assez abstrait.

    En tout cas, merci pour tout vos conseils.

  18. #18
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Citation Envoyé par LGnord Voir le message
    "string tokenizer"

    Que fais-tu des tokens?
    les tokens pour un langage de programmation sont d'équivalent des mots pour un langue naturelle (tel que le français).
    par exemple l'expression suivante (écrite en java ou en C) :
    a = b+2;
    contient les tokens : a, =, b, +, 2 et ;

    J'aimerais pas te compliquer la vie mais il faut savoir qu'il faut passer par un analyseur lexical pour retourner les tokens un apres l'autre ainsi que leur types.
    Un analyseur lexical peut s'avérer relativement simple; il peut etre une méthode qui lit les lettres l'une après l'autre et les concatènes dans une chaine puis elle s'arrête lorsque elle rencontre un délimiteur et retourne la chaine en tant que token ainsi que son type.

    Pour des expressions mathématiques les délimiteurs peuvent être ('l'espace, =, +, -, *, /, (, ), ; etc..). Il faut noter que ces caractères hormis l'espace ou le point virgule peuvent eux même être des tokens a retourner.
    Les types peuvent être une variable, un nombre ou un délimiteur, si tu trouves un tokens qui ne correspond pas tu doit retourner une erreur lexicale.

    As-tu déjà manipulé des grammaires?
    Oui dans le cadre des modules Théories des langages et Compilation.

Discussions similaires

  1. Défi N°2 : Réalisation d'un interpréteur d'expression mathématiques
    Par millie dans le forum Défis langages fonctionnels
    Réponses: 22
    Dernier message: 13/01/2011, 15h15
  2. Evaluer une expression mathématique
    Par sbeu dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/07/2007, 19h28
  3. Expressions mathématiques & calcul littéral
    Par dudux dans le forum Delphi
    Réponses: 3
    Dernier message: 03/02/2007, 18h47
  4. Réponses: 2
    Dernier message: 20/11/2006, 22h19
  5. Analyser une expression mathématique
    Par Amokrane dans le forum C++
    Réponses: 5
    Dernier message: 06/01/2006, 14h36

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