Calculatrice

manidis Messages postés 13 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 19 août 2012 - 24 févr. 2010 à 01:31
manidis Messages postés 13 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 19 août 2012 - 24 févr. 2010 à 11:34
Bonjour tout le monde!!
Pourriez-vous m'aider à concevoir une calculatrice avec vb.net (visual studio 2008) en mode console?
Je vous remerci d'avance car j'ai essayé mais ç ane marche pas.
Voici ce que j'ai déjà fait:
Imports System.Console
Module Module1
Function OPERANDE(ByVal valeur1 As Integer, ByVal valeur2 As Integer, ByVal oper As Integer) As Integer
Select Case oper
Case "-"
Return valeur1 - valeur2
Case "+"
Return valeur1 + valeur2
Case "/"
If valeur2 = 0 Then
MsgBox("Division par zero est impossible")
Else
Return valeur1 / valeur2
End If
Case "*"
Return valeur1 * valeur2

End Select


End Function
Function initialiser(ByVal val1 As Integer, ByVal val2 As Integer, ByVal op As Integer, ByVal opera As Boolean) As Integer
' Dim opera As Boolean
Write("valeur1: ")
val1 = ReadLine()
Write("valeur2: ")
val2 = ReadLine()
op = OPERANDE(val1, val2, opera)
If op <> 0 Then
Write("op")
Write("Voulez vous continuer? o/n")
opera = ReadLine()
Else
Return 0
End If
End Function

vous pouvez m'envoyer meme le code dans ma boîte e-mail:
manirakizadismas@yahoo.fr

Merci d'avance

10 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 févr. 2010 à 09:43
pas lu plus loin, mais :


[...] ByVal oper As Integer) As Integer 
    Select Case oper 
        Case "-" 


Comment veux tu qu'un Integer valle "-" ou "+" ??




Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
mdevaux62 Messages postés 111 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 17 novembre 2012 7
24 févr. 2010 à 10:06
Bonjour,
1) tu ne demandes pas la saisie du signe de l'opération.
2) tu passes ce signe en integer (?) alors que dans la fonction OPERANDE ton select case porte sur des chaînes ?
3) Tu n'affiches pas le résultat mais la chaîne "op"
4) Pourquoi tester 0 en retour ? 0 peut être une réponse valable : 3 - 3 = 0

Je pense que tu dois revoir ta saisie pour intégrer le signe de l'opération.
Ensuite ta fonction Operande devrait selon moi renvoyer une chaîne qui pourrait contenir le résultat de l'opération (Résultat : nn) ou un message d'alerte (Division par 0 impossible)
Enfin,après l'affichage du résultat,demander si on continue.
Pour la forme je mettrais tout cela dans une boucle Do se terminant par Loop Until OnContinue="N"

Imports System.Console

Module Module1

    Sub Main()
        Dim val1 As Integer
        Dim val2 As Integer
        Dim opera As String
        Dim op As String
        Dim onContinue As String
        Do
            'Saisie de l'opération
            Write("valeur1: ")
            val1 = ReadLine()
            Write("valeur2: ")
            val2 = ReadLine()
            Write("Operation :")
            opera = ReadLine()
            'Calcul
            op = Operande(val1, val2, opera)
            Write(op)
            'On continue ?
            Write(vbCrLf & "On Continue O/N ? ")
            onContinue = ReadLine()
        Loop Until onContinue.ToUpper = "N"
    End Sub

    Function Operande(ByVal valeur1 As Integer, ByVal valeur2 As Integer, ByVal oper As String) As String
        Dim chaine As String = ""
        Select Case oper
            Case "-"
                chaine "Résultat " & (valeur1 - valeur2).ToString
            Case "+"
                chaine "Résultat " & (valeur1 + valeur2).ToString
            Case "/"
                If valeur2 = 0 Then
                    chaine = "La division par zero est impossible"
                Else
                    chaine "Résultat " & (valeur1 / valeur2).ToString
                End If
            Case "*"
                chaine "Résultat " & (valeur1 * valeur2).ToString
        End Select
        Return chaine
    End Function

