Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida_Calcular Valor + sinal


Vick

Pergunta

Oi pessoal beleza?

Pô gostaria da ajuda de vocês, estou fazendo um programinha, onde o usuário digita um número no TEXTBOX e quando ele clica no BOTAO do sinal ( +, -, *, / ) , o Valor digitado no TEXTBOX e mais o sinal pressionado(+, -, *, /) vai para um LISTBOX. Quando ele pressiona o botão calcula, o programa calcula todo os valores que estão no LISTBOX.

Agora pessoal, o meu problema é o seguinte: não sei como faço para realizar um calculo que atribui a uma variável um valor integer concatenando com o sinal ( +, -, *, /) digitado. Pois quando faço isso o código da ERROOO. :blink: (Acho que deve ser por causa dos tipos serem diferentes) GENTE, alguém sabe como posso resolver isso????????

(Ah! Logo abaixo do exemplo postei o código todo).

Exemplo:

Dim soma as Integer
Dim sinal as String
Dim ValorDigitado as Integer

soma = ValorDigitado + sinal
Programinha - Marquei de negrito a parte do código que se refere a dúvida do exemplo acima
Private Sub CmdCalcula_Click()
Dim iSoma As Integer
Dim iSomaGeral As Integer
Dim iConverte As Integer
Dim iConverteGeral As Integer
Dim strGuarda As String
Dim iSinal As String
Dim strNumero As String
Dim iCalcula As Integer

iSoma = 0
iSomaGeral = 0
iCalcula = 0
strGuarda = ""

'Pega todos os elementos da LISTBOX
For i = 0 To LstCalcula.ListCount - 1
strGuarda = TxtNumero.Text & vbctlf & LstCalcula.List(i)

[b]strNumero = Mid(LstCalcula.List(i), 1, Len(LstCalcula.List(i)) - 1)
iSinal = Right(LstCalcula.List(i), 1)

'Converte a STRING do LISTBOX para INTEGER
iConverte = CInt(strNumero)

iCalcula = iConverte + iSinal
[/b]
'Acumula operação com sinais numa variável
iSoma = iSoma + iCalcula
Next i

'Adiciona o último número digitado na LISTBOX
LstCalcula.AddItem (TxtNumero.Text)

'Converte a STRING do TEXTBOX para INTEGER
iConverteGeral = CInt(TxtNumero.Text)

'Acumula soma para o resultado geral
iSomaGeral = iSoma + TxtNumero.Text

'Apaga o último número digitado no TEXT
TxtNumero.Text = ""

'Mostra no label o resultado do cálculo
LblMostraResultado.Caption = iSomaGeral

'TxtNumero.Text = LstCalcula.List(LstCalcula.ListIndex)
End Sub

Private Sub CmdLimpa_Click()
'Apaga tudo que está no formulário
TxtNumero.Text = ""
LstCalcula.Clear
LblMostraResultado.Caption = ""
End Sub

Private Sub CmdMultiplicacao_Click()
'Adiciona o valor e o sinal do cálculo (*)
If TxtNumero <> "" Then
   LstCalcula.AddItem (TxtNumero.Text + "*")
   TxtNumero.Text = ""
   TxtNumero.SetFocus
End If
End Sub

Private Sub CmdRetorna_Click()
'Pergunta se o usuário deseja sair do sistema
 If MsgBox("Deseja sair ?", vbYesNo + vbQuestion, "Mensagem") = vbYes Then
    End
 End If
End Sub

Private Sub CmdSoma_Click()
'Adiciona o valor e o sinal do cálculo (+)
If TxtNumero <> "" Then
   LstCalcula.AddItem (TxtNumero.Text + "+")
   TxtNumero.Text = ""
   TxtNumero.SetFocus
End If
End Sub


Private Sub CmdSubtracao_Click()
'Adiciona o valor e o sinal do cálculo (-)
If TxtNumero <> "" Then
    LstCalcula.AddItem (TxtNumero.Text)
    TxtNumero.Text = ""
    TxtNumero.SetFocus
End If
End Sub

