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 Delphi Discussion :

Evaluation d'expression mathématique avec variable x


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Février 2005
    Messages : 242
    Par défaut Evaluation d'expression mathématique avec variable x
    Bonjour,

    Je fais un logiciel de tracé de courbe et j'aimerais disposer d'une fonction d'évualation permettant à partir d'une formule de calculer chaque y pour les x correspondant.

    Exemple :

    formule:='(2*x*x+5)/(x*x*x+5)';

    Y:=Eval(x, formule);

    Je ne sais pas du tout comment écrire une tel fonctions qui doit prendre en compte es opérateurs standard + - * / les parenthèses, les signes ( - ) et les nombre décimaux ( . ) et si possible un opérateur puissance ( ^, ex: 3 au carré : 3^2)

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 74

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Par défaut
    Autrement il y a systools de turbo power qui est open source, cela devarit faire avec le composant TStExpression

    Bonne Journée

    MS

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Salut,

    Autre piste : Pour le cas ou ton logiciel de tracé de courbes du genre y = f(x) serait destiné à ne traiter qu'un nombre limité de types de formules différentes une possibilité de simplification consiste à déclarer le type générique des fonctions à passer en tant que paramètre à la procedure de tracé des courbes comme dans l'exemple suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    // Type des fonctions du genre y = f(x) à passer en tant que paramètre à la
    // procedure de tracé des courbes :
    type tFonc = function (X : Extended; Coeffs : array of Extended) : Extended; 
    
    var FF: tFonc;
    
    // Exemples de fonctions
    function ynum1(x : Extended; Coeffs : array of Extended) : Extended; 
    //       équations polynomiales de degré N
    //       ex : y1 = a0*x^5 + a1*x^4 + a2*x^3 + a3*x² + a4*x + a5
    var    i : integer; degre : integer;
    begin    Result:=0; degre:=length(Coeffs) - 1;
                 for i:=0  to High(Coeffs)
                 do Result:=Result + Coeffs[i]*Power(X, degre - i);
    end;
    
    function ynum2(x : Extended; Coeffs : array of Extended) : Extended;
    // ton ex : y2 = (2*x*x+5)/(x*x*x+5)
    begin     Result:=(Coeffs[0]*x*x + Coeffs[1]*)/(x*x*x+Coeffs[2]); end;
    
    function ynum22(x : Extended; Coeffs : array of Extended) : Extended;
    //      ex :  y22 = a0.[e^-x].sin(a1*x)
    begin    Result:=Coeffs[0]*Exp(-x)*sin(Coeffs[1]*x); end;
    
    procedure tForm1.TraceMesCourbes( Fonction : tFonc; imageCible : tImage; DeX,JusquaX : Extended; coulCourbe : tColor);
    begin ...
    end;
    
    procedure tForm1.RadioButton1Click(Sender: TObject);
    begin     // Selon la fonction choisie :
              if radioButton1.checked then FF:=ynum1 else
              if radioButton2.checked then FF:=ynum2 else
              ....
              if radioButton22.checked then FF:=ynum22; 
              TraceMesCourbes( FF, image1, DeX,JusquaX, clRed );
    end;
    // Ce canvas de code suppose qu'au moment du RadioButton1Click les valeurs
    // de DeX et de JusquaX (intervalle du tracé de courbe) ainsi que les valeurs
    // des coefficients (Coeffs : array of Extended) à utiliser par la fonction 
    // y= f(x) visée aient été initialisées ailleurs.
    ... Cette approche bien que plus simple permet néanmoins de couvrir pas mal de cas de figure.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

Discussions similaires

  1. [XSLT 2.0] Evaluation d'expression mathématique dans une variable string
    Par domas_24 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 25/01/2011, 14h49
  2. Réponses: 2
    Dernier message: 07/01/2011, 11h29
  3. Réponses: 0
    Dernier message: 14/11/2010, 15h24
  4. Evaluer une expression mathématique
    Par sbeu dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/07/2007, 18h28
  5. Expressions régulières avec variable
    Par killprog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/04/2006, 17h03

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