calculette simple

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

calculette simple

Message par Patrick88 »

Code : Tout sélectionner

;; ce programme affiche le resultat d'une expression arithmétique contenant des additions et des soustractions

;; extrait du livre :Algorithme en C++ - Collection Sybex - Pearson Education - ISBN : 2-7440-7173-0

;; convertit par Patrick88 le 29 / 08 / 07 pour le forum purebasic français

Enumeration
  #FEN
    #G_TXT_EXPRESSION
    #G_STR_EXPRESSION
    #G_BUT_CALCUL
    #G_TXT_RESULTAT
    #G_STR_RESULTAT
EndEnumeration

Procedure.s calcul(chaine_a_calculer.s)
  nb.l = 0
  indice.w=0
  chiffre.b = 0
  somme.l = 0
  signe.s = "+"
  caract.s = ""
	
  For indice = 1 To Len(chaine_a_calculer) ;; on parcours la chaine du premier au dernier caractère
    caract = Mid(chaine_a_calculer,indice,1) ;; pour chaque position dans la chaine 
		                                         ;; on extrait le caractère correspondant
    Select Asc(caract	) ;; suivant le caractere faire
      Case 43,45 ; "+" "-" ;; somme ou soustraction selon le signe précedent
        ;; il faut additionner le nombre qui vient d'être lu à la somme actuelle 
        ;; pour produire la nouvelle somme
        If signe= "+" 
          somme = somme + nb
        Else
          somme = somme - nb	
        EndIf
				
        nb=0 ;; on remet nb à 0
        signe = caract ;; on mémorise le signe actuel = correspond à la prochaine
                       ;; opération à effectuer, quand le nombre suivant sera lu
			
      Case 48 To 57 ; "0" To "9" ;; on recupère la valeur numérique
        chiffre = Asc(caract) -48
        ;; il faut retrouver la valeur numérique correspondant au caractère et l'ajouter au nombre
        ;; cet ajout ressemble à une "concaténation" numérique , afin que ce chiffre soit ajouté en 
        ;; tant qu'unité au nombre précédent, lequel doit être considéré comme une dizaine
				
        nb = (nb*10)+chiffre	;; on calcul le nouveau nombre
				
    EndSelect
		
  Next	
  ;; quand on somme la dernière somme n'est pas faite
  If signe= "+"
    somme = somme + nb
  Else
    somme = somme - nb	
  EndIf
  ProcedureReturn Str(somme)
EndProcedure

Procedure Main()
  quit.b = 0
  event.l = 0
	
  If OpenWindow(#FEN,0,0,300,65,"Calculette simple",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(#FEN))
      TextGadget(#G_TXT_EXPRESSION,5,5,175,20,"Entrez une expression arithmétique :")
      StringGadget(#G_STR_EXPRESSION,GadgetX(#G_TXT_EXPRESSION)+GadgetWidth(#G_TXT_EXPRESSION)+5,5,115,16,"123-76+14")
      ButtonGadget(#G_BUT_CALCUL,10,30,100,20,"Calculer...")
      TextGadget(#G_TXT_RESULTAT,GadgetX(#G_BUT_CALCUL)+GadgetWidth(#G_BUT_CALCUL)+10,35,45,20,"Resultat :")
      StringGadget(#G_STR_RESULTAT,GadgetX(#G_TXT_RESULTAT)+GadgetWidth(#G_TXT_RESULTAT)+5,35,115,16,"")
    EndIf
		
    Repeat
      event = WaitWindowEvent()
		  
      Select event
        Case #PB_Event_CloseWindow
          quit = 1
        Case #PB_Event_Gadget
          If EventGadget() = #G_BUT_CALCUL
            SetGadgetText(#G_STR_RESULTAT,calcul(GetGadgetText(#G_STR_EXPRESSION)))
	
          EndIf	
      EndSelect
    Until quit > 0
		
  EndIf
EndProcedure

Main()
End
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

2 + 2 * 2 = 24
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

2 + 2 * 2 = 24
non mais sa calculette est comme il a indiquer elle calcul juste + et - et non * et / :wink: .


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

venom a écrit :
2 + 2 * 2 = 24
non mais sa calculette est comme il a indiquer elle calcul juste + et - et non * et / :wink: .
@++
:P
Au lieu de ca :
2 + 2 * 2
la calculatrice a donc vu ca :
2 + 22
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

exactement :wink:


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre