Ir para o conteúdo
Joel Torres

[Resolvido] Calcular IMC (Índice de Massa Corporal)

Mensagens Recomendadas

Joel Torres

Boa noite.

Tenho um erro de código e não consigo resolvê-lo. O erro é o seguinte: "Operação aritmética resultou numa capacidade excedida."

A versão do VB é 2010.

Queria que o resultado do cálculo aparecesse numa Msgbox com uma frase, como podem ver no código.

O código que estou a utilizar é o seguinte:

Dim peso, altura, IMC As Integer
Private Sub btnCalcular_Click(sender As System.Object, e As System.EventArgs) Handles btnCalcular.Click

peso = Val(mskPeso.Text)
altura = Val(mskAltura.Text)
IMC = peso / (altura * altura)

If IMC < 0 Or Nothing Then
MsgBox("Por favor introduza os elementos válidos necessários.", MsgBoxStyle.Exclamation, "Inserção de Dados")
ElseIf IMC < 18.5 Then
MsgBox("O IMC é de: " & IMC & vbCrLf & "Abaixo do peso")
ElseIf IMC > 18.6 Then
MsgBox("O IMC é de: " & IMC & vbCrLf & "Peso normal")
End If
End Sub

Agradeço quem me ajudar.

Cumprimentos

Editado por Rui Carlos
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Joel Torres

Na altura coloco 1,75 e no peso 75.

6HIVwPP.jpg

E o resultado é este:

Cxp2WAp.jpg

Porém quando clico no botão "Calcular" sem ter valores apresenta-me uma mensagem de erro no código:

IFXGnUE.jpg

Editado por Joel94

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

No exemplo que colocaste no primeiro post tinha o Val, nesse não tem porque?

Usavas Integer, nesses usas Double?

Para converteres o texto para valor, tenta fazer assim:

Double.TryParse(mskAltura.Text, altura)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Joel Torres

Penso que já descobri onde estava o erro :)

O código que tenho neste momento é o seguinte:

Public Class frmIMC
Dim peso, altura As Double
Dim IMC As Double

Private Sub btnCalcular_Click(sender As System.Object, e As System.EventArgs) Handles btnCalcular.Click
Double.TryParse(mskAltura.Text, altura)  ----> 'Linha adicionada
Double.TryParse(mskPeso.Text, peso)	  ----> 'Linha adicionada
'peso = (mskPeso.Text)				   ----> 'Erro
'altura = (mskAltura.Text)			   ----> 'Erro
IMC = Math.Round(peso / (altura * altura), 2)

Select Case IMC

Case Is < 18.5
MsgBox("O seu Índice de Massa Corporal é: " & IMC & vbCrLf & "Está abaixo do peso ideal!", MsgBoxStyle.ApplicationModal, "Calcular Índice de Massa Corporal")

Case 18.6 To 24.9
MsgBox("O seu Índice de Massa Corporal é: " & IMC & vbCrLf & "Está no peso ideal!", MsgBoxStyle.ApplicationModal, "Calcular Índice de Massa Corporal")

Case 25 To 29.9
MsgBox("O seu Índice de Massa Corporal é: " & IMC & vbCrLf & "Está acima do peso ideal!", MsgBoxStyle.ApplicationModal, "Calcular Índice de Massa Corporal")

Case 30 To 39.9
MsgBox("O seu Índice de Massa Corporal é: " & IMC & vbCrLf & "Está Obeso!", MsgBoxStyle.ApplicationModal, "Calcular Índice de Massa Corporal")

Case 35 To 39.9
MsgBox("O seu Índice de Massa Corporal é: " & IMC & vbCrLf & "Está Obeso!", MsgBoxStyle.ApplicationModal, "Calcular Índice de Massa Corporal")

Case Is >= 40
MsgBox("O seu Índice de Massa Corporal é: " & IMC & vbCrLf & "Está Obeso!", MsgBoxStyle.ApplicationModal, "Calcular Índice de Massa Corporal")

Case Else
MsgBox("Por favor introduza os elementos válidos necessários.", MsgBoxStyle.Exclamation, "Inserção de Dados")

End Select
End Sub

Editado por Rui Carlos
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Joel Torres

Sim. Funciona a 100% como eu esperava.

Eu tinha outra dúvida de como arredondar para duas casas decimais, mas depois pesquisei no fórum e consegui. :)

Muito obrigado pela ajuda. :)

Editado por Joel94

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.