Page 2 sur 2

Publié : sam. 11/sept./2004 15:08
par Backup
ben tu peut pas reserver les lettres "ABCDEF" pour l'exa et pas les utiliser pour des variables ?? 8O
ou bien forcer a ce que les variable soit en 2 lettres minimum !?

mais bon je cause sans savoir j'ai mem pas encore essaye la calculette :oops:

Publié : sam. 11/sept./2004 16:02
par julien
Encore un bon prog... par contre comment gère tu les skins ?

Publié : sam. 11/sept./2004 18:55
par Oliv
ahhh enfin :D . Pour les valeurs HEXA<>DECIMAL<>BINAIRE c'est possible : il y a un post là dessus dans la section trucs et astuces, par contre pour les variables je ne sais pas.

Publié : sam. 11/sept./2004 20:10
par Le Soldat Inconnu
si dans les calculs, il faut les écrires sous la forme Hex(154121) et Bin(0111001), tu en penses quoi ?

La gestion des skins, c'est pas tellement compliqué, au lieu de faire une fenêtre avec des dimensions basées sur des constantes, les dimension sont variables en fonction de la taille de l'image du skin.

Publié : sam. 11/sept./2004 20:18
par Flype
j'en pense que ca me derange pas et il est vrai qu'il doit etre plus facile pour toi de le programmer comme une fonction que comme 0x ou $ etc...

Publié : sam. 11/sept./2004 22:02
par Le Soldat Inconnu
ceux qui sont intéressés par le code, au fait, il suffit de m'envoyer un mail ;)

Publié : mar. 14/sept./2004 18:59
par Backup
moi je voudrai juste comprendre un truc ! 8O

ta fenetre est juste un openwindowscreen ?
dans lequel tu installerai un decors peut etre sous forme de sprite ?

mais comment recupere tu les event souris pour savoir ce qui est cliqué ??

moi ça m'interresse pour adapter ce principe sur un clavier comm le piano
de Jacobus ...
:)

bref c'est pas tant le code de ta calculette qui me branche, mais le principe d'affichage et gestion de l'interaction avec l'utilisateur ! :?

Publié : mer. 15/sept./2004 17:55
par Le Soldat Inconnu
seul l'écran est un openwindowedscreen, les boutons, c'est ma lib ToolBarXP

et après, pour repérer les clics, des tests sur la position de la souris (la croix pour fermer et le déplacement du curseur dans le texte)

Publié : mer. 15/sept./2004 18:22
par Backup
Merci !!

ça me donne envie de telecharger ta lib :D

Publié : mer. 15/sept./2004 20:18
par Good07
Bonjour à tous !

Alors là je suis grillé 8O . 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. :lol:
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 :wink:

Bon je change de programme je reprend le programme d'astrologie si personne ne m'en pond un avant :lol:

A+

Publié : mer. 15/sept./2004 20:51
par Good07
Bonsoir !

Je viens de me servir de cette superbe calculatrice et rien à dire du beau travail comme d'habitude :lol:

Par contre j'ai trouvé une erreur dans les calculs :lol: :lol:

3+((87-196)+entier(10/3))*2--4 devrai donner comme résultat -205 et non -209 8O

Mais c'est quand même super !

A+

Publié : sam. 18/sept./2004 23:03
par Le Soldat Inconnu
exact, je vais corriger ceci, ce sera vite fais, il suffit de remplacer les -- dans le calcul par un + et gueuler sur l'utilisateur si il tape --4 comme formule car ça plante le programme

au fait, j'ai encore modifié pour les skin, on peut mettre les boutons dans l'ordre que l'on veut

pour faire par exemple
789
456
123
qu'est-ce qu'on dis Guimauve, fait un poutou :roll: beurk, pas avec la langue :jesors:

Publié : dim. 19/sept./2004 3:19
par Guimauve
Super !!

Pas de bizou, juste un merci ! Si tu étais une fille ça serait très différent. :roll:

Et à propos des skins que je t'ai envoyé ?

+A

Guimauve

Publié : dim. 19/sept./2004 20:20
par Le Soldat Inconnu
oui, tu aurais pu modifier les couleurs, tu n'as absoluments pas touché au fichier ini qui pourtant paramètre beaucoup de chose :D

A toi de voir si tu veux les modifier.

De toute façon, je les ajouterai sur mon site dès que la biblio de skin sera en place :wink:
Après, on pourra mettre à jour si tu fais évoluer tes skins