jacquel 0 Denunciar post Postado Setembro 14, 2009 ** Estou precisando fazer um programa em C utilizando Pilha que tenha as seguintes funções: 1 - Converter uma expressão na forma Infixa para Posfixa (Notação Polonesa Reversa). 2 - Avaliar se uma expressão está correta, quanto aos parênteses e a posição dos operadores e operandos. 3- Adicionar funcionalidades à calculadora: • # - raiz quadrada • ^ - exponenciação • % - resto Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 14, 2009 ok, comece a fazer que te orientamos. []s Compartilhar este post Link para o post Compartilhar em outros sites
jacquel 0 Denunciar post Postado Setembro 23, 2009 Fiz a seguinte função para verificar se os parenteses de uma expressao infixa aparecem balanceados, entretanto ela só funciona para uma sequencia de parenteses. Tipo: ( ( ) ) - ela retornará valor 1-correta ( ( () - ela retornará 0-errada ##PROBLEMA: (x+y) -> RETORNA 0 (MESMO ESTANDO CERTA) int bemFormada (char inf[MAX]) { char *pilha; int t; int n, i; n = strlen (inf); pilha = (char*)malloc(n * sizeof (char)); t = 0; for (i = 0; inf[i] != '\0'; ++i) { // a pilha está armazenada em pilha[0..t-1] switch (inf[i]) { case ')': if (t != 0 && pilha[t-1] == '(') --t; else return 0; break; default: pilha[t++] = inf[i]; } } free (pilha); if (t == 0) return 1; else return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
Daniloinf 3 Denunciar post Postado Setembro 23, 2009 Olá, Me parece que você esta construindo a pilha de um jeito errado, você esta empilhando todos os elementos sendo que só seria preciso armazenas os '(', acho que isso iria funcionar: int bemFormada (char inf[MAX]) { char *pilha; int t; int n, i; n = strlen (inf); pilha = (char*)malloc(n * sizeof (char)); t = 0; for (i = 0; inf[i] != '\0'; ++i) { // a pilha está armazenada em pilha[0..t-1] switch (inf[i]) { case ')': if (t != 0 && pilha[t-1] == '(') --t; else return 0; break; case '(': pilha[t++] = inf[i]; } } free (pilha); if (t == 0) return 1; else return 0; } Compartilhar este post Link para o post Compartilhar em outros sites