• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Lod.

[Ajuda] Calculadora

8 mensagens neste tópico

Estou a fazer uma calculadorazinha, mas estão me a surgir os erros.

Por exemplo somo 40 com 10 e dá 40, ou seja dá-me sempre o primeiro valor inserido.

Preciso de ajuda.

Aqui fica o código:

Public Class Form1
    Dim co As Boolean = True
    Dim numero(10) As String
    Dim valor(10) As Double
    Dim resultado As Double
    Dim i As Byte
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If co = True Then
            numero(i) = 1
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 1
            Me.TextBox1.Text = numero(i)
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If co = True Then
            numero(i) = 2
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 2
            Me.TextBox1.Text = numero(i)
        End If
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If co = True Then
            numero(i) = 3
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 3
            Me.TextBox1.Text = numero(i)
        End If
    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If co = True Then
            numero(i) = 4
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 4
            Me.TextBox1.Text = numero(i)
        End If
    End Sub

    Private Sub Button17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button17.Click
        Me.TextBox1.Text = Nothing
        numero(i) = Nothing
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        If co = True Then
            numero(i) = 5
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 5
            Me.TextBox1.Text = numero(i)
        End If
    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        If co = True Then
            numero(i) = 6
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 6
            Me.TextBox1.Text = numero(i)
        End If
    End Sub

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        If co = True Then
            numero(i) = 7
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 7
            Me.TextBox1.Text = numero(i)
        End If
    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        If co = True Then
            numero(i) = 8
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 8
            Me.TextBox1.Text = numero(i)
        End If
    End Sub

    Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
        If co = True Then
            numero(i) = 9
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 9
            Me.TextBox1.Text = numero(i)
        End If
    End Sub

    Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
        If co = True Then
            numero(i) = 0
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & 0
            Me.TextBox1.Text = numero(i)
        End If
    End Sub

    Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
        If co = True Then
            numero(i) = ","
            co = False
            Me.TextBox1.Text = numero(i)
        Else
            numero(i) = numero(i) & ","
            Me.TextBox1.Text = numero(i)
        End If
    End Sub

    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        valor(i) = Val(numero(i))
        i = i + 1
    End Sub

    Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click
        For i = 0 To 10
            resultado = resultado + valor(i)
        Next
        Me.TextBox1.Text = resultado
    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não vou fazer o TPC, pois desse modo nao aprendias nada, o que era contraprudecente, mas aqui vão umas dicas ....

Em vez de um Sub por algarismo experimenta : (atenção que a propriedade text do botao tem que ser o algarismo. ex: 1, 2 ... 0 )

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, _
     Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click, Button10.Click
        Dim number As Integer = CInt(CType(sender, Button).Text)
        If co = True Then
            numero = number
            co = False
            Me.TextBox1.Text = numero
        Else
            numero = numero & number
            Me.TextBox1.Text = numero
        End If
    End Sub
end class

Mais umas dicas...

Para que os arrays?

Que tal dar nomes aos objectos.

Agora, sem mexer muito no teu codigo aqui vai a soma. Não esta perfeito, mas indica-te algumas direccoes.

Public Class Form1
    Dim co As Boolean = True
    Dim numero As Double
    Dim valor As Double = 0

    Dim resultado As Double = 0

    Private Sub btnAlgarismo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, _
     Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click, Button10.Click
        If co = False Then Me.TextBox1.Text = "" : co = True
        Me.TextBox1.Text &= CInt(CType(sender, Button).Text)
    End Sub

    Private Sub btnC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnC.Click
        Me.TextBox1.Text = Nothing
        numero = Nothing
    End Sub

    Private Sub btnMais_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMais.Click
        valor += Me.TextBox1.Text
        Me.TextBox1.Text = valor
        co = False
    End Sub

    Private Sub btnDecimal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecimal.Click
        Me.TextBox1.Text &= ","
    End Sub

    Private Sub btnIgual_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIgual.Click
        Me.TextBox1.Text = valor + CInt(Me.TextBox1.Text)
        valor = 0
        co = False
    End Sub
end class

Continuacao de bom trabalho :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não vou fazer o TPC, pois desse modo nao aprendias nada, o que era contraprudecente, mas aqui vão umas dicas ....

Não é TPC :cheesygrin:

Eu é que me decidi adientar em relação aos meus colegas e estou aqui a tentar trabalhar com isto.

Obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando disse TPC, estava a brincar, não leves a mal :cheesygrin: So que acho que se postar o codigo simplesmente acabas por nao aprender nada, e quando andamos a tentar fazer algo, por muitos erros que facamos estamos a aprender.

Vai mostrando a evolucao, e dispoe, estou ca para ajudar no que conseguir.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma grande ajuda, que foi como fiz a minha, é tipo, quando carregas no botao por exemplo da soma, ele manda para uma variavel a dizer que o tipo é soma, depois no botao = fazes um select case, tipo isto !

ex botao +:

    Private Sub BT_mais_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_mais.Click
        var_num1 = var_num1 + Val(TXT_numeros.Text)
        TXT_numeros.Text = ""
        tipo = "mais"
    End Sub

depois o select case:

   Private Sub BT_igual_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_igual.Click
        Select Case tipo
            Case "mais"
                var_resultado = var_num1 + Val(TXT_numeros.Text)
            Case "menos"
                var_resultado = var_num1 - Val(TXT_numeros.Text)
            Case "vezes"
                var_resultado = var_num1 * Val(TXT_numeros.Text)
            Case "dividir"
                var_resultado = var_num1 / Val(TXT_numeros.Text)
            Case "percentagem"
                var_resultado = var_num1 * (Val(TXT_numeros.Text) / 100)



        End Select

        TXT_numeros.Text = var_resultado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É natural que te dê sempre o 1º número:

Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click
        For i = 0 To 10
            resultado = resultado + valor(i)
        Next
        Me.TextBox1.Text = resultado
    End Sub
End Class

Quando é que metes algum dado em valor(i)? Se não metes é zero e QualquerNúmero + Zero é igual a QualquerNúmero

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lod. começa a utilizar nomes intuitivos para os controlos :D se fores a ver com aquela catréfada de butões sem nomes intuitivos quem nunca viu o form nem construiu o codigo tem de estar a tentar entender o que faz cada butão :) e ate tu proprio daqui a uns tempos se nao mexeres ai quando fores voltar a ler vais te ver grego :D

É uma boa prática da programação a seguir há risca :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora