Calculadora de IMC em C#: Guia Completo para Iniciantes

Imagine poder digitar sua altura e seu peso no console e, em segundos, descobrir em qual faixa de saúde você se encontra! A calculadora de IMC (Índice de Massa Corporal) é uma das formas mais populares de relacionar peso e altura. Ela mostra se estamos abaixo, dentro ou acima do peso ideal. Neste desafio, vamos criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. nossa própria calculadora de IMC em C# usando o console. Vamos lá?

Calcular o Índice de Massa Corporal (IMC) é um exercício clássico para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! iniciantes em programação. Neste desafio, você vai aplicar variáveis🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código., operações matemáticas e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. estruturas condicionais🤔 Estruturas Condicionais: Tomando Decisões com if, else e switch🤔 Estruturas Condicionais: Tomando Decisões com if, else e switchAprenda a dominar as estruturas condicionais em C# com exemplos e dicas práticas. Seu guia para decisões de código eficientes e organizadas. para criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. uma ferramenta prática. Vamos além da sintaxe básica: você entenderá como validar dados e organizar lógica de negócios simples.

Por que IMC?

Índice🔗

Objetivo do Desafio🔗

A ideia é simples: escrever um programa de console em C# capaz de:

1. Perguntar ao usuário o seu peso (em kg).

2. Perguntar ao usuário a sua altura (em metros).

3. Calcular o IMC a partir desses valores🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara..

4. Exibir o IMC calculado e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. uma breve mensagem sobre a faixa em que o usuário se encontra (ex.: abaixo do peso, peso normal, sobrepeso, etc.).

O objetivo não é só mostrar o resultado, mas compreender a lógica por trás do cálculo e como interpretar o valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. retornado.

O que é IMC?🔗

IMC significa Índice de Massa Corporal. É uma fórmula simples:

IMC = peso / (altura * altura)

Embora o IMC não seja um indicador perfeito, pois não considera fatores como massa muscular ou distribuição de gordura, ele ainda é amplamente usado como referência em avaliações iniciais de saúde.

Em termos de classificação para adultos, geralmente temos algo assim (valores🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. de exemplo):

Intervalo de IMCClassificação
Menos de 18,5Abaixo do peso
Entre 18,5 e 24,9Peso normal
Entre 25,0 e 29,9Sobrepeso
Entre 30,0 e 39,9Obesidade
40,0 ou maisObesidade grave

Requisitos para o Projeto🔗

Passo a Passo🔗

1. Pedir entrada do peso: Você pode usar Console.ReadLine() e armazenar o valor em uma variável🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. (ex.: peso).

2. Pedir entrada da altura: Mesma coisa, mas📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. lembre-se de receber como double ou float.

3. Converter as entradas de texto para um tipo numérico🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. (por exemplo, Convert.ToDouble ou double.Parse).

4. Calcular o IMC: Aplicar a fórmula IMC = peso / (altura altura).

5. Exibir o resultado no console: use Console.WriteLine.

6. (Opcional) Classificar o IMC: Use estruturas condicionais🤔 Estruturas Condicionais: Tomando Decisões com if, else e switch🤔 Estruturas Condicionais: Tomando Decisões com if, else e switchAprenda a dominar as estruturas condicionais em C# com exemplos e dicas práticas. Seu guia para decisões de código eficientes e organizadas. para informar se o IMC está abaixo, dentro ou acima do ideal.

Código de Exemplo🔗

using System;
namespace CalculadoraIMC
{
    class Program
    {
        static void Main(string[] args)
        {
            // Passo 1: Pedir peso
            Console.Write("Digite seu peso (em kg): ");
            string pesoEntrada = Console.ReadLine();
            // Passo 2: Pedir altura
            Console.Write("Digite sua altura (em metros): ");
            string alturaEntrada = Console.ReadLine();
            // Passo 3: Converter os dados de entrada para double
            double peso = double.Parse(pesoEntrada);
            double altura = double.Parse(alturaEntrada);
            // Passo 4: Calcular o IMC
            double imc = peso / (altura * altura);
            // Passo 5: Exibir o resultado
            Console.WriteLine($"Seu IMC é: {imc:F2}");
            // Passo 6: Classificar o IMC (Opcional)
            // Exemplos de classificação (valores podem variar conforme referência)
            if (imc < 18.5)
            {
                Console.WriteLine("Abaixo do peso.");
            }
            else if (imc < 25)
            {
                Console.WriteLine("Peso normal.");
            }
            else if (imc < 30)
            {
                Console.WriteLine("Sobrepeso.");
            }
            else if (imc < 40)
            {
                Console.WriteLine("Obesidade.");
            }
            else
            {
                Console.WriteLine("Obesidade grave.");
            }
        }
    }
}

O que está acontecendo aqui?

Configurando o projeto no Visual Studio🔗

1. Crie novo projeto🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. Console App (.NET Core)

2. Nomeie como CalculadoraIMC

3. Verifique a estrutura básica:

using System;
class Program
{
    static void Main()
    {
        Console.WriteLine("Calculadora de IMC");
    }
}

Coletando dados do usuário🔗

static void Main()
{
    Console.Write("Digite seu peso em kg: ");
    double peso = Convert.ToDouble(Console.ReadLine());
    Console.Write("Digite sua altura em metros: ");
    double altura = Convert.ToDouble(Console.ReadLine());
    // Continua...
}

Atenção: Convert.ToDouble pode lançar erros se o usuário digitar valores🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. não numéricos. Mais adiante trataremos isso.

Implementando a fórmula do IMC🔗

static double CalcularIMC(double peso, double altura)
{
    return peso / Math.Pow(altura, 2);
}
// No Main:
double imc = CalcularIMC(peso, altura);
Console.WriteLine($"Seu IMC é: {imc:F2}");

Dica: Math.Pow é mais preciso e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. legível que altura altura

Classificando o resultado🔗

static string ClassificarIMC(double imc)
{
    if (imc < 18.5)
        return "Magreza";
    else if (imc < 25)
        return "Normal";
    else if (imc < 30)
        return "Sobrepeso";
    else
        return "Obesidade";
}
// No Main:
string classificacao = ClassificarIMC(imc);
Console.WriteLine($"Classificação: {classificacao}");

Tratando erros de entrada🔗

Implemente validação robusta:

static double LerDouble(string mensagem)
{
    while (true)
    {
        Console.Write(mensagem);
        if (double.TryParse(Console.ReadLine(), out double valor) && valor > 0)
            return valor;
        Console.WriteLine("Valor inválido! Digite um número positivo.");
    }
}
// No Main:
double peso = LerDouble("Digite seu peso em kg: ");
double altura = LerDouble("Digite sua altura em metros: ");

Por que isso é importante?

Versão final com aprimoramentos🔗

using System;
class Program
{
    static void Main()
    {
        Console.WriteLine("=== Calculadora de IMC ===");
        double peso = LerDouble("Peso (kg): ");
        double altura = LerDouble("Altura (m): ");
        double imc = CalcularIMC(peso, altura);
        string classificacao = ClassificarIMC(imc);
        Console.WriteLine($"\nIMC: {imc:F1}");
        Console.WriteLine($"Classificação: {classificacao}");
        ExibirLegenda();
    }
    static double LerDouble(string mensagem)
    {
        while (true)
        {
            Console.Write(mensagem);
            if (double.TryParse(Console.ReadLine(), out double valor) && valor > 0)
                return valor;
            Console.WriteLine("Valor inválido! Use números positivos com . como separador decimal.");
        }
    }
    static double CalcularIMC(double peso, double altura) => peso / (altura * altura);
    static string ClassificarIMC(double imc)
    {
        return imc switch
        {
            < 18.5 => "Magreza",
            < 25 => "Normal",
            < 30 => "Sobrepeso",
            _ => "Obesidade"
        };
    }
    static void ExibirLegenda()
    {
        Console.WriteLine("\nLegenda (OMS):");
        Console.WriteLine("Magreza: < 18.5");
        Console.WriteLine("Normal: 18.5 - 24.9");
        Console.WriteLine("Sobrepeso: 25 - 29.9");
        Console.WriteLine("Obesidade: ≥ 30");
    }
}

Features avançadas que você pode adicionar📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos.:

Conclusão🔗

Criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. uma calculadora de IMC é um ótimo exercício para praticar leitura de dados do usuário, conversão de tipos e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. operações aritméticas em C#. Ela une programação com um conceito do mundo real, ajudando você a fixar tanto a lógica de código quanto a importância de validar dados.

Você criou uma aplicação completa com:

Próximo passo: Modifique o programa para calcular o IMC para várias pessoas ou integre com um sistema de armazenamento simples (arquivos texto📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance.).

Que tal transformar isso em uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. CalculadoraIMC com métodos estáticos para reutilização em outros projetos🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades!? 🚀

Experimente testar com valores🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. diferentes de altura e peso e compare o que seu programa retorna com a tabela de referência de IMC. Isso permite que você verifique se está tudo funcionando corretamente e ainda aprimore seu aprendizado.

Boa prática e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. bons estudos!

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados