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

BurnInEvil

[Resolvido] Calculadora simples

Recommended Posts

BurnInEvil

Boas

Não sei se ja foi postado algum topico que tenha a ver com a minha questão.

Estou a começar de trabalhar com o Visual Basic e estou a tentar fazer uma calculadora simples, por iniciativa propria mas tenho algumas duvidas.

Por agora a minha calculadora está assim:

http://img641.imageshack.us/img641/8765/calculadorak.png

Com o seguinte codigo

Public Class Calculadora

    Private Sub B1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B1.Click
        resultado.Text = resultado.Text + "1"
    End Sub

    Private Sub B2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B2.Click
        resultado.Text = resultado.Text + "2"
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        resultado.Text = resultado.Text + "3"
    End Sub

    Private Sub B4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B4.Click
        resultado.Text = resultado.Text + "4"
    End Sub

    Private Sub B5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B5.Click
        resultado.Text = resultado.Text + "5"
    End Sub

    Private Sub B6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B6.Click
        resultado.Text = resultado.Text + "6"
    End Sub

    Private Sub B7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B7.Click
        resultado.Text = resultado.Text + "7"
    End Sub

    Private Sub B8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B8.Click
        resultado.Text = resultado.Text + "8"
    End Sub

    Private Sub B9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B9.Click
        resultado.Text = resultado.Text + "9"
    End Sub

    Private Sub B0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B0.Click
        resultado.Text = resultado.Text + "0"
    End Sub

    Private Sub Bponto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bponto.Click
        resultado.Text = resultado.Text + "."
    End Sub
End Class
 

agora o que me falta programar, e é onde tenho as minhas duvidas 🤔 , são os botões de operações tipo o + o - e restantes, e tambem como consigo limitar o numero de caracteres numa LABEL?

Alguém me pode dar uma ajudinha ?

Desde ja obrigado a quem poder ajudar

e espero uma resposta

Obrigado

Cumps

BurnInEvil

Share this post


Link to post
Share on other sites
vulcano

Basta fazeres algo com uns if ou case, por exemplo:

Case "+"
     Op1 = Op1 + Op2

Share this post


Link to post
Share on other sites
BurnInEvil

sim mas tenho que declarar variaveis

e depois nao consigo converter o conteudo da label para Numero Integer e nao consigo fazer isso da erro a dizer que nao consegue converter

Share this post


Link to post
Share on other sites
vulcano

Dim Op1 As Double           ' Primeiro operando.
Dim Op2 As Double           ' Segundo operando.
Dim FlagDecimal As Integer  ' Flag do Ponto Decimal.
Dim NumOps As Integer       ' Numero de Operandos.
Dim UltimaEntrada As String ' Indica a ultima tecla pressionada.
Dim FlagOperacao As String  ' Indica a operacao pendente
Const VERDADEIRO = -1
Const FALSO = 0

' Procedure para a tecla C (Cancela).
' Reseta o display e inicializa variaveis.
'
Private Sub Cancel_Click()
  Number(0).SetFocus 'Volta o Controle para matriz de Numeros
  Visor.Caption = "0."
  Form_Load
End Sub

' Procedure para a tecla CE (Cancela Entrada).
'
Private Sub CancelEntry_Click()
  Number(0).SetFocus 'Volta o Controle para matriz de Numeros
  Visor.Caption = "0."
  FlagDecimal = FALSO
  UltimaEntrada = "CE"
End Sub

' Procedure para a tecla de ponto decimal (.) .
' Se a ultima tecla pressiona fou operador, initializa
' Visor com "0." Senao, adiciona um ponto decimal no display.
'
Private Sub Decimal_Click()
  If UltimaEntrada <> "NUMS" Then
    Visor.Caption = "0."
  ElseIf FlagDecimal = FALSO Then
    Visor.Caption = Visor.Caption + "."
  End If

  FlagDecimal = VERDADEIRO
  UltimaEntrada = "NUMS"
End Sub

' Rotina de Inicializacao para o formulario
' Inicia todas as variaveis
'
Private Sub Form_Load()
  CENTRALIZA_FORM Me
  FlagDecimal = FALSO
  NumOps = 0
  UltimaEntrada = "NONE"
  FlagOperacao = " "
End Sub

Private Sub mnuSair_Click()
  End
End Sub

' Procedure para as teclas de numeros (0-9).
' Adiciona o novo numero ao numero do display.
'
Private Sub Number_Click(Index As Integer)
  If UltimaEntrada <> "NUMS" Then
    Visor.Caption = ""
    FlagDecimal = FALSO
  End If
  If Len(Visor.Caption) <= 15 Then 'Limita entrada valores a 15 digitos(inclusive pto decimal)
     Visor.Caption = Visor.Caption + Number(Index).Caption
  End If
  UltimaEntrada = "NUMS"
  Operator(4).SetFocus 'Posiciona o Foco na operação de igual
End Sub

