2
respostas

[Bug] Exercício proposto no vídeo Entendendo Input e Output no Dart

Referente ao video Entendendo Input e Output no Dart que está postado no Formação Dart, apanhei muito para conseguir fazer funcionar, gostaria que fosse apontador erros ou onde tenho que buscar melhoras.

/// Exercicio proposto no video https://www.youtube.com/watch?v=LLmBWjF6F8M
/// Calcular o IMC(Índice de Massa Corporal)
/// É um cálculo simples que permite medir se alguém está ou não com o peso ideal.
/// basta dividir o peso pela altura ao quadrado
///
/// Menor que 16 - Magreza grave
// 16 a menor que 17 - Magreza moderada
// 17 a menor que 18,5 - Magreza leve
// 18,5 a menor que 25 - Saudável
// 25 a menor que 30 - Sobrepeso
// 30 a menor que 35 - Obesidade Grau I
// 35 a menor que 40 - Obesidade Grau II (considerada severa)
// Maior que 40 - Obesidade Grau III (considerada mórbida)
///
/// Program deve receber:
/// Nome
/// idade
/// Altura
/// peso

import 'dart:io';

//converter para formatado double mesmo numeros informados com separador decimal com virgula
double paraDoubleComPonto({String NumeroEmTexto = "0"}) {
  //Converte o separador deciman "," em ".", se caso for digitado assim
  if (NumeroEmTexto.indexOf(',') > -1) {
    NumeroEmTexto = NumeroEmTexto.replaceFirst(',', '.');
  }

  double? NumeroConvertido = double.tryParse(NumeroEmTexto.toString());
  return (NumeroConvertido!);
}

void main(List<String> args) {
  double altura = 0;
  double peso = 0;

//Pegando os dados com o usuário
  print("Insira seu nome");
  String? nome = stdin.readLineSync();

  print("Insira sua idade");
  String? idade = stdin.readLineSync();

  print("Insira insira sua altura");
  String? entrada = stdin.readLineSync();
  if (entrada != null)
    altura = paraDoubleComPonto(NumeroEmTexto: entrada.toString());

  print("Insira seu peso em kg");
  entrada = stdin.readLineSync();
  if (entrada != null)
    peso = paraDoubleComPonto(NumeroEmTexto: entrada.toString());

  double imc = peso / (altura * altura);

  String repostaSobreIMC = "podemos afirmar que ";

  /// Menor que 16 - Magreza grave
  if (imc < 16)
    repostaSobreIMC += "você está gavemento abaixo do seu peso ideal.";
// 16 a menor que 17 - Magreza moderada
  if (imc >= 16 && imc < 17)
    repostaSobreIMC += "você está muito abaixo do seu peso ideal.";
// 17 a menor que 18,5 - Magreza leve
  if (imc >= 17 && imc < 18.5)
    repostaSobreIMC += "você está abaixo do seu peso ideal.";
// 18,5 a menor que 25 - Saudável
  if (imc >= 18.5 && imc < 25)
    repostaSobreIMC += "você está com o peso ideal, parabéns!";
// 25 a menor que 30 - Sobrepeso
  if (imc >= 25 && imc < 30) repostaSobreIMC += "você está com sobrepeso.";
// 30 a menor que 35 - Obesidade Grau I
  if (imc >= 30 && imc < 35)
    repostaSobreIMC += "você está com obesidade Grau I.";
// 35 a menor que 40 - Obesidade Grau II (considerada severa)
  if (imc >= 35 && imc < 40)
    repostaSobreIMC += "você está com obesidade Grau II.";
// Maior que 40 - Obesidade Grau III (considerada mórbida)
  if (imc >= 40) repostaSobreIMC += "você está com obesidade Grau III.";

  double pesoMax = 24 * (altura * altura);
  double pesoMin = 18.5 * (altura * altura);

  repostaSobreIMC +=
      "\n\tO peso ideal para sua altura está entre ${pesoMin.toStringAsFixed(2)} e ${pesoMax.toStringAsFixed(2)}";

  String msgIMC = "Olá $nome!\n\tConforme esses dados inforamdos:\n"
      '\t\tIdade:\t$idade anos\n'
      '\t\tAltura:\t$altura\n'
      '\t\tPeso:\t$peso'
      'Kg\n\n'
      '\tSeu imc é ${imc.toStringAsFixed(2)} com isso $repostaSobreIMC';

/*  print('');
  print(msgIMC);
  //print("$nome\n$idade\n$altura\n$peso");*/
}

Exemplos da saída Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

QUE PROJETO LINDO!!!!

CARACA Wellington você arrasou MUITO agora!

Projeto bem organizado, com detalhes que demonstram seu conhecimento e experiencia! Pode colocar no seu portifólio tranquilamente.

Eu tentei busca rmelhorias mas a unica coisa que eu achei ( que nem é uma grande melhoria) seria a de manter todas as variaveis no padrão de camelCase, no caso a variável NumeroEmTexto poderia ser numeroEmTexto.

Lembrando que a variavel é da função paraDoubleComPonto.

double paraDoubleComPonto({String NumeroEmTexto = "0"}) {
  //Converte o separador deciman "," em ".", se caso for digitado assim
  if (NumeroEmTexto.indexOf(',') > -1) {
    NumeroEmTexto = NumeroEmTexto.replaceFirst(',', '.');
  }

  double? NumeroConvertido = double.tryParse(NumeroEmTexto.toString());
  return (NumeroConvertido!);
}

De resto ta tudo muito bom, para deixar mais profissional o maximo que você pode implementar é o conceito de Enum para os graus de obesidade, mas ai é um exageiro que não precisamos nesse projeto.

Continue o bom trabalho!

Muito obrigado!!

Vou estudar o que é Enum, tenho dificuldade no camelCase, no caso na mesma função NumeroConvertido também deveria ser numeroConvertido? isso se aplica em todas as variaveis, se não em quais casos não se aplicariam?