Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

BurnInEvil

[Resolvido] Calculadora simples

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 (.)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.