/
Interprétation de formules mathématiques YEvalCall

Interprétation de formules mathématiques YEvalCall

La fonction YevalCall permet d'appeler le module de Yeval (interpréteur de formules mathématiques), pour faire des opérations du type : A+B ou 2+2 ou A*2+(B-0,1)

Les différents paramètres de l'appel doivent être préalablement chargés dans la zone paramètres de Yeval.

 

Exemple d’utilisation

;* ;* Démo formule ;* ;* ;* Déclarations ;* 1 aFormule 78 ; Txt formule ici 78 c pour la saisie écran dos sinon 132 max 1 aV1 32 ; Ex variable 1 1 aV2 32 ; Ex variable 2 Structure BufForm ; Zone buffer pour YVall 785 1 uindint X ;Indice du caractère 1 uerrint X ;Numéro d'erreur 1 uflgint 1 ;Type de ligne : c="constante", v="variable" 1 uresint 24,10 ;Résultat de la ligne 1 uligint 132 ; Zone contenant la formule 1 uvarint 24*26 ; Mémorisation des 26 variables, les noms des variables vont de A -> uvalint(1) 2 uvalint 24,10 ; Valleur (Z -> uvalint(26)) 1 filler 115 1 ulib 40 ; Libellé 40 EndStructure RecordDiva BufForm ;* ;* Proc & Fx ;* ;* Gestion du résultat / erreur Procedure Formule_TxtError(nErr, aTxtForm, aRes) 1 nErr 2,0 ; Code erreur 1 aTxtForm 132 ; Forule saisie 1 aRes 254 = " " ; résultat 1 aTxtErr 254 = " " ; Texte de l'erreur Beginp nErr = Min(nErr, 16) Switch2 nErr Case 0 aTxtErr = "Résultat de votre formule (" & left(aTxtForm) & ") " & left(aRes) Case 1 aTxtErr = "Résultat non numérique" Case 2 aTxtErr = "Calcul sur la pile vide" Case 3 aTxtErr = "Parenthèse absente" Case 4 aTxtErr = "Opérateur absent" Case 5 aTxtErr = "Nombre trop grand" Case 6 aTxtErr = "Plusieurs virgule" Case 7 aTxtErr = "Variable inconnue (A..Z)" Case 8 aTxtErr = "Affectation impossible" Case 9 aTxtErr = "Division par zéro" Case 10 aTxtErr = "Parenthèse absente" Case 11 aTxtErr = "Formule trop complexe" Case 12 aTxtErr = "Erreur pile systeme" Case 13 aTxtErr = "Dépacement de capacité exemple multiplication" Case 14 aTxtErr = "Opérateur erroné" Case 15 aTxtErr = "Valeur non numérique" Case 16 aTxtErr = "Erreur inconnue" EndSwitch display left(aTxtErr) Endp MAIN ; Saisie Display [system.Clear] Display "Demo formule calcul " Display "Vos variables (26 variables de A..Z a ou A c'est pareil car on traduit en majucules apres)" Display " " Display "2 inputs, par exemple faire 2 (return) -> le 2 ira dans la variable A)" Display "puis 45,23 (return) -> le 45,23 ira dans la variable B " Display " " Input " " aV1 Input " " aV2 Display " " Display "Votre formule ( ex A+B ou 2+2 ou A*2+(B-0,1) ): " Input " " aFormule init BufForm = " " ;on efface le buffer ; Calcul bufForm.uvalint(1) = aV1 bufForm.uvalint(2) = aV2 BufForm.ULIGINT = fstring("UA",aFormule) yevalcall(BufForm) ; résultat / erreur display " " Formule_TxtError(BufForm.UERRINT, BufForm.ULIGINT, BufForm.uresint) ; fin ProgramGoto(" ")

 

et le résultat

image-20250303-160457.png