Dúvida com lógica de exercício

2 respostas
ucastrobr

No livro de Deitel tem esse exercício.
Um estacionamento cobra um taxa mínima de $ 2 para estacionar por até 3 horas. Um adicional de $0,50 por hora não necessariamente inteira é cobrado após as três primeiras horas. A carga máxima para qualquer dado período de 24 horas é de $10. Suponha que nenhum carro fica estacionado por mais de 24 horas por vez. Escreva um aplicativo que calcule e exiba as taxas de estacionamento para cada cliente atual e calcular e exibir o total dos recibos de ontem. O programa deve utilizar o método calculaCustos para determinar a cobrança para cada cliente.

E tem a seguinte resposta.

public class Estacionamento {

    double custo = 2;
    private double tempo_estacionado;
    
    public Estacionamento(double tempo) {
        tempo_estacionado = tempo;
        }
        
    public double calculaCustos()   {
        double pagar;
        if (tempo_estacionado <=3.0)
            pagar = 2.0;
        else if (tempo_estacionado <=19.0)
            pagar=(custo+(0.50)*Math.ceil(tempo_estacionado - 3.0));
        else
            pagar = 10.0;
        return pagar;
    }

A minha dúvida é nessa parte: pagar=(custo+(0.50)*Math.ceil(tempo_estacionado - 3.0));
Suponhamos que fique no estacionamento 7 horas. O aplicativo deveria somar 2 reais das primeira 3 horas e depois somar mais 0,50 por hora.
O que daria 4 reais. A lógica acima dá certo mas não consigo compreendê-la.

2 Respostas

maior_abandonado

pagar=(custo+(0.50)*Math.ceil(tempo_estacionado - 3.0));

bom…vamos separar a conta em 2…

Math.ceil(tempo_estacionado - 3.0)

isso aqui vai ver por qual periodo que esta pagando.

lembra que o valor do tempo era arredondado pra cima?

pois é, esse metodo ceil arredonda pra cima, sendo assim se o kra fica 6 horas e cinco minutos, ele paga por 7 (assim como esse metodo garante).

observe q ai, só esta calculando a parte do tempo que ficou “acima” das 3 horas, pq isso deve ser calculado separadamente(nesse caso esta calculando o referente as 4 horas adicionais).

agora vamos adicionar um pouco mais da conta:

(0.50)*Math.ceil(tempo_estacionado - 3.0)

perceba que calculado o tempo acrescido das “3 horas de preço padrão”, calculamos o preço desse tempo, e por fim a conta toda:

custo+(0.50)*Math.ceil(tempo_estacionado - 3.0)

tendo calculado quanto se paga pelo tempo adicional, basta somar a isso o valor das 3 primeiras horas, que se encontra na variavel custo(olhe na declaração dela).

ucastrobr

Agora entendi obrigado. O cálculo é feito da direita para esquerda.

Criado 7 de setembro de 2008
Ultima resposta 8 de set. de 2008
Respostas 2
Participantes 2