Jump to content
Joel Torres

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

Recommended Posts

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

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
nelsonr

Boas,

talvez o melhor será indicares que valores estás a colocar nas textboxs

Share this post


Link to post
Share on other sites
nelsonr

E com que peso e altura?

Fizeste debug e viste o valor que está a ficar nas variaveis?

Share this post


Link to post
Share on other 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

Edited by Joel94

Share this post


Link to post
Share on other 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)

Share this post


Link to post
Share on other 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

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
nelsonr

Pois então, em vez de substituir a conversão de texto para double que te dei, deixaste lá na mesma o código antigo

Share this post


Link to post
Share on other 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. :)

Edited by Joel94

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

×
×
  • Create New...

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.