Gambas France BETA


Pas de compte ? Incription

Programmer une calculatrice...

1
AuteurMessages
spheris#1 Posté le 19/5/2016 à 20:47:37
Bonjour,
Ma question porte sur l'aspect programmation. (standart ou POO)
Nous savons tous très facilement coder une calculatrice à la façon basic like.

mais, ce petit projet est-il réalisable en programmation orienté objet ?
si oui, pourriez-vous nous expliquer en deux mots ou ligne de code comment on peut le réaliser?
J'ai donc pris un petit exemple que tous savent coder : une petite calculatrice avec la possibilité d'additionner
Pour les besoins de l'interface, 10 boutons de 0 à 9, une textbox1 pour le resultat, un bouton + , = , et effacer.

Pour la partie addition, je me lance et vous expose ma version du code.
Tous les boutons de 0 à 9 appartiennent au groupe lesboutons.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
' Gambas class file

PRIVATE valeur1 AS INTEGER 'premiere valeur stockée de l'addition

PUBLIC SUB lesboutons_Click()
TextBox1.Text = TextBox1.Text & LAST.tag
END

PUBLIC SUB bplus_Click()
valeur1 = CInt(TextBox1.Text)
TextBox1.Text = NULL
END

PUBLIC SUB begal_Click()
TextBox1.Text = CInt(TextBox1.Text) + valeur1
END

PUBLIC SUB befface_Click()
TextBox1.Text = NULL
valeur1 = 0
END

PUBLIC SUB Form_Open()
ME.Center
END


Essayez cette appli (lien de l'application pour gb3.8.4)

plusieurs questions surgissent pour mon code et je me demande si c'est correct:
a)la conversion cint(textbox1.text) est elle correcte? y'a t-il un autre moyen de procéder?
b) la phrase ''TextBox1.Text = CInt(TextBox1.Text) + valeur1'' vous choque t elle ?
un texte = un entier + un entier...
auriez-vous procédé de cette façon?
J'attends votre version du code
Merci pour vos réponses.
;)
Patrick#2 Posté le 20/5/2016 à 07:54:50
Bonjour,
Il me semble avoir lu quelque part sur la doc que comme gambas est un langage de haut niveau ce genre de raccourcit est autorisé, c'est l’interpréteur qui fait les conversions à notre place. On peut donc écrire :

TextBox1.Text = TextBox1.Text + valeur1
valeur1 = TextBox1.Text

Ça marche aussi, et ma foi c'est bien pratique.
vuott#3 Posté le 20/5/2016 à 12:00:31
Ne cedere ineluctabili possimus
a) la conversion cint(textbox1.text) est elle correcte? y'a t-il un autre moyen de procéder?

Tchao spheris, nous pouvons aussi rendre explicites les conversions.

Je proposerais:
1
Val(textbox1.text)



b) la phrase ''TextBox1.Text = CInt(TextBox1.Text) + valeur1'' vous choque t elle ?
un texte = un entier + un entier...

Je proposerais:
1
TextBox1.Text = CStr(Val(TextBox1.Text) + valeur1)

« Vita non suavis esse potest, nec Mors amara. »
Flachy Joe#4 Posté le 20/5/2016 à 18:18:32
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut !
Pour ma part je dirai que programmer les opérations sur les boutons est une perte de temps : il suffit d'ajouter le signe voulu au texte et passer le tout à l'interpréteur (en cochant le composant gb.eval).
Tous les boutons appartiennent au groupe lesboutons sauf "=" :
1
2
3
4
5
6
7
8
9
10
PUBLIC SUB lesboutons_Click()

TextBox1.Text = TextBox1.Text & LAST.Text

END
PUBLIC SUB ButtonEgal_Click()

TextBox1.Text = Eval(TextBox1.Text)

END
;) Flachy Joe ;)
spheris#5 Posté le 20/5/2016 à 20:10:12
Décidément tu m'épateras toujours Flachy Joe !
Cette solution est vraiment excellente !
Et en plus je découvre avec intérêt gb.eval.
traiter l'opération complète sans passer par une conversion CINT STR,etc, c'est vraiment un gros raccourci.
un must !
Merci pour l'info.
;)
Flachy Joe#6 Posté le 20/5/2016 à 21:56:02
Iguane : Il Gambas Uniquement pour Activer ses NEuronesAutrefois, en VB6, j'avais programmé une bibliothèque perso pour interpréter des expressions pour tracer des graph 3d de fonctions, on la trouve encore sur CodesSources : http://codes-sources.commentcamarche.net/source/29320-module-de-calcul ...
;) Flachy Joe ;)
spheris#7 Posté le 21/5/2016 à 09:34:22
Avec cette dll ,prends-tu en compte les priorités de la multiplication sur l'addition sans les parenthèses?
Flachy Joe#8 Posté le 21/5/2016 à 10:44:47
Iguane : Il Gambas Uniquement pour Activer ses NEuronesOui, regarde l'utilisation de la variable ExpPrio dans CreateFromString, elle prend les valeurs de Enum OpPriority.
C'était plus rapide que le vbscript pour l'utilisation que j'en avais mais je doute qu'un équivalant rivalise avec gb.eval.

NB : tu peux aussi utiliser la ligne de commande calc pour interpréter tes opérations, ça gère les nombres en précision arbitraire (essaye de calculer 2016^2016 par exemple...).

Si tu t’intéresses aux interpréteurs de commandes, tu peux aussi en trouver une ébauche dans ma source http://www.gambasforge.org/code-43-cado--application-de-dessin-par-ordinateur.html . Pour le coup c'est tout en POO avec une gestion dynamique de la liste des commandes.
;) Flachy Joe ;)
1