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

Lod.

[Ajuda] Calculadora

Recommended Posts

Lod.

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


Programador/WebDeveloper:

Website - Behance - LinkedIn

Share this post


Link to post
Share on other sites
Pwyll

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:

Share this post


Link to post
Share on other sites
Lod.

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


Programador/WebDeveloper:

Website - Behance - LinkedIn

Share this post


Link to post
Share on other sites
Pwyll

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.

Share this post


Link to post
Share on other sites
zoep

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

Share this post


Link to post
Share on other sites
nokPT

É 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


Ricardo Timóteo

Share this post


Link to post
Share on other sites
Hellblazer

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:


There are two ways to write error-free programs; only the third one works.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.