Por favor ajuda !!
Tenho que criar uma funcao que receba uma expressao matematica e avalie se ela esta correta, usando pilhas.
Exemplo {[10+(8*2)/2]} e checar se a ordem dos parentes chave e colchetes bate.
Ate agora fiz isso:
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
# define MAX 30
typedef struct spilha{//minha estrura
char dados[MAX];
int topo;
}tpilha;
void inicializa(tpilha *p)
{
p -> topo = -1;//inicializa a minha pilha em -1
}
int funcaoCalcula(tpilha *p,char palavras[30]){
int i,v;
for(i=0;palavras[i] !='\0';i++){//esse trecho e fundamental pq ele conta a qtd de letra e as quebra pq se nao tivesse o sistema exibe sujeira
if(palavras[i] == '{' || palavras[i] == '(' || palavras[i] == '['){
p->topo++;
p->dados[p->topo]=palavras[i];
}//fim if
else if(palavras[i] == '}' && p->topo == '{' || palavras[i] == ')' && p->topo == '(' || palavras[i] == ']' && p->topo == '[')
{
v=p->dados[p->topo];
p->topo--;
return 1;
}//fim else if
else if(palavras[i] == '}' && p->topo != '{' || palavras[i] == ')' && p->topo != '(' || palavras[i] == ']' && p->topo != '[')
{
return 0;
}
}//fim for
}//fim funcao
int top(tpilha p){
return p.dados[p.topo];
}
void exibeCabecalho()//inicio funcao exibe cabecalho
{
printf("****************************************** **************************************");
printf("* *");
printf("* ANALIZADOR DE EXPRESSOES MATEMATICAS *");
printf("* *");
printf("* *");
printf("* *");
printf("****************************************** **************************************");
printf("\n");
printf("\n");
printf("****************************************** **************************************");
}//fim funcao cabecalho
int main()
{
tpilha p1;
char nome[30];
int r;
inicializa(&p1);//joga p1 para inicializacao
exibeCabecalho();//chama funcao exibe cabecalho
printf("DIGITE UMA EXPRESSAO PARA ANALISE !! ->");
gets(nome);
funcaoCalcula(&p1,nome);
if(funcaoCalcula(&p1,nome)==0)
{
printf("Sua expressao esta correta !");
}
else if(funcaoCalcula(&p1,nome)==1){
printf("Sua expressao esta incorreta !");
}
r=top(p1);
printf("Topo:%c",r);
getch();
}
Tenho que criar uma funcao que receba uma expressao matematica e avalie se ela esta correta, usando pilhas.
Exemplo {[10+(8*2)/2]} e checar se a ordem dos parentes chave e colchetes bate.
Ate agora fiz isso:
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
# define MAX 30
typedef struct spilha{//minha estrura
char dados[MAX];
int topo;
}tpilha;
void inicializa(tpilha *p)
{
p -> topo = -1;//inicializa a minha pilha em -1
}
int funcaoCalcula(tpilha *p,char palavras[30]){
int i,v;
for(i=0;palavras[i] !='\0';i++){//esse trecho e fundamental pq ele conta a qtd de letra e as quebra pq se nao tivesse o sistema exibe sujeira
if(palavras[i] == '{' || palavras[i] == '(' || palavras[i] == '['){
p->topo++;
p->dados[p->topo]=palavras[i];
}//fim if
else if(palavras[i] == '}' && p->topo == '{' || palavras[i] == ')' && p->topo == '(' || palavras[i] == ']' && p->topo == '[')
{
v=p->dados[p->topo];
p->topo--;
return 1;
}//fim else if
else if(palavras[i] == '}' && p->topo != '{' || palavras[i] == ')' && p->topo != '(' || palavras[i] == ']' && p->topo != '[')
{
return 0;
}
}//fim for
}//fim funcao
int top(tpilha p){
return p.dados[p.topo];
}
void exibeCabecalho()//inicio funcao exibe cabecalho
{
printf("****************************************** **************************************");
printf("* *");
printf("* ANALIZADOR DE EXPRESSOES MATEMATICAS *");
printf("* *");
printf("* *");
printf("* *");
printf("****************************************** **************************************");
printf("\n");
printf("\n");
printf("****************************************** **************************************");
}//fim funcao cabecalho
int main()
{
tpilha p1;
char nome[30];
int r;
inicializa(&p1);//joga p1 para inicializacao
exibeCabecalho();//chama funcao exibe cabecalho
printf("DIGITE UMA EXPRESSAO PARA ANALISE !! ->");
gets(nome);
funcaoCalcula(&p1,nome);
if(funcaoCalcula(&p1,nome)==0)
{
printf("Sua expressao esta correta !");
}
else if(funcaoCalcula(&p1,nome)==1){
printf("Sua expressao esta incorreta !");
}
r=top(p1);
printf("Topo:%c",r);
getch();
}