End Module
0
manidis Messages postés 13 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 19 août 2012
24 févr. 2010 à 10:37
Merci mdvaux62
Mais une autre chose mon frère!!!
Tu peux m'aider à générer les priorités et les paranthèses toujours avec cette calculatrice en mode console?
Merci d'avance.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 févr. 2010 à 10:41
quelles parentheses, puisque tu saisis operande 1 ; opérande 2 puis l'operateur.....

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
manidis Messages postés 13 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 19 août 2012
24 févr. 2010 à 11:08
Normalement, je voulais créer d'abord une calculatrice simple et une fois la terminé créer par la suite celle qui gère les priorités et les parenthèses.
Tu comprend??
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 févr. 2010 à 11:23
pour gérer parenthèses ou priorité, il te faut changer complètement ta facon de saisir tes operations...

là, tu fait de l'unitaire

il te faut saisir toute une expression

et l'évaluer


des codes existent pour faire de l'eval ...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
manidis Messages postés 13 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 19 août 2012
24 févr. 2010 à 11:24
Dans une calculatrice normale, on peut saisir plusieurs valeurs!!!
N'est-ce pas? Mais pour mon cas, j'ai voulu commencer d'abord par celle qui gère deux opérations seulement. Merci pour votre aide car j'y suis parvenu mais pour le moment, je voudrais qu'on créer celle qui peut permettre à l'utilisateur de saisir plusieurs opérations tout en gérant les priorités et les parenthèse sen mode console
0
manidis Messages postés 13 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 19 août 2012
24 févr. 2010 à 11:27
hello!!!
ces codes existent où?
Je viens juste de commencer à apprendre à programmer avec vb.net et je voudrais que vous m'aidiez à avancer car je suis bloqué.
Si vous pouvez me donner ce code comme ça, je vais le lire et comprendre afin de m'améliorer pour ce que mon développement futur.
N'est-ce pas?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 févr. 2010 à 11:33
http://www.google.fr/search?q=math+vb.net+eval

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
manidis Messages postés 13 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 19 août 2012
24 févr. 2010 à 11:34
Je suis au niveau d'ici menant:
Imports system.console

Module Module1
Function CALOPERANDE(ByVal pval1 As Integer, ByVal poper As Char, ByVal pval2 As Integer) As Integer
Select Case poper
Case "+"
Return pval1 + pval2
Case "-"
Return pval1 - pval2
Case "*"
Return pval1 * pval2
Case "/"
If pval1 = 0 Then
Return 0
Else
Return pval1 / pval2

End If


End Select
End Function
Sub ADDTOARRAY(ByRef pArray() As String, ByVal pvaleur As String) 'gestion de tableau de façon dynamique
If IsNothing(pArray) Then 'si le tableau pArray est vide
ReDim pArray(0) 'redimentionner le tableau pArray
Else
ReDim Preserve pArray(pArray.Length) 'redimentionner le tableau pArray sans l'initialiser
End If
pArray(pArray.Length - 1) = pvaleur 'Numéro be cellule du tableau.-1 car un tableau commence par l'indice zéro


End Sub
Function SPLIT(ByVal poperation As String) As String()
Dim lIndexprev, lIndexNext As Integer 'avec Next:index suivant
Dim loperateur, loperande As String
Dim loperation As String = poperation.Replace(" ", String.Empty) 'le string.Empty envoie un vide
Dim ltabterme() As String
lIndexprev = 0 'Index précédent
lIndexNext = loperation.IndexOfAny("+-*/()", lIndexprev) 'Rechercher dans l'importe quel chaine (.IndexofAny)
While lIndexNext > -1
loperateur = loperation.Substring(lIndexNext, 1)
If lIndexNext > lIndexprev Then
loperande = loperation.Substring(lIndexprev, lIndexNext - lIndexprev) 'extrait de la sous chaine dans la chaine principale
Else
loperande = String.Empty
End If

If loperande.Trim <> String.Empty Then
ADDTOARRAY(ltabterme, loperande)
End If
lIndexprev = lIndexNext + 1 'on avance à l'indice suivant'
lIndexNext = loperation.IndexOfAny("+-*/()", lIndexprev)
If lIndexNext = -1 AndAlso lIndexprev < loperation.Length Then
loperande = loperation.Substring(lIndexprev, loperation.Length - lIndexprev)
ADDTOARRAY(ltabterme, loperande)
End If
End While
Return ltabterme

End Function
0
Rejoignez-nous