Gabriel_Rofl

calc.c

Oct 26th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 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. }
Add Comment
Please, Sign In to add comment