/
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