/* EXERCÍCIOS
Crie um programa que simule o funcionamento de um elevador em um prédio de 5 andares.
O programa deve começar perguntando em qual andar o usuário está. Em seguida, o elevador
deve se
deslocar até esse andar.
Depois disso, o programa deve receber o peso das pessoas que entrarão no elevador. O
elevador pode
transportar no máximo 9 pessoas e suporta até 800 kg.
Regras importantes:
Se a soma dos pesos ultrapassar 800 kg, nenhuma outra pessoa poderá entrar no elevador.
Se o usuário digitar 0 como peso, o programa deve parar de pedir novos pesos e continuar a
execução.
Após o embarque das pessoas, o programa deve perguntar para qual andar elas desejam ir.
Considere que
todas irão para o mesmo andar.
Se o andar digitado for o mesmo que o elevador está, o programa apenas
ignora e pede pelo andar de destino novamente.
Esse processo deve se repetir em um loop até que o usuário informe um andar menor que 0.
Ao final, o programa deve exibir a quantidade total de viagens realizadas pelo elevador. */
#include <stdio.h>
#define ANDARES 4
#define MAX_PESO 800
#define MAX_PESSOAS 9
#define ZERO_PESSOAS 0
#define CLEAR printf("\033[2J\033[H")
int main(void) {
//identificação dos andares
int elevador_andar = 0;
int user_andar = 0;
while (1) {
printf("Qual o andar dos passageiros? [0-4]\n");
scanf("%d", &user_andar);
// Guard
if (user_andar > ANDARES || user_andar < 0){
CLEAR;
printf("O andar %d é inexistente, tente novamente\n", user_andar);
continue;
}
// Continua o programa
CLEAR;
break;
}
// Viajar
int viagens = 0;
if (user_andar != elevador_andar) {
elevador_andar = user_andar;
printf("O elevador chegou!\n");
viagens++;
}
// Entrada de passageiros
int elevador_peso = 0;
int user_input = 0;
int pessoas = 0;
while (1) {
// Guards
if (elevador_peso >= MAX_PESO){
CLEAR;
printf("Capacidade máxima de 800kg atingida!\n");
break;
}
if (pessoas >= MAX_PESSOAS) {
CLEAR;
printf("Capacidade máxima de 9 pessoas atingida!\n");
break;
}
printf("Digite o peso do passageiro ou 0 caso não houver nenhum passageiro: ");
scanf("%d", &user_input);
// Guards
if (user_input == ZERO_PESSOAS && pessoas > 0) {
CLEAR;
break;
}
if (user_input == ZERO_PESSOAS && pessoas <= 0) {
CLEAR;
printf("O elevador está vazio!\n");
continue;
}
if (elevador_peso + user_input > MAX_PESO) {
CLEAR;
printf("O passageiro de %dkg não pode entrar, pois a capacidade máxima de\n"
"800kg será ultrapassada!\n", user_input);
continue;
}
// Adição de passageiros
elevador_peso += user_input;
pessoas++;
CLEAR;
printf("O passageiro entrou, a capacidade restante do elevador é de %dkg\ne %d
pessoas", (MAX_PESO - elevador_peso), (MAX_PESSOAS - pessoas));
}
// Viajar
while (1) {
printf("Você está no andar %d\n",elevador_andar);
printf("Digite qual o andar de destino [0-4]: ");
scanf("%d", &user_input);
// guards
if (user_input == elevador_andar) {
CLEAR;
printf("Você já está no andar %d!\n", elevador_andar);
continue;
}
if (user_input > ANDARES || user_input < 0) {
CLEAR;
printf("O andar %d não existe!\n", user_input);
continue;
}
// viajem
viagens++;
CLEAR;
break;
}
printf("\b!\n");
printf("Você chegou no andar de destino!\n");
// Finalização
printf("O elevador realizou %d viagens carregando %d/800kg", viagens, elevador_peso);
return 0;
}