Ir ao conteúdo
  • Cadastre-se

C Simulador de um estacionamento


Visitante
Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Programa que simula um estacionamento recebendo a placa do carro e a quantidade de horas; as tarifas são R$ 5,00 por uma permanência de até três horas e R$ 2,50 adicionais para cada hora, ou parte dela, que exceder estas três horas. Caso algum carro fique acima de 6 horas até 24 horas de permanência, seu dono deverá pagar o preço de uma diária, que custa R$25 reais. Além disso, se a estadia do carro for superior a 24 horas, este não pagará mais por hora estacionada e sim por diária (ex.: se passou 25 horas, irá pagar duas diárias, se passou 49 horas, pagará 3 diárias).

 

Não consegui implementar a parte do acréscimo dos R$ 2,50/h e dos R$ 25 por dia; o que consegui fazer:

 

#include<stdio.h>
#include<math.h>
#include<string.h>

int main(){
    int i, qtdCarro, hora[10];
    char *placa[10];
    float total[10];

    do{
        printf("Número de carros: ");
        scanf("%d", &qtdCarro);
        if(qtdCarro > 10)
        printf("O Estacionamento so possui 10 vagas\n");
    } while (qtdCarro > 10);

    for (i = 0; i < qtdCarro; i++){
        printf("Placa do veiculo %d: ", i+1);
        scanf("%s", placa);
        getchar();
        printf("Horas do veiculo %d: ", i+1);
        scanf("%d", &hora[i]);
    }   

    for(i = 0; i < qtdCarro; i++){// calcula as horas
          if (hora[i] <= 3){
            total[i] = 5;
        }
        if ((hora[i] > 3) && (hora[i] < 6)){//parte citada
            total[i] = 5 * 2.5;
        }
        if ((hora[i] > 6)){
            total[i] = 25;
        }
        printf("Placa\t\tHoras\t\tPreço");
        printf("\n%s\t\t%d\t\t%.2f\n", placa, hora[i], total[i]);
      
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@Elize Yakamura

1 hora atrás, Elize Yakamura disse:
if (hora[i] <= 3){
            total[i] = 5;
        }
        if ((hora[i] > 3) && (hora[i] < 6)){//parte citada
            total[i] = 5 * 2.5;
        }

Bem, se `hora[i]` não for <= 3, então será > 3, você não precisa verificar isso na condição do if subsequente, basta escrever da seguinte forma:

if (horas <= 3)
    // horas <= 3
else if (horas <= 6)
    // horas > 3 && horas <= 6
else if(horas <= 24)
    // horas > 6 && horas <= 24
else
    // horas > 24

 

Sobre isso:

1 hora atrás, Elize Yakamura disse:
if ((hora[i] > 3) && (hora[i] < 6)){//parte citada
            total[i] = 5 * 2.5;
        }

O enunciado diz:

1 hora atrás, Elize Yakamura disse:

as tarifas são R$ 5,00 por uma permanência de até três horas e R$ 2,50 adicionais para cada hora, ou parte dela, que exceder estas três horas

Aos R$ 5,00 de tarifa mínima será somado o resultado da operação: (horas - 3) * R$ 2,50, já que para cada hora adicional, deve-se somar R$ 2,50 ao total:

total = 5.0f + ((hora - 3) * 2.5f);

 

1 hora atrás, Elize Yakamura disse:

Não consegui implementar a parte do acréscimo dos R$ 2,50/h e dos R$ 25 por dia

Se a permanência em horas for acima de 6h até 24h:

1 hora atrás, Elize Yakamura disse:

Caso algum carro fique acima de 6 horas até 24 horas de permanência, seu dono deverá pagar o preço de uma diária, que custa R$25 reais

O valor total será R$ 25,00.

Se a permanência em horas ultrapassar as 24h:

1 hora atrás, Elize Yakamura disse:

se a estadia do carro for superior a 24 horas, este não pagará mais por hora estacionada e sim por diária

Você pode fazer um loop para subtrair 24h de `hora` e somar R$ 25,00 à `total` enquanto `hora` for maior que 0:

while(hora > 0)
{
    hora -= 24;
    total += 25.0f;
}

Ou então dividir `hora` por 24 e usar ceil() da math.h para arredondar o valor para cima, depois é só multiplicar por 25 e atribuir à `total`, mas acho que minha primeira sugestão é melhor :D

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Solução

@Elize Yakamura A condição do segundo if é:

28 minutos atrás, Lucca Rodrigues disse:
if (horas <= 6)

Tinha me confundido :D

A terceira condição é caso o valor de horas seja acima de 6h até 24h, então a segunda tem que avaliar se `horas` é menor ou igual a 6h.

Aliás, usualmente podemos usar o sufixo f para atribuir um valor à uma variável do tipo float. Ex:

total = 5.0f;
// 5 é int
// 5.0 é double

 

Sobre isso:

18 minutos atrás, Elize Yakamura disse:
while(hora[i] > 0){
		hora[i] -= 24;
		total[i] += 25.0;
	}

Se quer mostrar a permanência em horas no final, terá que usar uma variável auxiliar para não afetar o valor de `horas`.

Veja:

#include <stdio.h>

int main()
{
    int horas;
    char placa[10];
    float total;

    puts("Placa do veiculo:");
    scanf("%9s%*c", placa);
    puts("Horas de permanencia:");
    scanf("%d%*c", &horas);
    
    if (horas <= 3)
        total = 5.0f;
    else if (horas <= 6)
        total = 5.0f + ((horas - 3) * 2.5f);
    else if(horas <= 24)
        total = 25.0f;
    else
    {
        // Variavel auxiliar
        int aux = horas;
        while(aux > 0)
        {
            aux -= 24;
            total += 25.0f;
        }
    }
    
    printf("Placa: %s\nHoras de permanencia: %d\nTotal: %.2f", placa, horas, total);
    
    return 0;
}
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...