Mobile App Development · Dart/Flutter

14 · Desafio IMC — Desafios

Sua própria versão do calculador de IMC: leitura via stdin, validação de entradas e recomendação por faixa.

Desafio 1

DesafioIMC.dart

O mesmo problema resolvido em imc_exercicio.dart — ler peso e altura via stdin, validar entradas inválidas, calcular o IMC com peso / (altura * altura), classificar nas quatro faixas padrão e exibir uma recomendação — mas com uma solução independente: validação embutida direto no laço de leitura (sem funções auxiliares separadas) e classificação/recomendação com switch expression e padrões relacionais (< 18.5, < 25.0...), um recurso do Dart 3.

// Desafio: mesmo problema do exercicio (calcular IMC e classificar), resolvido de forma
// independente — validacao inline no laco principal, sem funcoes auxiliares separadas.
import 'dart:io';

void main() {
  double? peso;
  while (peso == null) {
    stdout.write('Digite seu peso (kg): ');
    peso = double.tryParse(stdin.readLineSync() ?? '');
    if (peso == null || peso <= 0) {
      print('Peso invalido. Digite um numero maior que zero.');
      peso = null;
    }
  }

  double? altura;
  while (altura == null) {
    stdout.write('Digite sua altura (m): ');
    altura = double.tryParse(stdin.readLineSync() ?? '');
    if (altura == null || altura <= 0) {
      print('Altura invalida. Digite um numero maior que zero.');
      altura = null;
    }
  }

  final double imc = peso / (altura * altura);

  final String classificacao = switch (imc) {
    < 18.5 => 'Abaixo do peso',
    < 25.0 => 'Peso normal',
    < 30.0 => 'Sobrepeso',
    _ => 'Obesidade',
  };

  final String recomendacao = switch (classificacao) {
    'Abaixo do peso' => 'Procure orientação profissional para ganho de peso saudável.',
    'Peso normal' => 'Continue mantendo uma rotina saudável.',
    'Sobrepeso' => 'Avalie ajustes na alimentação e prática de atividades físicas.',
    _ => 'Busque acompanhamento médico para um plano individualizado.',
  };

  print('IMC: ${imc.toStringAsFixed(2)}');
  print('Classificação: $classificacao');
  print('Recomendação: $recomendacao');
}

Saída esperada

Ao digitar 90 para o peso e 1.80 para a altura:

Digite seu peso (kg): 90
Digite sua altura (m): 1.80
IMC: 27.78
Classificação: Sobrepeso
Recomendação: Avalie ajustes na alimentação e prática de atividades físicas.

Como executar

Depois de implementado, o terminal vai pausar aguardando você digitar o peso e, em seguida, a altura.

dart run 14-DesafioIMC/03_Desafios/codigo_fonte/DesafioIMC.dart