Exercício Estrutura de dados - Estacionamento
Por: Jamil Neto • 8/5/2016 • Trabalho acadêmico • 12.131 Palavras (49 Páginas) • 770 Visualizações
Exercicio do Estacinamento
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <string.h>
4. #include <ctype.h>
5. #include <locale.h>
6. #define TAM 20
7.
8. /* Struc para criação das pilhas */
9. struct stack {
10. int topo;
11. int item[TAM];
12. };
13.
14. /* Protótipos das funções de pilha */
15. void iniciaPilha(struct stack *ps);
16. int pilhaVazia(struct stack *ps);
17. int pilhaCheia(struct stack *ps);
18. int push(struct stack *ps, int x);
19. int pop(struct stack *ps);
20.
21. /* Função principal */
22. int main() {
23.
24. struct stack est, rua;
25. int placa;
26. int op, ind = 0;
27. int cont = 0, temp, e;
28.
29. iniciaPilha(&est); /* Cria a pilha ESTACIONAMENTO */
30. iniciaPilha(&rua); /* Cria a pilha RUA */
31.
32. setlocale(LC_ALL, "portuguese");
33.
34. do {
35. /* Um menu de entrada, para simular o 'E' de entrada e 'S' de saída,
36. seguido da placa do carro. */
37. system("CLS");
38. printf("\n Estacionamento do Luciano. FILA ÚNICA. Preço único: R$ 10,00\n");
39. printf("\n Descontos de 2%% por manobra efetuada.\n\n\n");
40. printf("\n [1] Entrada");
41. printf("\n [2] Saída");
42. printf("\n [3] Mostrar carros estacionados");
43. printf("\n [4] Sair do programa");
44. printf("\n\n Escolha sua opção: ");
45. scanf("%d", &op);
46. switch (op)
47. {
48. /*O menu processa a entrada da seguinte forma:
49. a) Se tiver vaga, aceita o carro, senão informa que o estacionamento está cheio.
50. b) Ao entrar um carro, guarda a placa na pilha, seguido de um valor '0', o qual
51. servirá para acumular as 'manobras' de saída e reentrada. */
52. case 1: {
53. system("CLS");
54. if ( pilhaCheia(&est) == 1) {
55. printf("\n Cara, o estacionamento está cheio. Volte outra hora.");}
56. else {
57. printf("\n Vagas: %d", (TAM/2) - cont); /* Mostra as vagas restantes */
58. printf("\n Digite a placa (número): ");
59. scanf("%d",&placa);
60. push(&est, placa); /* guarda a placa */
61. push(&est, 0); /* guarda o valor '0', que será usado para contar manobras */
62. cont++;
63. printf("\n Carro de placa %d estacionado com sucesso.", placa); }
64. system("pause>NULL");
65. break;}
66.
67. /*O menu processa a saída da seguinte forma:
68. a) Se a pilha EST estiver vazia, não há carros para retirar.
69. b) Se tiver carros no estacionamento, faz um loop do..while, retirando o indicador e
70. a placa que estiverem no topo.
71. c) Compara a placa com o carro a ser retirado. Se for o carro procurado, informa
72. a saída
73. d) Se não, guarda a placa e o indicador na pilha RUA
74. e) Repete o ciclo, pegando o próximo indicador e carro do EST, até encontrar, ou
75. chegar ao fim da pilha.
76. f) Quando o loop acaba, retorna os carros e indicadores da pilha RUA, e recoloca na
77. pilha EST, acrencentando 1 a cada indicador de manobra. */
78. case 2: {
79. system("CLS");
80. /* Caso de não haver carros no estacionamento (pilha EST vazia) */
81. if (pilhaVazia(&est)
...