Open Zanelatto1 opened 8 years ago
typedef struct Carros { int placa; int manobra; }carros;
typedef struct Pilha{ int carros [MAX]; int topo; }pilha;
void inicia_pilha(pilha *p) { p->topo = 0; printf("\nEstacionamento aberto\n"); }
int pilha_vazia(pilha *p) { return p->topo == 0; }
int pilha_cheia(pilha *p) { return p->topo == MAX; }
int empilha(int i, pilha *p) { p->carros [p->topo] = i; p->topo++; }
int desempilha(pilha *p) { int pl = p->carros [p->topo--]; return pl; }
int tamanho_pilha(pilha *p) { return p->topo; }
void mostra_pilha(pilha p, char msg) { int i; printf("\n%s: ", msg); if (pilha_vazia(p)) { printf(" Estacionamento Vazio"); } else { for(i=0; i<MAX; i++) { printf("\n[%d]: %d", i, p->carros[i]); } } }
pilha chega_carro(int pl, pilha *p) { carros c; pl = c.placa; c.manobra = 0;
printf("\nDigite a Placa: "); scanf("%d", &pl); printf("\tCarro %d chega", pl); printf("\t\tVerifica vaga: ");
if(!pilha_cheia(p)) { printf(" ha' vagas"); printf("\t %d estaciona", pl); empilha(pl, p); } else { printf(" Nao ha vagas. Estacionamento Lotado."); } }
int sai_carro(int pl, pilha p) { carros c; pl = c.placa; c.manobra = 0; pilha aux; int i;
if(pilha_vazia(p)) { printf("\nEstacionamento Vazio! Ocorreu um equivoco..."); } else if(!pilha_vazia(p)) { printf("\nDigite a Placa para Retirada de veiculo: "); scanf("%d", &pl);
if (p->carros[p->topo] == pl) { printf("\nCarro %d saiu do estacionamento", pl); desempilha(p); if(!pilha_vazia(aux)) { do { empilha(pl, p); desempilha(aux); }while (!pilha_vazia(aux)); } } else if (p-> carros [p->topo] != pl) { for(i=0; i<=MAX; i++) { if((i=MAX) && (p->carros[p->topo] != pl)) { printf("\nCarro com %d placa nao consta no estacionamento!", pl); } } do { empilha(pl, aux); //pl = c.placa; c.manobra++; desempilha(p); printf("\nCarro %d saiu do estacionamento", pl); printf("\ncom %d manobras", c.manobra); } while(p-> carros [p->topo] != pl); } }//fim do: else if(!pilha_vazia(p)) return pl;
} int main(int argc, char argv[]) { pilha p, *aux; carros c; int pl, m, escolha, contador;
p = (pilha ) malloc (sizeof (pilha)); aux = (pilha ) malloc (sizeof (pilha)); //c = (carros ) malloc (sizeof (carros ));
do { printf("\n=========================================="); printf("\n PROGRAMA ESTACIONAMENTO \n"); printf("============================================"); printf("\nEscolha uma opcao: \n"); printf(" 1 - Abrir Estacionamento\n"); printf(" 2 - Estacionar veiculo\n"); printf(" 3 - Retirar veiculo\n"); printf(" 4 - Mostrar status do estacionamento\n"); printf(" 5 - Sair\n\n"); scanf("%d", &escolha); printf(" Opcao escolhida: %d\n", escolha);
switch(escolha) { case 1: inicia_pilha(p); break; case 2: chega_carro(pl, p); break; case 3: sai_carro(pl, p); break; case 4: mostra_pilha(p, "Status do Estacionamento"); break; case 5: free(p); free(aux); exit(0); default: printf("\nOpcao Invalida"); break; }
}while ( (escolha >= 1) && (escolha <= 5) );
printf("\n\n"); return 0; }
Exercício de Estrutura de Dados (Projeto 1) estacionamento_pilha.c
apenas a função de retirar o carro do estacionamento não está funcionando.
include
include
define MAX 10
define MAX_AUX 9
typedef struct Carros { int placa; int manobra; }carros;
typedef struct Pilha{ int carros [MAX];
int topo;
}pilha;
void inicia_pilha(pilha *p) { p->topo = 0; printf("\nEstacionamento aberto\n"); }
int pilha_vazia(pilha *p) { return p->topo == 0;
}
int pilha_cheia(pilha *p) { return p->topo == MAX;
}
int empilha(int i, pilha *p) {
p->carros [p->topo] = i;
p->topo++;
}
int desempilha(pilha *p) { int pl = p->carros [p->topo--];
return pl;
}
int tamanho_pilha(pilha *p) { return p->topo; }
void mostra_pilha(pilha p, char msg) { int i;
printf("\n%s: ", msg);
if (pilha_vazia(p)) { printf(" Estacionamento Vazio");
} else { for(i=0; i<MAX; i++) { printf("\n[%d]: %d", i, p->carros[i]);
}
} }
pilha chega_carro(int pl, pilha *p) {
carros c; pl = c.placa; c.manobra = 0;
printf("\nDigite a Placa: "); scanf("%d", &pl);
printf("\tCarro %d chega", pl);
printf("\t\tVerifica vaga: ");
if(!pilha_cheia(p)) { printf(" ha' vagas"); printf("\t %d estaciona", pl);
empilha(pl, p); } else { printf(" Nao ha vagas. Estacionamento Lotado."); }
}
int sai_carro(int pl, pilha p) { carros c; pl = c.placa; c.manobra = 0;
pilha aux;
int i;
if(pilha_vazia(p)) { printf("\nEstacionamento Vazio! Ocorreu um equivoco..."); } else if(!pilha_vazia(p)) {
printf("\nDigite a Placa para Retirada de veiculo: ");
scanf("%d", &pl);
} int main(int argc, char argv[]) { pilha p, *aux;
carros c; int pl, m, escolha, contador;
p = (pilha ) malloc (sizeof (pilha)); aux = (pilha ) malloc (sizeof (pilha)); //c = (carros ) malloc (sizeof (carros ));
do { printf("\n=========================================="); printf("\n PROGRAMA ESTACIONAMENTO \n"); printf("============================================"); printf("\nEscolha uma opcao: \n"); printf(" 1 - Abrir Estacionamento\n"); printf(" 2 - Estacionar veiculo\n"); printf(" 3 - Retirar veiculo\n"); printf(" 4 - Mostrar status do estacionamento\n"); printf(" 5 - Sair\n\n"); scanf("%d", &escolha); printf(" Opcao escolhida: %d\n", escolha);
}while ( (escolha >= 1) && (escolha <= 5) );
printf("\n\n"); return 0; }