Bonjour à tous !
Alors là je suis grillé

. J'avais posté une petite calculatrice et j'étais en pleine programmation d'un éditeur de formule suite à une demande de Nico ce qui fait que je ne suivais pas le forum.
Le soldat, il est trop fort

...
J'aurais même pas le temps de le finaliser et de le débuguer que la sienne sera déja sur le forum. Bon je vais retourner jouer aux billes.
je ne suis pas de taille.
voilà quand même le code de mon éditeur si ça peu aider

Mais c'est même pas finalisé et je ne suis pas sur que ça fonctionne dans tous les cas...
Code : Tout sélectionner
Dim operateur$(8)
Dim fonction$(17)
Global nboperateur.b, nbfonction.b,nom_fonc$,nomb_fonc$,calcul$,replace_fonction$,deg.b,nomb_fonc.f,res.f,ope.b,nomb_gauche$,nomb_droite$
nboperateur=8
nbfonction=13
#Pi=3.1415926
deg=1
; tableau des opérateurs
operateur$(1)="^"
operateur$(2)="/"
operateur$(3)="*"
operateur$(4)="<="
operateur$(5)=">="
operateur$(6)="="
operateur$(7)=">"
operateur$(8)="<"
;tableau des fonction
fonction$(1)="cos"
fonction$(2)="sin"
fonction$(3)="tan"
fonction$(4)="sqr"
fonction$(5)="exp"
fonction$(6)="ln"
fonction$(7)="log"
fonction$(8)="abs"
fonction$(9)="atn"
fonction$(10)="int"
fonction$(11)="mod"
fonction$(12)="asin"
fonction$(13)="acos"
Procedure Calcul(nb1$,nb2$,oper$)
nb1.f=ValF(nb1$)
nb2.f=ValF(nb2$)
Select oper$
Case"*"
res=nb1*nb2
ProcedureReturn res
Case"/"
res=nb1/nb2
ProcedureReturn res
EndSelect
EndProcedure
Procedure cherche_operateur(operation$)
Repeat
nomb_gauche$="":nomb_droite$="":nbi$=""
pos_op=FindString(operation$,operateur$(1+ope),1)
If pos_op=0 And ope<nboperateur-1
ope+1
EndIf
If pos_op<>0
For n=pos_op-1 To 1 Step -1;reconstitue le chiffre à gauche de l'opérateur
gauche$=Mid(operation$,n,1)
If Asc(gauche$)>=48 And Asc(gauche$)<=57
nomb_gauche$=nomb_gauche$+gauche$
ElseIf Asc(gauche$)=46
nomb_gauche$=nomb_gauche$+gauche$
Else
Break
EndIf
Next n
If Len(nomb_gauche$)>1
For n=Len(nomb_gauche$) To 1 Step-1
a$=Mid(nomb_gauche$,n,1)
nbi$=nbi$+a$
Next n
nomb_gauche$=nbi$
EndIf
For n=pos_op+1 To Len(operation$);reconstitue le chiffre à droite de l'opérateur
droite$=Mid(operation$,n,1)
If Asc(droite$)>=48 And Asc(droite$)<=57
nomb_droite$=nomb_droite$+droite$
Else
Break
EndIf
Debug nomb_droite$
Next n
If nomb_gauche$<>"" And nomb_droite$<>""
oper_replas$=nomb_gauche$+operateur$(1+ope)+nomb_droite$
Calcul(nomb_gauche$,nomb_droite$,operateur$(1+ope))
operation$=ReplaceString(operation$,oper_replas$,StrF(res),1)
Else
ope+1
EndIf
;Debug operation$
EndIf
Until ope=nboperateur-1
calcul$=operation$
EndProcedure
Procedure extraction_fonction(eval$,posf)
pasl=0:a$="":replace_fonction$="":nom_fonc$="":nomb_fonc$=""
Repeat
a$=Mid(eval$,posf+pasl,1)
If Asc(a$)>=97 And Asc(a$)<=122
nom_fonc$=nom_fonc$+a$
EndIf
If Asc(a$)>=48 And Asc(a$)<=57
nomb_fonc$=nomb_fonc$+a$
EndIf
If Asc(a$)=46
nomb_fonc$=nomb_fonc$+a$
EndIf
pasl+1
replace_fonction$=replace_fonction$+a$
Until a$=")"
nomb_fonc=ValF(nomb_fonc$)
Debug nomb_fonc
EndProcedure
Procedure.f deg_rad(valeur.f)
nomb_fonc=(valeur*#Pi)/180
ProcedureReturn nomb_fonc
EndProcedure
Procedure recherche_fonction()
Repeat
posfonc=FindString(calcul$,fonction$(1+nfonc.b),1)
If posfonc=0 And nfonc<nbfonction-1
nfonc+1
EndIf
If posfonc<>0
extraction_fonction(calcul$,posfonc)
Select fonction$(1+nfonc)
Case "sin"
If deg=1
nomb_fonc=deg_rad(nomb_fonc)
EndIf
nomb_fonc=Sin(nomb_fonc)
replas$=StrF(nomb_fonc)
calcul$=ReplaceString(calcul$,replace_fonction$,replas$,1)
Debug calcul$
Case "cos"
If deg=1
nomb_fonc=deg_rad(nomb_fonc)
EndIf
nomb_fonc=Cos(nomb_fonc)
replas$=StrF(nomb_fonc)
calcul$=ReplaceString(calcul$,replace_fonction$,replas$,1)
Case "tan"
If deg=1
nomb_fonc=deg_rad(nomb_fonc)
EndIf
nomb_fonc=Tan(nomb_fonc)
replas$=StrF(nomb_fonc)
calcul$=ReplaceString(calcul$,replace_fonction$,replas$,1)
Case "atn"
If deg=1
nomb_fonc=deg_rad(nomb_fonc)
EndIf
nomb_fonc=ATan(nomb_fonc)
replas$=StrF(nomb_fonc)
calcul$=ReplaceString(calcul$,replace_fonction$,replas$,1)
Case "asin"
If deg=1
nomb_fonc=deg_rad(nomb_fonc)
EndIf
nomb_fonc=ASin(nomb_fonc)
replas$=StrF(nomb_fonc)
calcul$=ReplaceString(calcul$,replace_fonction$,replas$,1)
Case "acos"
If deg=1
nomb_fonc=deg_rad(nomb_fonc)
EndIf
nomb_fonc=ACos(nomb_fonc)
replas$=StrF(nomb_fonc)
calcul$=ReplaceString(calcul$,replace_fonction$,replas$,1)
Case "int"
nomb_fonc.f=ValF(nomb_fonc$)
nomb_fonc=Int(nomb_fonc)
replas$=StrF(nomb_fonc)
calcul$=ReplaceString(calcul$,replace_fonction$,replas$,1)
Case "sqr"
nomb_fonc.f=ValF(nomb_fonc$)
nomb_fonc=Sqr(nomb_fonc)
replas$=StrF(nomb_fonc)
calcul$=ReplaceString(calcul$,replace_fonction$,replas$,1)
EndSelect
EndIf
Until nfonc=nbfonction-1
EndProcedure
Procedure verifie_Parenthese(soper$)
For nboucle=1 To Len(soper$)
If Mid(soper$,nboucle,1)="("
nopen+1
ElseIf Mid(soper$,nboucle,1)=")"
nclose+1
EndIf
Next nboucle
If nclose=nopen
ProcedureReturn
ElseIf nopen<>nclose
MessageRequester("Alerte","Attention vous avez une erreur dans les parenthèses",#PB_MessageRequester_Ok)
EndIf
EndProcedure
Procedure filtrer_signes(eval$)
termine.b=#False
Repeat
If FindString(eval$,"++",1)
eval$=ReplaceString(eval$,"++","+",1)
ElseIf FindString(eval$,"--",1)
eval$=ReplaceString(eval$,"--","+",1)
ElseIf FindString(eval$,"+-",1)
eval$=ReplaceString(eval$,"+-","-",1)
ElseIf FindString(eval$,"-+",1)
eval$=ReplaceString(eval$,"-+","-",1)
ElseIf FindString(eval$,"()",1)
MessageRequester("Alerte","Erreur parenthèses !",#PB_MessageRequester_Ok)
eval$="1"
Else
termine=#True
EndIf
Until termine
EndProcedure
calcul$="12*45-(sin(45)+int(10/3))/sqr(4)"; chaine à calculer
verifie_Parenthese(calcul$)
filtrer_signes(calcul$)
cherche_operateur(calcul$)
recherche_fonction()
Debug calcul$
par contre je suis intéressé par le code de cette magnifique calculatrice
Bon je change de programme je reprend le programme d'astrologie si personne ne m'en pond un avant
A+