Advertisement
Gabriel_Rofl

calc.c

Oct 26th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. void infixa_to_posfixa(char* expressao){
  2. char str_aux[101];//teste com str estatica
  3. int prio_ant, prio_op = 0;
  4. t_pilha* pilha = aloca_pilha();
  5. int i = 0, j = 0, k = 0;
  6. while(expressao[k] != '\0'){
  7. if(expressao[i] != '+' && expressao[i] != '-'
  8. && expressao[i] != '*' && expressao[i] != '/'
  9. && expressao[i] != '(' && expressao[i] != '['
  10. && expressao[i] != '{' && expressao[i] != ')'
  11. && expressao[i] != ']' && expressao[i] != '}'
  12. && expressao[i] != '\0')
  13. {
  14. str_aux[j] = expressao[i];
  15. i++;
  16. j++;
  17. k++;
  18. }
  19. //Para os operadores:
  20. else{
  21. if( (prioridade(expressao, pilha, i) == 1 && pilha_vazia(pilha)) || prioridade(expressao, pilha, i) == 2 && pilha_vazia(pilha) ){
  22. push(pilha, expressao[i]);
  23. prio_ant = prioridade(expressao, pilha, i);
  24. i++;
  25. }
  26. else{
  27. if(prioridade(expressao, pilha, i) == 1 && !pilha_vazia(pilha)){
  28. if(prio_ant < prioridade(expressao, pilha, i)){
  29. push(pilha, expressao[i]);
  30. prio_ant = prioridade(expressao, pilha, i);
  31. i++;
  32. }
  33. else{
  34. if(prio_ant >= prioridade(expressao, pilha, i)){
  35. str_aux[j] = pop(pilha);
  36. push(pilha, expressao[i]);
  37. i++;
  38. k++;
  39. j++;
  40. }
  41. }
  42. }
  43. else{
  44. if(prioridade(expressao, pilha, i) == 2 && !pilha_vazia(pilha)){
  45. if(prio_ant < prioridade(expressao, pilha, i)){
  46. push(pilha, expressao[i]);
  47. prio_ant = prioridade(expressao, pilha, i);
  48. i++;
  49. }
  50. else{
  51. if(prio_ant >= prioridade(expressao, pilha, i)){
  52. str_aux[j] = pop(pilha);
  53. push(pilha, expressao[i]);
  54. i++;
  55. k++;
  56. j++;
  57. }
  58. }
  59. }
  60. else{
  61. if(prioridade(expressao, pilha, i) == -1 && !pilha_vazia(pilha)){
  62. str_aux[j] = pop(pilha);
  63. j++;
  64. k++;
  65. }
  66. }
  67. }
  68. }
  69. //Para os parenteses, colchetes e chaves:
  70. if( (prioridade(expressao, pilha, i) == 3 && pilha_vazia(pilha)) || (prioridade(expressao, pilha, i) == 4 && pilha_vazia(pilha)) || (prioridade(expressao, pilha, i) == 5 && pilha_vazia(pilha)) )
  71. {
  72. push(pilha, expressao[i]);
  73. i++;
  74. k++;
  75. j++;
  76. //prio_op = prioridade(expressao, pilha, i);
  77. }
  78. else{
  79. if( (prioridade(expressao, pilha, i) == 5 && !pilha_vazia(pilha)) || (prioridade(expressao, pilha, i) == 4 && !pilha_vazia(pilha)) || (prioridade(expressao, pilha, i) == 3 && !pilha_vazia(pilha)) ){
  80. push(pilha, expressao[i]);
  81. i++;
  82. }
  83. else{
  84. if(expressao[i] == ')' || expressao[i] == ']' || expressao[i] == '}'){
  85. while(pilha->topo == '*' || pilha->topo == '/'){
  86. if(pilha->topo == '(' || pilha->topo == '[' || pilha->topo == '{'){
  87. pop(pilha);
  88. break;
  89. }
  90. str_aux[j] == pop(pilha);
  91. j++;
  92. k++;
  93. }
  94. }
  95. }
  96. }
  97.  
  98. }
  99. }
  100. str_aux[k] = '\0';
  101. printf("Infixa: %s\nPosfixa: %s\n", expressao, str_aux);
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement