Logiciels réalisé en gambas par des contributeurs actifs.

logiciels

une calculatrice ++ en gambas

Rédigé par spheris Aucun commentaire
Classé dans : accessoire, gambas 3, Logiciels, mathematique Mots clés : aucun

Bonjour,
Valaquarus nous propose ici une calculatrice en gambas3.

La version téléchargeable originale fonctionne avec gambas 3.15 ou supérieur.
 
Pour utiliser cette application sous gambas 3.14.3 ou inférieur, téléchargez le fichier source ici .
Merci à Philippe pour cette appli.
Le code de l'application ici :

' Gambas class file

PRIVATE i AS INTEGER '<---------------------------------------------- indice du tableau de valeurs
PRIVATE fValeur AS NEW Float[] '<------------------------------------ tableau de float, de taille indéfinie
PRIVATE signe AS STRING  '<------------------------------------------ signe des opérations
PRIVATE iVirgule AS INTEGER   '<------------------------------------- pour suivre la virgule
PRIVATE bChiffre AS BOOLEAN   '<------------------------------------- drapeau boolean indiquant qu'un chiffre est rentré
PRIVATE iPosVirgule AS INTEGER   '<---------------------------------- position de la virgule dans le mot
PRIVATE iLongMot AS INTEGER   '<------------------------------------- longeur du mot
PRIVATE iNextCharPos AS INTEGER  '<---------------------------------- position du prochain caractère

'<------------------------------------------------------------------- création d'un Group pour les chiffres nommé Chiffres
'<------------------------------------------------------------------- création d'un Group pour les opérations nommé Signes

PUBLIC SUB btnClose_Click()

   ME.Close()

END

PUBLIC SUB Form_Open()

   i = 0 '<---------------------------------------------------------- initialisation diverse
   iVirgule = 0

END

PUBLIC SUB btnEffacer_Click()

   tbAffichage.Text = String.Mid(tbAffichage.Text, 1, -1)
   ' tbAffichage.Text = String.Left(tbAffichage.Text, -1)
   ' Print "-text-"; tbAffichage.Text
   iLongMot -= 1
   IF iLongMot > 0 THEN Insertion() ELSE RETURN
   IF iPosVirgule = iLongMot THEN iVirgule = 0

END

PUBLIC SUB Insertion()

   fValeur.Add(Val(tbAffichage.Text), i) '<------------------------ récupération de la valeur affichée
   posVirgule(tbAffichage) '<------------------------------------- position de la virgule dans le mot
   bChiffre = TRUE   '<------------------------------------------- drapeau levé
   ' Print i; "-insert- "; fValeur[i]

END

PUBLIC SUB Chiffres_Click()   '<------------------------------------- évènement _Click() pour le Group Chiffres

   IF LAST.text = "." OR LAST.text = "," THEN iVirgule += 1 '<------- une seule virgule possible
   IF iVirgule > 1 THEN
      RETURN
   ELSE
      tbAffichage.Text &= LAST.text '<------------------------------- concaténation dans textbox1
      Insertion() '<------------------------------------------------- insertion de la valeur dans tableau
      ' bChiffre = True   '<------------------------------------------- drapeau levé
   ENDIF

END

PUBLIC SUB Signes_Click()  '<---------------------------------------- évènement _Click() pour le Group Signes

   IF bChiffre = TRUE THEN INC i ELSE RETURN
   SELECT CASE LAST.Text   '<---------------------------------------- en fonction du dernier texte des signes
      CASE ELSE
         fValeur.Add(fValeur[i - 1], i) '<--------------------------- on récupère la deuxième valeur (inc i au début)
         signe = LAST.Text '<---------------------------------------- on récupère signe pour l'évènement btnEgal_Click()
         tbAffichage.Clear
         bChiffre = FALSE
   END SELECT

END

PUBLIC SUB btnEgal_Click() '<---------------------------------------- évènement _Click() lors de l'appui sur "="

   IF signe <> "" THEN INC i ELSE RETURN

   SELECT CASE signe '<---------------------------------------------- les opérations à faire en fonction du signe cliqué
      CASE "+"
         fValeur.Add(fValeur[i - 2] + fValeur[i - 1], i)
      CASE "-"
         fValeur.Add(fValeur[i - 2] - fValeur[i - 1], i)
      CASE "/"
         IF fValeur[i - 1] <> 0 THEN fValeur.Add(fValeur[i - 2] / fValeur[i - 1], i) ELSE RETURN  '<-- pas de division par zéro
      CASE "*"
         fValeur.Add(fValeur[i - 2] * fValeur[i - 1], i)
   END SELECT

   tbAffichage.text = Str$(fValeur[i])   '<-------------------------- localisation Europa
   Insertion() '<---------------------------------------------------- insertion de la valeur dans le tableau
   signe = ""  '<---------------------------------------------------- pour empêcher de revenir sans passer par un autre signe
   iVirgule = 0
   ' Print i; " -égal- "; fValeur[i]

END

PUBLIC SUB Form_KeyPress() '<---------------------------------------- saisie clavier

   DIM vText AS VARIANT
   DIM cChiffres AS String[] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ","]
   DIM cSignes AS String[] = ["+", "-", "*", "/"]

   vText = Key.Text  '<---------------------------------------------- touche pressée

   IF vText MATCH "." THEN vText = Replace(vText, ".", ",") '<------- localisation Europa

   IF cChiffres.Exist(vText) THEN
      LAST.text = vText
      Chiffres_Click()
   ENDIF

   IF cSignes.Exist(vText) THEN
      LAST.text = vText
      Signes_Click()
   ENDIF

   ME.Text = "Calculatrice ++"   '<---------------------------------- pour ne pas afficher vText dans le titre du formulaire

   IF key.Code = key.Return OR key.Code = key.Enter THEN btnEgal_Click()
   IF key.code = Key.Esc THEN btnCancel_Click()
   IF Key.Code = Key.Backspace OR Key.Code = Key.Delete THEN btnEffacer_Click()

END

PUBLIC SUB posVirgule(monObjet AS OBJECT)

   SELECT CASE System.Language
      CASE "en_US.UTF-8"
         iPosVirgule = String.RInStr(monObjet.Text, ".", 0)
         iNextCharPos = iPosVirgule + 1
         iLongMot = String.Len(monObjet.Text)
      CASE ELSE   '<----------------------------------------------------------- pour Europa
         iPosVirgule = String.RInStr(monObjet.Text, ",", 0) '<------------------ pour déterminer la position de la virgule
         iNextCharPos = iPosVirgule + 1   '<----------------------------------- position du prochain caractère
         iLongMot = String.Len(monObjet.Text)   '<----------------------------- longeur du mot
   END SELECT
   ' Print iPosVirgule; " ~ "; iLongMot

END

PUBLIC SUB btnCancel_Click()

   tbAffichage.Clear
   i = 0
   iVirgule = 0
   fValeur.Clear
   bChiffre = FALSE

END
Fil RSS des articles de cette catégorie