Private Sub Number_KeyPress(Index As Integer, KeyAscii As Integer)
'*** FAZ LEITURA DE TECLAS PRESSIONADAS ***
  If KeyAscii = 61 Then
     Operator_Click (4) 'Sinal de Igual
  ElseIf KeyAscii = 67 Or KeyAscii = 99 Then
     Cancel_Click 'Botao de Limpar
  ElseIf KeyAscii = 37 Then
     Percent_Click 'Sinal de Porcentagem
  ElseIf KeyAscii = 42 Or KeyAscii = 120 Or KeyAscii = 88 Then
     Operator_Click (2) 'Sinal de Multiplicação
  ElseIf KeyAscii = 43 Then
     Operator_Click (1) 'Sinal de Mais
  ElseIf KeyAscii = 45 Then
     Operator_Click (3) 'Sinal de Igual
  ElseIf KeyAscii = 46 Then
     Decimal_Click      'Ponto decimal
  ElseIf KeyAscii = 47 Then
     Operator_Click (0) 'Sinal de Divisao
  ElseIf KeyAscii = 48 Then
     Number_Click (0)
  ElseIf KeyAscii = 49 Then 
     Number_Click (1)
  ElseIf KeyAscii = 50 Then
     Number_Click (2)
  ElseIf KeyAscii = 51 Then
     Number_Click (3)
  ElseIf KeyAscii = 52 Then
     Number_Click (4)
  ElseIf KeyAscii = 53 Then
    Number_Click (5)
  ElseIf KeyAscii = 54 Then
    Number_Click (6)
  ElseIf KeyAscii = 55 Then
    Number_Click (7)
  ElseIf KeyAscii = 56 Then
    Number_Click (8)
  ElseIf KeyAscii = 57 Then
    Number_Click (9)
  End If


End Sub

' Procedure para os teclas de operadores (+, -, x, /, =).
' Se a tecla pressiona imediatamente foi parte de um
' numero, incrementa a variavel NumOps. Se um operando esta presente,
' "seta" Op1. Se dois operandos estao presentes, "seta" Op1 igual ao
' resultado da operacao em Op1 com a string entrada por ultimo e mostra
' o resultado.
'
Private Sub Operator_Click(Index As Integer)
Operator(4).SetFocus   'Volta o Controle para matriz de Numeros
  If UltimaEntrada = "NUMS" Then
    NumOps = NumOps + 1
  End If
  If NumOps = 1 Then
    Op1 = Val(Visor.Caption)
  ElseIf NumOps = 2 Then
    Op2 = Val(Visor.Caption)
  Select Case FlagOperacao
    Case "+"
     Op1 = Op1 + Op2
    Case "-"
     Op1 = Op1 - Op2
    Case "X"
     Op1 = Op1 * Op2
    Case "/"
    If Op2 = 0 Then
      MsgBox "Erro, Divisão por zero impossível", 48, "Spasso Calc"
    Else
      Op1 = Op1 / Op2
    End If
    Case "="
     Op1 = Op2
  End Select
  Visor.Caption = Format$(Op1)
NumOps = 1
End If

UltimaEntrada = "OPS"
FlagOperacao = Operator(Index).Caption
End Sub

Private Sub Operator_KeyPress(Index As Integer, KeyAscii As Integer)
'*** FAZ LEITURA DE TECLAS PRESSIONADAS ***
If KeyAscii = 61 Then
  Operator_Click (4) 'Sinal de Igual
ElseIf KeyAscii = 67 Or KeyAscii = 99 Then
  Cancel_Click      'Botao de Limpar
ElseIf KeyAscii = 37 Then
  Percent_Click     'Sinal de Porcentagem
ElseIf KeyAscii = 42 Or KeyAscii = 120 Or KeyAscii = 88 Then
  Operator_Click (2) 'Sinal de Multiplicação
ElseIf KeyAscii = 43 Then
  Operator_Click (1) 'Sinal de Mais
ElseIf KeyAscii = 45 Then
  Operator_Click (3) 'Sinal de Igual
ElseIf KeyAscii = 46 Then
  Decimal_Click 'Ponto decimal
ElseIf KeyAscii = 47 Then
  Operator_Click (0) 'Sinal de Divisao
ElseIf KeyAscii = 48 Then
  Number_Click (0)
ElseIf KeyAscii = 49 Then  
  Number_Click (1)
ElseIf KeyAscii = 50 Then
  Number_Click (2)
ElseIf KeyAscii = 51 Then
  Number_Click (3)
ElseIf KeyAscii = 52 Then
  Number_Click (4)
ElseIf KeyAscii = 53 Then
  Number_Click (5)
ElseIf KeyAscii = 54 Then
  Number_Click (6)
ElseIf KeyAscii = 55 Then
  Number_Click (7)
ElseIf KeyAscii = 56 Then
  Number_Click (8)
ElseIf KeyAscii = 57 Then
  Number_Click (9)
End If

End Sub

' Procedure para a tecla de percentagem (%).
' Computa and mostra a percentagem do primeiro operando.
'
Private Sub Percent_Click()
   Visor.Caption = Format$(Op1 * Val(Visor.Caption) / 100)
End Sub

Public Sub CENTRALIZA_FORM(Formulario As Form)
On Error Resume Next  'Evita erro caso o usuário minimize o Form
With Formulario
  .Left = (Screen.Width - .Width) / 2 'Alinha o form no horizontalmente no centro
  .Top = (Screen.Height - .Height) / 2 'Alinha o form no verticalmente no centro
End With

http://www.macoratti.net/dica64.htm

Este código está enorme...mas vê como tá feito... tens de começar a ver o código sozinho. senão perceberes alguma coisa diz...

Share this post


Link to post
Share on other sites
BurnInEvil

ja consegui por tudo a funcionar minimamente bem. :thumbsup:

a unica coisa que ainda nao consegui por a funcionar nem percebi pelo exemplo que deram foi o ponto (.)

Share this post


Link to post
Share on other sites
BurnInEvil

não da erro.

apenas se tentar fazer esta conta 1.1+1 o resultado é 12 ou seja como se o ponto decimal nao la estivesse

Share this post


Link to post
Share on other sites
vbtipo

Faz os seguintes testes:

1 - pôes dois valores com casas décimais para ver se faz bem a conta;

2 - Pôe um dos valores com casas décimais e outro não.


Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.

Share this post


Link to post
Share on other sites
BurnInEvil

Oi pessoal

obrigado por todos aqueles que me ajudaram.

ja consegui por a minha calculadora a funcionar...

obrigado e ate a proxima

cumps

BurnInEvil

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.