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

Delphi Discussion :

Évaluer une formule mathématique


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2016
    Messages : 1
    Points : 0
    Points
    0
    Par défaut Évaluer une formule mathématique
    bonjour,

    j'ai un logiciel de la paie qui contient des rubriques de paie paramétrable, chaque rubrique a une formule arithmétique écrite en texte.

    par exemple: salaire net (snet) = salaire brute (sbrute) - les charges cotisables (chcot) - charges imposables (chimpo) ... etc.
    iep = sbase * taux (10%)

    ma question est comment evaluer cette formule pour trouver le resultat, sachant que l'utilisateur finale peut parametrer la formule comme il veut.

    merci.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 416
    Points : 5 814
    Points
    5 814
    Par défaut
    salut

    le fait que l'utilisateur saisisse la formule ne gène pas en soit
    par contre il faut respecter certaine règle

    le truc dans ton cas c'est de découper ta phrase a partir des opérateur logique et arithmétique (=,+,-,*,/,%,...)
    donc tu créer un arbre le premier nœud s’arrête au =

    ensuite le deuxième au moins et ainsi de suite
    dans chaque nœud tu repère si tu as des parenthèse ouvrante et fermante cela correspond si j'ai bien compris soit a une variable connue soit
    a une valeur

    tu risque quand même d'avoir un soucis si on veut mettre des parenthèse pour modifier les priorité de calcul du a la multiplication ou as l’addition
    exemple
    est différent de
    j'aurai opté pour des crochet plutôt que des parenthèse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    salaire net [snet] = salaire brute [sbrute] - les charges cotisables [chcot] - charges imposables[chimpo]
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    déjà il faut retirer l'inutile (les descriptions) de l'essentiel les noms de variables et les opérateurs (+,-,*,/,=, les parenthèses) et encore que se passe t-il si l'utilisateur utilise ces signes dans la description !
    Ensuite vérifier que la formule ne contient qu'un seul = , deux comme dans l'exemple c'est pour moi un de trop
    Pour procéder ensuite au calcul la version de Delphi pourrait jouer, a partir de XE il y a la possibilité d'utiliser les unités System.Bindings.EvalProtocol,System.Bindings.Evaluator et System.Bindings.EvalSys (tant que ce ne sont que des expressions simples)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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