Obrigada

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Oi pessoal, gostaria da ajuda de vocês. Estou tentando calcular os valores que estão numa LISTBOX. Essa listbox recebe o valor e o sinal, a cada vez que o sinal é clicado.

O problema: Quando o FOR percorre a listbox ele dá erro quando pega o sinal, acho que não reconhece que o sinal não é INTEGER e aí dá problema. Como posso fazer para resolver isso, pois preciso do sinal para realizar o cálculo. ????? :blink:

Trecho do Código

Private Sub CmdCalcula_Click()  
  
LstCalcula.AddItem (TxtValor2.Text)  
  
    For i = 0 To LstCalcula.ListCount - 1  
        soma = soma + LstCalcula.List(i)  
    Next i  
        
    LblMostraResult.Caption = soma  
      
End Sub  
  
    
Private Sub CmdSoma_Click()  
  
     LstCalcula.AddItem (TxtValor1.Text)  
     LstCalcula.AddItem ("+")  
  
End Sub  


Private Sub CmdSubtracao_Click()  
  
     LstCalcula.AddItem (TxtValor1.Text)  
     LstCalcula.AddItem ("-")  
  
End Sub  


Private Sub CmdMultiplicacao_Click()  
  
     LstCalcula.AddItem (TxtValor1.Text)  
     LstCalcula.AddItem ("*")  
  
End Sub  


Private Sub CmdDivisao_Click()  
  
     LstCalcula.AddItem (TxtValor1.Text)  
     LstCalcula.AddItem ("/")  
  
End Sub

Obrigada

Link para o comentário
Compartilhar em outros sites

  • 0

se você quer q ele faca as contas baseadas nos sinais q você adiciona não adianta somar tudo, ele não vai ler o seu sinal na string. tire o sinal da string, como você tava fazendo no outro tópico (alias vou juntar os dois já q é sobre o mesmo assunto), e interprete a string. se você encontrar *, mande então fazer multiplicacao e assim por diante.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Kuroi obrigada pela atenção a dúvida. Refiz o código, mudei a forma de resolver pois não estava conseguindo sair do lugar.

Agora ele funciona somente se a LISTBOX tiver resolvendo operação com 2 números. Se tiver somando 3 ou mais dá erro na SOMA . Percebi que

o problema tá na lógica do FOR, porém não consigo enxergar uma forma de resolver. Pode me dar uma luz???? :blush:

Código Modificado - quase funcionando

Private Sub CmdCalcula_Click()

    Dim resultado As Integer
    
    resultado = 0
    
    LstCalcula.AddItem (TxtNumero.Text)

    'Percorre a lista
    For i = 1 To LstCalcula.ListCount - 1
        
        'verifica qual é o sinal para efetuar a soma do ANTERIOR com o PRÓXIMO
        Select Case LstCalcula.List(i)
            Case "+"
                resultado = CInt(LstCalcula.List(i - 1)) + CInt(LstCalcula.List(i + 1))
            Case "-"
                resultado = CInt(LstCalcula.List(i - 1)) - CInt(LstCalcula.List(i + 1))
            Case "*"
                resultado = CInt(LstCalcula.List(i - 1)) * CInt(LstCalcula.List(i + 1))
            Case "/"
                resultado = CInt(LstCalcula.List(i - 1)) / CInt(LstCalcula.List(i + 1))
        End Select
     Next i
     
     'Mostra o resultado no label
     LblMostraResult.Caption = resultado

End Sub

Private Sub CmdRetorna_Click()
    
    'Exibe mensagem perguntando se deseja sair
    If MsgBox("Deseja sair?", vbYesNo, "Mensagem") = vbYes Then
        End
    End If

End Sub

Private Sub CmdLimpa_Click()
    
    'Limpa todos os valores da tela
    TxtNumero.Text = ""
    LblMostraResult.Caption = ""
    LstCalcula.Clear
    TxtNumero.SetFocus
    
End Sub

Private Sub CmdDivisao_Click()

    'Adiciona o número e o sinal (/) na LISTBOX
    LstCalcula.AddItem (TxtNumero.Text)
    LstCalcula.AddItem ("/")
    TxtNumero.Text = ""
    TxtNumero.SetFocus
    
