Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void infixa_to_posfixa(char* expressao){
- char str_aux[101];//teste com str estatica
- int prio_ant, prio_op = 0;
- t_pilha* pilha = aloca_pilha();
- int i = 0, j = 0, k = 0;
- while(expressao[k] != '\0'){
- if(expressao[i] != '+' && expressao[i] != '-'
- && expressao[i] != '*' && expressao[i] != '/'
- && expressao[i] != '(' && expressao[i] != '['
- && expressao[i] != '{' && expressao[i] != ')'
- && expressao[i] != ']' && expressao[i] != '}'
- && expressao[i] != '\0')
- {
- str_aux[j] = expressao[i];
- i++;
- j++;
- k++;
- }
- //Para os operadores:
- else{
- if( (prioridade(expressao, pilha, i) == 1 && pilha_vazia(pilha)) || prioridade(expressao, pilha, i) == 2 && pilha_vazia(pilha) ){
- push(pilha, expressao[i]);
- prio_ant = prioridade(expressao, pilha, i);
- i++;
- }
- else{
- if(prioridade(expressao, pilha, i) == 1 && !pilha_vazia(pilha)){
- if(prio_ant < prioridade(expressao, pilha, i)){
- push(pilha, expressao[i]);
- prio_ant = prioridade(expressao, pilha, i);
- i++;
- }
- else{
- if(prio_ant >= prioridade(expressao, pilha, i)){
- str_aux[j] = pop(pilha);
- push(pilha, expressao[i]);
- i++;
- k++;
- j++;
- }
- }
- }
- else{
- if(prioridade(expressao, pilha, i) == 2 && !pilha_vazia(pilha)){
- if(prio_ant < prioridade(expressao, pilha, i)){
- push(pilha, expressao[i]);
- prio_ant = prioridade(expressao, pilha, i);
- i++;
- }
- else{
- if(prio_ant >= prioridade(expressao, pilha, i)){
- str_aux[j] = pop(pilha);
- push(pilha, expressao[i]);
- i++;
- k++;
- j++;
- }
- }
- }
- else{
- if(prioridade(expressao, pilha, i) == -1 && !pilha_vazia(pilha)){
- str_aux[j] = pop(pilha);
- j++;
- k++;
- }
- }
- }
- }
- //Para os parenteses, colchetes e chaves:
- 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)) )
- {
- push(pilha, expressao[i]);
- i++;
- k++;
- j++;
- //prio_op = prioridade(expressao, pilha, i);
- }
- else{
- 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)) ){
- push(pilha, expressao[i]);
- i++;
- }
- else{
- if(expressao[i] == ')' || expressao[i] == ']' || expressao[i] == '}'){
- while(pilha->topo == '*' || pilha->topo == '/'){
- if(pilha->topo == '(' || pilha->topo == '[' || pilha->topo == '{'){
- pop(pilha);
- break;
- }
- str_aux[j] == pop(pilha);
- j++;
- k++;
- }
- }
- }
- }
- }
- }
- str_aux[k] = '\0';
- printf("Infixa: %s\nPosfixa: %s\n", expressao, str_aux);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement