Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Sugestão] Tempo de Viagem e Custo da Viagem. Enunciado errado??

Então, nesse exercicio ele pede para calcular o custo de uma viagem de carro, o que só importa o quão distante é o lugar, quanto o veiculo gasta de combustivel por km andado e o preço desse combustivel. O tempo de viagem é relativo e envolve velocidade media que não são parametros para a função calcularCustoViagem.

function calcularCustoViagem(distancia, eficiencia, precoGasolina, velocidadeMedia) {
    let tempoViagem = distancia / velocidadeMedia;
    let consumoCombustivel = distancia / eficiencia;
    let custoTotal = consumoCombustivel * precoGasolina;
    return custoTotal;
}

a função nem se quer utiliza a variavel tempoViagem, deveria estar assim:

function calcularCustoViagem(distancia, eficiencia, precoGasolina) {
    let consumoCombustivel = distancia / eficiencia;
    let custoTotal = consumoCombustivel * precoGasolina;
    return custoTotal;
}

e arrumar o enunciado tambem. agora se fosse um dasafio eu teria saidas ruins no log com esse exemplo, então vou tentar fazer.

function calcularCustoViagem(distancia, eficiencia, precoGasolina) {
    //para nao fazer calculos com negativos ou dividir por zero
    if (distancia < 0 || eficiencia <= 0 || precoGasolina < 0) {
        return "Dados inválidos. distancia e preço não podem ser negativos e eficiencia tem que ser maior que 0 .";
    }

    let consumoCombustivel = distancia / eficiencia;
    let custoTotal = consumoCombustivel * precoGasolina;
    //um return melhorado
    return `R$${custoTotal.toFixed(2)}`;
}


function calcularTempoDeViagem(distancia, velocidadeMedia){
    //para garantir fazer as contas com numeros positivos e não dividir por 0
    if (distancia < 0 || velocidadeMedia <= 0) {
        return "Dados inválidos. distancia não pode ser negativa e velocidade tem que ser maior que 0.";
    }
    //aqui foi dificil eu sei fazer na calculadora, mas tem que ser desse jeito no codigo, 
    // guardando os inteiros em variaveis
    //para depois tirar o numero inteiro do resultado então multiplicar só os quebrados 
    // para ir de hora pra minuto e de minuto pra segundos

    //tempoHoras retorna nesse exemplo 400/182 = 2,197...
    let tempoHoras = distancia / velocidadeMedia;

    //math.floor guarda o 2 inteiro em horas 
    let horas = Math.floor(tempoHoras);

    //agora tiro o inteiro 2 do tempoHoras que esta com 2,197 
    // e quardo só o 0,197... em restoHoras
    let restoHoras = tempoHoras - horas;

    //agora tenho que retirar o inteiro da multiplicação desse resto 0,197*60 = 11,868... 
    // pego o 11 com Math.floor e coloco ja como minutos
    let minutos = Math.floor(restoHoras * 60);

    //agora para fazer o resto de minutos tenho que fazer denovo 0,197*60 = 11,868...
    //  e subtrair o inteiro 11 dessa conta entao vai ficar o resto 0,868...
    let restoMinutos = (restoHoras * 60) - minutos;

    // agora só multiplicar o resto dos minutos por 60 e temos 52 segundos
    //  vou parar em segundos pq ja ta bom, entao arrendonda no Math.floor
    let segundos = Math.round(restoMinutos * 60);

    return `${horas} hora(s), ${minutos} minuto(s) e ${segundos} segundo(s)`;
}

let distancia = 400; 
let eficiencia = 15; 
let precoGasolina = 5.80; 
let velocidadeMedia = 182;

let custo = calcularCustoViagem(distancia, eficiencia, precoGasolina);
let tempo = calcularTempoDeViagem(distancia, velocidadeMedia);

console.log(`Custo da viagem: ${custo}`);
console.log(`Tempo de viagem: ${tempo}`);

não sei se tem um jeito mais facil, deve ter sempre tem. ah, as saidas no console ficam

Custo da viagem: R$154.67
Tempo de viagem: 2 hora(s), 11 minuto(s) e 52 segundo(s)

é a primeira vez que uso o forum entao não sei se esta no lugar certo essa sugestao/duvida

3 respostas
solução!

Oi Wallace,

Parabéns pela sua análise detalhada do código e por identificar a inconsistência na função calcularCustoViagem! 👍

Você está absolutamente correto ao apontar que a variável tempoViagem não é utilizada e que a função não deveria receber a velocidade média como parâmetro.

Sua sugestão de correção da função e do enunciado está precisa.

A sua implementação da função calcularTempoDeViagem está muito boa e demonstra um bom domínio sobre manipulação de números e conversões de unidades de tempo. 💪

A lógica que você utilizou para extrair as horas, minutos e segundos está correta e o resultado final é preciso.

Continue praticando e explorando as possibilidades da programação! 💻

tux matrix Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓

achei um jeito mais simples


function calcularTempoDeViagem(distancia, velocidadeMedia){
    //para garantir fazer as contas com numeros positivos e não dividir por 0
    if (distancia < 0 || velocidadeMedia <= 0) {
        return "Dados inválidos. distancia não pode ser negativa e velocidade tem que ser maior que 0.";
    }
    
    let tempoHoras = distancia / velocidadeMedia;

    //bem melhor sem variaveis pra restos
    
    let horas = Math.trunc(tempoHoras);
    let minutos = Math.trunc((tempoHoras - horas) * 60);
    let segundos = Math.round((tempoHoras - horas - minutos / 60) * 3600);

    return `${horas} hora(s), ${minutos} minuto(s) e ${segundos} segundo(s)`;
}

let distancia = 400; 
let velocidadeMedia = 182;

let tempo = calcularTempoDeViagem(distancia, velocidadeMedia);

console.log(`Tempo de viagem: ${tempo}`);

Tempo de viagem: 2 hora(s), 11 minuto(s) e 52 segundo(s) Good Job!