Ir ao conteúdo

C Simulador de um estacionamento


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Postado

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;
}

 

Postado

@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
Postado

@Lucca Rodrigues  Algo assim?

 

if (hora <= 3){
	total[i] = 5;
}
else if (hora[i] < 6){
	total[i] = 5.0 + ((hora[i] - 3) * 2.5);
}
else if(hora[i] <= 24){
	total[i] = 25;
}
else{
	while(hora[i] > 0){
		hora[i] -= 24;
		total[i] += 25.0;
	}
}

 

  • Solução
Postado

@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;
}

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!