End Sub

Private Sub CmdMultiplicacao_Click()

    'Adiciona o número e o sinal(*) na LISTBOX
    LstCalcula.AddItem (TxtNumero.Text)
    LstCalcula.AddItem ("*")
    TxtNumero.Text = ""
    TxtNumero.SetFocus


End Sub

Private Sub CmdSoma_Click()

    'Adiciona o número e o sinal(+) na LISTBOX
    LstCalcula.AddItem (TxtNumero.Text)
    LstCalcula.AddItem ("+")
    TxtNumero.Text = ""
    TxtNumero.SetFocus

End Sub

Private Sub CmdSubtracao_Click()

    'Adiciona o número e o sinal(-) na LISTBOX
    LstCalcula.AddItem (TxtNumero.Text)
    LstCalcula.AddItem ("-")
    TxtNumero.Text = ""
    TxtNumero.SetFocus

End Sub

Private Sub LstCalcula_Click()

End Sub

Private Sub TxtNumero_Change()

End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

hum, como os sinais aparecem a cada dois items, va fazendo o for como step 2 (assim ele vai somando 2 a cada passagem):

For i = 1 To LstCalcula.ListCount - 1 Step 2
        
        'verifica qual é o sinal para efetuar a soma do ANTERIOR com o PRÓXIMO
        Select Case LstCalcula.List(i)
            Case "+"
                resultado = CInt(LstCalcula.List(i - 1)) + CInt(LstCalcula.List(i + 1))
            Case "-"
                resultado = CInt(LstCalcula.List(i - 1)) - CInt(LstCalcula.List(i + 1))
            Case "*"
                resultado = CInt(LstCalcula.List(i - 1)) * CInt(LstCalcula.List(i + 1))
            Case "/"
                resultado = CInt(LstCalcula.List(i - 1)) / CInt(LstCalcula.List(i + 1))
        End Select
     Next[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi fiz a mudança e melhorou a execução no loop. Mas em relação as operações dentro do select case que não está fazendo o cálculo certo.

Pois preciso que o loop só some o ANTERIOR ao PROXIMO na 1ª execução. Na 2ª execução, preciso que o RESULTADO se some ao PRÓXIMO.

Fiz assim, mais na 2ª execução ele tá acumulando o RESULTADO, o ANTERIOR e o PRÓXIMO, e então dá o valor errado.

Acho que o problema agora tá na lógica, mais não sei como resolver. :blink:

Trecho do código

Private Sub CmdCalcula_Click()

    Dim resultado As Integer
    Dim acumula As Integer
    
    resultado = 0
    acumula = 0
    
    LstCalcula.AddItem (TxtNumero.Text)

    'Percorre a lista
    For i = 1 To LstCalcula.ListCount - 1 Step 2
        
        'verifica qual é o sinal para efetuar a soma do ANTERIOR com o PRÓXIMO
        Select Case LstCalcula.List(i)
            Case "+"
                resultado = CInt(LstCalcula.List(i - 1)) + CInt(LstCalcula.List(i + 1))
            Case "-"
                resultado = CInt(LstCalcula.List(i - 1)) - CInt(LstCalcula.List(i + 1))
            Case "*"
                resultado = CInt(LstCalcula.List(i - 1)) * CInt(LstCalcula.List(i + 1))
            Case "/"
                resultado = CInt(LstCalcula.List(i - 1)) / CInt(LstCalcula.List(i + 1))
        End Select
        
        'Acumula o resultado
        acumula = acumula + resultado
            
     Next i
     
     'Mostra o resultado no label
     LblMostraResult.Caption = acumula

End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

hum, é verdade, o valor não ta sendo acumulado.

tenta o seguinte, antes de comecar o for, adicione a seguinte linha:

resultado = CInt(LstCalcula.List(0))
se for preciso, adicione um if antes pra testar se não há itens no listbox. depois, dentro do for, você pega os valores a partir da variavel resultado. exemplo:
Case "+"
    resultado = resultado + CInt(LstCalcula.List(i + 1))[/code]

nem precisa da variavel acumula.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...