fork(10) download
  1. #include <iostream>
  2. #define tamPilha 3
  3. #define tamPorto 4
  4. using namespace std;
  5.  
  6. //define a estrutura que será a pilha
  7. //a estrutura armazena a indicação do topo da pilha e um vetor com os itens (valores) da pilha
  8. typedef struct{
  9. int topo = 0;
  10. int item [tamPilha] ;
  11. } PILHA;
  12.  
  13. //retorna se a pilha está vazia ou não
  14. bool pilhaVazia(PILHA p){
  15. if(p.topo == 0) {
  16. return true;
  17. } else {
  18. return false;
  19. }
  20. }
  21.  
  22. //retorna se a pilha está cheia ou não
  23. bool pilhaCheia(PILHA p) {
  24. int tam = sizeof(p.item)/sizeof(int); //determina o tamanho do vetor
  25.  
  26. if (p.topo < tam) {
  27. return false;
  28. } else {
  29. return true;
  30. }
  31. }
  32.  
  33. //adiciona valor na pilha
  34. void empilha(PILHA &p, int x){
  35. p.item[p.topo++]=x;
  36. }
  37.  
  38. //remove valor da pilha
  39. int desempilha(PILHA &p){
  40. return p.item[--p.topo];
  41. }
  42.  
  43. //retorna o valor que está em cima na pilha
  44. int valorTopo(PILHA p) {
  45. return p.item[p.topo - 1];
  46. }
  47.  
  48. //mostra os valores armazenados na pilha
  49. void mostraPilha(PILHA p) {
  50. cout << "Valores da pilha: ";
  51. if (p.topo > 0) {
  52. for (int i = 0; i < p.topo; i++) {
  53. cout << p.item[i] << " ";
  54. }
  55. } else {
  56. cout << "pilha vazia";
  57. }
  58. cout << "\n";
  59. }
  60.  
  61. void mostraPorto(PILHA vet[tamPorto]) {
  62. for (int i = 0; i < tamPorto; i++) {
  63. cout << "Porto " << i+1 << " -> ";
  64. mostraPilha(vet[i]);
  65. }
  66. }
  67.  
  68. //determina qual pilha está mais vazia retornando a posição no vetor
  69. int pilhaMaisVazia(PILHA vet[tamPorto]) {
  70. //armazena o menor valor e que pilha (posicao) ele esta
  71. int menor = vet[0].topo, posicao = 0;
  72. for (int i = 1; i < tamPorto; i++) {
  73. if (vet[i].topo < menor) {
  74. menor = vet[i].topo;
  75. posicao = i;
  76. }
  77. }
  78.  
  79. return posicao;
  80. }
  81.  
  82. void mostraOpcoes() {
  83. cout << "Opcoes disponiveis: " << endl;
  84. cout << "0: sair" << endl;
  85. cout << "1: adicionar container" << endl;
  86. cout << "2: remover container" << endl;
  87. cout << "Digite sua opcao: ";
  88. }
  89.  
  90. //verifica se o código está presente em alguma das pilhas do porto
  91. //se existir retorna a posicao no vetor (local do porto)
  92. int codigoExiste(PILHA vet[tamPorto], int cod) {
  93. for (int i = 0; i < tamPorto; i++) {
  94. for (int j = 0; j < tamPilha; j++) {
  95. if (vet[i].item[j] == cod) {
  96. return i;
  97. }
  98. }
  99. }
  100. return -1; //se não encontrar o código vai retornar aqui
  101. }
  102.  
  103. //Código para testar a implementação.
  104. int main(){
  105. PILHA local[tamPorto];
  106. int opcao, codigo;
  107.  
  108. while (true) {
  109. //mostraOpcoes();
  110. cin >> opcao;
  111. if (opcao == 0) {
  112. break;
  113. }
  114.  
  115. //cout << "Informe o codigo do container: ";
  116. cin >> codigo;
  117.  
  118. if (opcao == 1) { //adicionar container
  119. if (codigoExiste(local, codigo) != -1) {
  120. cout << "Codigo invalido" << endl; //codigo fornecido já existente
  121. } else {
  122. int posicaoPorto = pilhaMaisVazia(local);
  123. if (pilhaCheia(local[posicaoPorto])) {
  124. cout << "Impossivel empilhar!" << endl; //nenhum lugar vago disponível
  125. } else {
  126. empilha(local[posicaoPorto],codigo);
  127. }
  128. }
  129. } else { //remover container
  130. int posicaoPorto = codigoExiste(local, codigo);
  131. if (posicaoPorto == -1) {
  132. cout << "Codigo invalido!" << endl; //codigo fornecido nao existente
  133. } else {
  134. if (valorTopo(local[posicaoPorto]) == codigo) {
  135. desempilha(local[posicaoPorto]);
  136. } else {
  137. cout << "Impossivel desempilhar!" << endl; //codigo fornecido nao esta no topo da pilha
  138. }
  139. }
  140. }
  141. mostraPorto(local);
  142. cout << "\n";
  143. }
  144.  
  145. return 0;
  146. }
Success #stdin #stdout 0s 3468KB
stdin
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 13
1 23
2 22
2 21
1 13
1 22
0
stdout
Porto 1 -> Valores da pilha: 10 
Porto 2 -> Valores da pilha: pilha vazia
Porto 3 -> Valores da pilha: pilha vazia
Porto 4 -> Valores da pilha: pilha vazia

Porto 1 -> Valores da pilha: 10 
Porto 2 -> Valores da pilha: 11 
Porto 3 -> Valores da pilha: pilha vazia
Porto 4 -> Valores da pilha: pilha vazia

Porto 1 -> Valores da pilha: 10 
Porto 2 -> Valores da pilha: 11 
Porto 3 -> Valores da pilha: 12 
Porto 4 -> Valores da pilha: pilha vazia

Porto 1 -> Valores da pilha: 10 
Porto 2 -> Valores da pilha: 11 
Porto 3 -> Valores da pilha: 12 
Porto 4 -> Valores da pilha: 13 

Porto 1 -> Valores da pilha: 10 14 
Porto 2 -> Valores da pilha: 11 
Porto 3 -> Valores da pilha: 12 
Porto 4 -> Valores da pilha: 13 

Porto 1 -> Valores da pilha: 10 14 
Porto 2 -> Valores da pilha: 11 15 
Porto 3 -> Valores da pilha: 12 
Porto 4 -> Valores da pilha: 13 

Porto 1 -> Valores da pilha: 10 14 
Porto 2 -> Valores da pilha: 11 15 
Porto 3 -> Valores da pilha: 12 16 
Porto 4 -> Valores da pilha: 13 

Porto 1 -> Valores da pilha: 10 14 
Porto 2 -> Valores da pilha: 11 15 
Porto 3 -> Valores da pilha: 12 16 
Porto 4 -> Valores da pilha: 13 17 

Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 
Porto 3 -> Valores da pilha: 12 16 
Porto 4 -> Valores da pilha: 13 17 

Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 
Porto 4 -> Valores da pilha: 13 17 

Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 20 
Porto 4 -> Valores da pilha: 13 17 

Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 20 
Porto 4 -> Valores da pilha: 13 17 21 

Impossivel empilhar!
Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 20 
Porto 4 -> Valores da pilha: 13 17 21 

Codigo invalido
Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 20 
Porto 4 -> Valores da pilha: 13 17 21 

Impossivel empilhar!
Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 20 
Porto 4 -> Valores da pilha: 13 17 21 

Codigo invalido!
Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 20 
Porto 4 -> Valores da pilha: 13 17 21 

Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 20 
Porto 4 -> Valores da pilha: 13 17 

Codigo invalido
Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 20 
Porto 4 -> Valores da pilha: 13 17 

Porto 1 -> Valores da pilha: 10 14 18 
Porto 2 -> Valores da pilha: 11 15 19 
Porto 3 -> Valores da pilha: 12 16 20 
Porto 4 -> Valores da pilha: 13 17 22