Téléchargé 40 fois
Vote des utilisateurs
2
1
Détails
Licence : Non renseignée
Mise en ligne le 29 décembre 2010
Langue : Français
Référencé dans
Navigation
Une petite calculatrice
Une petite calculatrice
Source, sur les bases d'une calculatrice en VB6
Bonjour ce Week-end Pascal s'annonçant pluvieux
Je vous propose, un petite exercice ..
la création d'un calculatrice en VB6..
Pour ouvrir le BAL, voici ma première création :
http://bbil.developpez.com/sources/vb6/calcVB6-01/
Elle est simple ,pas forcément pas terminée,.. , un peu tordue dans la gestion des flags de mémorisation ....Mais en gros elle fonctionne...
Je vous propose d'utiliser cette discussion
soit pour commenter ce premier source..
soit pour proposer vos créations ..
Les meilleures créations trouverons leur place dans notre page source ..
à vos claviers
Je vous propose, un petite exercice ..
la création d'un calculatrice en VB6..
Pour ouvrir le BAL, voici ma première création :
http://bbil.developpez.com/sources/vb6/calcVB6-01/
Elle est simple ,pas forcément pas terminée,.. , un peu tordue dans la gestion des flags de mémorisation ....Mais en gros elle fonctionne...
Je vous propose d'utiliser cette discussion
soit pour commenter ce premier source..
soit pour proposer vos créations ..
Les meilleures créations trouverons leur place dans notre page source ..
à vos claviers
Amusons nous alors.
Un clone de la calculette 'standard' windows, la aussi largement améliorable
http://bidou.developpez.com/outils/calc.frm
Un clone de la calculette 'standard' windows, la aussi largement améliorable
http://bidou.developpez.com/outils/calc.frm
Personellement, j'ai toujours regrété qu'il n'existe pas de calculatrice programmable(Un comble pour un ordinateur). C'est un projet que j'avais abordé il y a bien lngtemps et que je n'ai jamais fini, mais il avait produit mon composant DiEval6.ocx. Seul rescapé de mes divagations d'alors.
c'est bien cette discussion. elle m'a permis de sortir les vieux projets du carton.
ce n'est pas vraiment une calculatrice. mais peut servir comme telle. on peut lui faire faire autre chose.
Note: faut que MSscriptcontrol soit installé
ce n'est pas vraiment une calculatrice. mais peut servir comme telle. on peut lui faire faire autre chose.
Note: faut que MSscriptcontrol soit installé
merci medkarim pour ta contribution j'ai rajouté une image pour donnez des idées à d'autres contributeurs ...
petite participation de ma part.
La calculatrice la plus SIMPLE qu'il puisse exister, c'est d'ailleurs le tout premier programme que j'ai développé à l'école cette année !
Et ici une version un peu plus améliorée mais faites pas attention au design, je m'en fou un peu de ça dans mes débuts, j'essaie que le code soit impeccable
Voili voilou
La calculatrice la plus SIMPLE qu'il puisse exister, c'est d'ailleurs le tout premier programme que j'ai développé à l'école cette année !
Et ici une version un peu plus améliorée mais faites pas attention au design, je m'en fou un peu de ça dans mes débuts, j'essaie que le code soit impeccable
Voili voilou
J'ai moi aussi un peut travailler sur une calculette. C'est pas encore parfait, mais je compte beaucoup sur votre aide et vos critiques pour la parfaire.
Il s'agit d'une version .Net tu devrais poste ton code la partie "Téléchargez" de VB.Net ici :
http://vb.developpez.com/telecharger...rie/324/Divers
http://vb.developpez.com/telecharger...rie/324/Divers
C'est un peut trop tard pour moi mais rien empeche de mettre ma contribution "il s'agit d'un interpréteur d'expression "
bienque on ne utilise ce genre de code que dans rare cas.. créer un calculateur reste une excercice de style rien de plus
classe CLexer
classe CExpression
Pour tester
bienque on ne utilise ce genre de code que dans rare cas.. créer un calculateur reste une excercice de style rien de plus
classe CLexer
Code : | Sélectionner tout |
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | Option Explicit Private Declare Function RtlMoveMemory Lib "kernel32" (ByVal Dest As Long, _ ByVal Source As Long, ByVal iCount As Long) As Long Private Declare Function GetLocaleInfoA Lib "kernel32" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As Long, ByVal cchData As Long) As Long Private Declare Function GetThreadLocale Lib "kernel32" () As Long Const LOCALE_SDECIMAL = &HE Public Enum TokenType tkInvalid = 1000 tkNone = 0 tkWhite = 1 tkNumber = 2 tkIdent = 3 tkOpPow = 4 tkOpenExp = 5 tkCloseExp = 6 tkOpenBra = 7 tkCloseBra = 8 tkOpNot = 9 OpTermBegin = 100 tkOpOr = 101 tkOpXor = 102 tkOpPlus = 103 tkOpMinus = 104 OpTermEnd = 105 OpFacBegin = 200 tkOpMul = 201 tkOpMod = 202 tkOpDivF = 203 tkOpDiv = 204 tkOpAnd = 205 tkOpShl = 206 tkOpShr = 207 OpFacEnd = 208 End Enum Private DecimalSep As Long Private fCode As String Private fPtr As Long Private fLen As Long Private fPos As Long Private fCopyStart As Long Private Char As Long Public CurrToken As TokenType Private Sub Class_Initialize() 'Récupère le séparateur décimal If GetLocaleInfoA(GetThreadLocale, LOCALE_SDECIMAL, VarPtr(DecimalSep), 4) = 0 Then DecimalSep = 44 End If End Sub Private Function GetChar(ByVal Idx As Long) As Long If (Idx < fLen) And (Idx >= 0) Then RtlMoveMemory VarPtr(GetChar), fPtr + Idx * 2, 1 End If Char = GetChar End Function Private Function IdentType(ByVal AIdent As String) As TokenType Select Case AIdent Case "MOD": IdentType = tkOpMod Case "DIV": IdentType = tkOpDiv Case "AND": IdentType = tkOpAnd Case "OR": IdentType = tkOpOr Case "XOR": IdentType = tkOpXor Case "NOT": IdentType = tkOpNot Case "SHL": IdentType = tkOpShl Case "SHR": IdentType = tkOpShr Case Else IdentType = tkIdent End Select End Function Private Function CharType(ByVal Char As Long) As TokenType Select Case Char Case 97 To 122, 65 To 90 ' a..z,A..Z alpha CharType = tkIdent Case 1 To 32: CharType = tkWhite 'blanc Case 48 To 57: CharType = tkNumber '0..9 Case 45: CharType = tkOpMinus '- Case 43: CharType = tkOpPlus '+ Case 42: CharType = tkOpMul '* Case 47: CharType = tkOpDivF '/ Case 94: CharType = tkOpPow '^ Case 40: CharType = tkOpenExp '( Case 41: CharType = tkCloseExp ') Case 91: CharType = tkOpenBra '[ Case 93: CharType = tkCloseBra '] Case 0: CharType = tkNone '#0 Case Else CharType = tkInvalid End Select End Function Private Sub LoadCharSet(ByVal AG As TokenType) While CharType(GetChar(fPos + 1)) = AG fPos = fPos + 1 Wend End Sub Private Function NextChar() As Integer fPos = fPos + 1 NextChar = GetChar(fPos) End Function Public Function NextToken() As TokenType While CharType(GetChar(fPos)) = tkWhite fPos = fPos + 1 Wend fCopyStart = fPos CurrToken = CharType(Char) Select Case CurrToken Case tkIdent LoadCharSet tkIdent Case tkNumber '[0-9]+ (.[0-9]+)? (E|e(-|+)? [0-9]+)? LoadCharSet tkNumber If Char = DecimalSep Then ', or . NextChar LoadCharSet tkNumber End If If (Char = 69) Or (Char = 101) Then 'E e NextChar If (GetChar(fPos + 1) = 43) Or (Char = 45) Then ' - + NextChar End If LoadCharSet tkNumber End If End Select If fPos < fLen Then fPos = fPos + 1 End If If CurrToken = tkIdent Then CurrToken = IdentType(Token) End If NextToken = CurrToken End Function Public Property Let Text(ACode As String) fCode = ACode fPtr = StrPtr(fCode) fLen = Len(fCode) fPos = 0 fCopyStart = 0 End Property Public Property Get Token() As String Dim L As Long L = fPos - fCopyStart If (L <= fLen) And (L >= 0) Then Token = Space(L) RtlMoveMemory StrPtr(Token), fPtr + fCopyStart * 2, L * 2 Token = UCase$(Token) End If End Property Public Property Get Position() As String Position = fPos End Property |
Code : | Sélectionner tout |
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | Option Explicit Private fLexer As New CLexer Private Property Get CurrentToken() As TokenType CurrentToken = fLexer.CurrToken End Property Private Function NextToken() As TokenType NextToken = fLexer.NextToken SynErr fLexer.CurrToken = tkInvalid End Function Private Function IsUnairyOp(ByVal AOP As TokenType) As Boolean Select Case AOP Case tkOpNot, tkOpPlus, tkOpMinus IsUnairyOp = True End Select End Function Private Function IsFacOperator(ByVal AOP As TokenType) As Boolean IsFacOperator = ((AOP > OpFacBegin) And (AOP < OpFacEnd)) End Function Private Function IsTermOperator(ByVal AOP As TokenType) As Boolean IsTermOperator = ((AOP > OpTermBegin) And (AOP < OpTermEnd)) End Function '<Factor> ::= (+|-)<Expression>| NUMBER | <Simple Call> | CONSTANT |'('<Expression>')' | '[' |
Code : | Sélectionner tout |
1 2 | Dim D As New CExpression MsgBox D.EvalExp("10+20/2") |
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.