Autor Tópico: Problemas com expressões infixas em C  (Lida 6470 vezes)

Offline willmesquita

  • Usuário Ubuntu
  • *
  • Mensagens: 18
    • Ver perfil
Problemas com expressões infixas em C
« Online: 12 de Agosto de 2014, 11:42 »
Bom dia, vim aqui porque estou com sérias dúvidas em resolver um problema com expressões infixas: (2+(3*3)), estou com várias dúvidas sobre como fazer o código e praticamente estou estagnado pois só consigo ler e fazer a operação dos últimos parenteses lidos e não da expressão como um todo, vou postar o código aqui


Código: [Selecionar]
void resul(char expression[])
{
int n,t=0,b=0,a=0,tmp[10],resultado=0,i;
char *pi,aux[5];

n = strlen(expression);
    pi = calloc(n,sizeof(char));



for(i=0;i<10;i++)tmp[i]=0;

for(i=0;expression[i]!='\0';i++)
{

        switch(expression[i])
        {
        case '(':
            pi[t]=expression[i];
            t++;
            break;
        case ')':
            while(1)
            {
                if(pi[t-1]=='(') break;
                else
                {
                    if(pi[t-1]=='+')
                    {
                      tmp[a]=atoi(aux);
                      aux[0]='\0';
                      b=0;
                      resultado=tmp[a]+tmp[a-1];
                      tmp[a-1]=resultado;
                      tmp[a]=0;
                      --a;
                      --t;
                    }

                      printf("teste\n");
                    }
              }
            break;
        case '+':
            while(1)
            {
                if(pi[t-1]='(') break;
                --t;
            }
                tmp[a]= atoi(aux);
                a++;
                aux[0]='\0';
                b=0;
                pi[t]=expression[i];
                t++;
            break;
        default:
            aux[b]=expression[i];
            b++;
            aux[b]='\0';
            break;
        }

        }

    printf("resultado: %d", resultado);
    free(pi);
      }
« Última modificação: 12 de Agosto de 2014, 16:35 por willmesquita »

Offline delhmc

  • Usuário Ubuntu
  • *
  • Mensagens: 123
    • Ver perfil
Re: Problemas com expressões infixas em C
« Resposta #1 Online: 14 de Agosto de 2014, 23:33 »
Boa noite, então... Estão faltando detalhes nesta lógica:

1) Você precisa fazer um tratamento também com o caractere '*' (Asterisco) e também com a barra "/" (Divisão), não existe no código. Dessa forma, vc precisa calcular primeiro, o total resultante entre o valor anterior e posterior tendo um destes caracteres no meio (Multiplicação ou divisão). Para tanto, o array aux[] deveria comportar valor decimal (float, double, number, etc) e não uma cadeia de caracteres. Sobretudo pela divisão, mas se vc também imaginar valores decimais como entrada (2.13, 4.2, etc) será preciso também fazer um tratamento com '.' (Ponto), mas daí seria mais complicadinho.

2) Só depois de multiplicar e/ou dividir os pares (Guardando-os no aux[], por exemplo) é que vc deve partir pra soma e divisão. Sugiro também, ter um outro array indicador de soma ou subtração em sequência, do tipo operacaoSomaSubtrai[] (Para usar no final e poder calcular o total, pois vc precisa seguir rigorosamente uma sequência).

3) Já que vc calculou o total de caracteres da variável expression, poderia usar i < n no segundo FOR (Em vez de expression!='\0');

Curiosidade: Faz um tempo que não mexo com linguagem C, mas seria preciso mesmo zerar o seu array? Como aqui:

for(i=0;i<10;i++)tmp[/i]=0;

Ela já não vem zerado? Creio que sim, principalmente se for referente à número inteiro. No caso de array de caracteres acho que daria pra fazer isso: *aux='\0', não? (Só como exemplo) Pois se eu não estiver enganado, me lembro que algumas vezes, um instanciamento de um array de caracteres vinha com sujeira/resquício de alguma área de memória, mas isso faz um bom tempo atrás, rs...
« Última modificação: 15 de Agosto de 2014, 00:56 por delhmc »