argentinapb

Untitled

May 2nd, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define max 5 //Altere o valor de max para controlar o numero de letras que o vetor terĂ¡;
  6.  
  7. struct Pilha{
  8. char letra[max];
  9. int topo;
  10. };
  11.  
  12. struct Letra{
  13. int cont[max];
  14. char c[max];
  15. };
  16.  
  17. typedef struct Pilha pilha;
  18. typedef struct Letra letr;
  19.  
  20. void menu(){
  21. printf("------------------------ MENU -----------------------\n");
  22. printf("| 1 para adcionar uma letra |\n");
  23. printf("| 2 para excluir uma letra |\n");
  24. printf("| 3 para exibir as letras cadastradas |\n");
  25. printf("| 4 para exibir a quantidade de movimentos |\n");
  26. printf("| 5 para sair |\n");
  27. printf("-----------------------------------------------------\n\n-->");
  28. }
  29.  
  30. void inicia(pilha *p, letr *l){
  31. for(int i = 0; i < max; i++){
  32. l->cont[i] = 0;
  33. p->letra[i] = 0;
  34. }
  35. }
  36.  
  37. void push(pilha *p, char x ){
  38.  
  39. if(p->topo < 0)
  40. p->topo = 0;
  41.  
  42. p->letra[p->topo] = x;
  43. p->topo = p->topo +1;
  44. }
  45.  
  46. char pop(pilha *p){
  47.  
  48. char y;
  49. y = p->letra[p->topo-1];
  50. p->topo = p->topo - 1;
  51.  
  52. return y;
  53. }
  54.  
  55. void show(pilha *p){
  56.  
  57. pilha p2;
  58. p2.topo = 0;
  59. int y;
  60.  
  61.  
  62.  
  63. printf("Valores contidos na pilha : \n\n");
  64. while(p->topo > 0){
  65. y = pop(p);
  66. push(&p2, y);
  67. }
  68. while(p2.topo > 0){
  69. y = pop(&p2);
  70. push(p, y);
  71. printf(" |%c|\n", p->letra[p->topo-1]);
  72. }
  73. printf("\n");
  74. printf("*Observacao: estamos printando a fila de forma invertida para melhor visualizacao*\n");
  75. }
  76.  
  77. void cont(letr *l, char x){
  78.  
  79. for(int i = 0; i < max ; i++){
  80. if(l->c[i] == x)
  81. l->cont[i]++;
  82. }
  83. }
  84.  
  85.  
  86. void pushO(char x, pilha *p, letr *l, int count ){
  87.  
  88.  
  89. char y;
  90. int k = 0;
  91. pilha aux;
  92. aux.topo = 0;
  93.  
  94. if(p->topo == max){
  95. printf("A pilha ja esta cheia!\n");
  96. return;
  97. }
  98. if(p->topo == 0){
  99. push(p, x);
  100. cont(l, x);
  101. }
  102. else{
  103. for(int i = 0; i < p->topo; i++){
  104. while(k < count){
  105. if(p->letra[p->topo-1] > x){
  106. y = pop(p);
  107. cont(l, y);
  108. push(&aux, y);
  109. }
  110. k++;
  111. }
  112. }
  113. push(p, x);
  114. cont(l, x);
  115.  
  116.  
  117. while(aux.topo > 0){
  118. y = pop(&aux);
  119. push(p, y);
  120. cont(l, y);
  121. }
  122.  
  123. }
  124. }
  125.  
  126. void popE(pilha *p, letr *l, char x){
  127.  
  128. pilha aux;
  129. aux.topo = 0;
  130.  
  131. int z, count = 0;
  132.  
  133. if(p->topo == 0)
  134. printf("A pilha esta vazia!\n");
  135. else{
  136. while(p->letra[p->topo-1] != x && p->topo > 0){
  137. z = pop(p);
  138. cont(l, z);
  139. count++;
  140. push(&aux, z);
  141. }
  142. if(x == p->letra[p->topo -1]){
  143. z = pop(p);
  144. cont(l, z);
  145. count++;
  146. printf("Valor removido com sucesso!\n");
  147. }
  148. else
  149. printf("Valor nao encontrado\n");
  150.  
  151. while(aux.topo > 0){
  152. z = pop(&aux);
  153. push(p, z);
  154. cont(l, z);
  155. }
  156. }
  157. }
  158.  
  159. int verifica(char x){
  160.  
  161. if ((x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z'))
  162. return 1;
  163. else
  164. return 0;
  165. }
  166.  
  167. void quantidade(letr *l, int cl){
  168. for(int i = 0; i < cl; i++){
  169. printf("Letra: %c\n", l->c[i]);
  170. printf("Numero de vezes que foi empilhada/desempilhada: %d\n", l->cont[i]);
  171. printf("\n");
  172. }
  173. }
  174.  
  175.  
  176. int main(){
  177.  
  178. pilha p;
  179. p.topo = 0;
  180.  
  181. letr l;
  182.  
  183. inicia(&p, &l);
  184.  
  185. int count = 0, op, z = 0, cl = 0;
  186. char x, u;
  187.  
  188. while(1){
  189.  
  190. menu();
  191. scanf("%d", &op);
  192. switch(op){
  193. case 1:
  194. fflush(stdin);
  195. printf("digite a letra que deseja: ");
  196. scanf("%c", &x);
  197. z = verifica(x);
  198. while(z == 0){
  199. fflush(stdin);
  200. printf("Valor invalido, apenas letras permitidas, digite novamente\n");
  201. scanf("%c", &x);
  202. z = verifica(x);
  203. }
  204. l.c[cl] = x;
  205. cl++;
  206. count++;
  207. pushO(x, &p, &l, count);
  208. fflush(stdin);
  209. printf("Valor adcionado!\n");
  210. system("pause");
  211. system("cls");
  212.  
  213.  
  214.  
  215. break;
  216.  
  217. case 2:
  218. printf("Insira o valor que deseja remover\n");
  219. fflush(stdin);
  220. scanf("%c", &u);
  221. popE(&p, &l, u);
  222. system("pause");
  223. system("cls");
  224. break;
  225. case 3:
  226. show(&p);
  227. system("pause");
  228. system("cls");
  229. break;
  230. case 4:
  231. quantidade(&l, cl);
  232. system("pause");
  233. system("cls");
  234. break;
  235. }
  236.  
  237. }
  238. return 0;
  239. }
Advertisement
Add Comment
Please, Sign In to add comment