Pilha
Publicado por Helton Barbosa Santos Ferreira 06/09/2006
[ Hits: 7.921 ]
Esse código verifica uma expressão matemática. Ex: se o usuário digitar {1-[4*(2-3)-7]/10}, o programa verifica as chaves, colchetes e parênteses da expressão. Se em algum lugar da expressão o programa encontrar um erro do tipo, {1-[4*(2-3)-7]/10], observe que abre-se a chave, mas não tem fecha-chaves, no lugar tem um fecha-colchete, o programa acusa 'Expressão Incorreta!'. Esse código usa uma implementação de pilha. Feito às pressas, se alguém fizer uma implementação a mais, me comuniquem.
#include <stdio.h>
#include <malloc.h>
struct nodo
{
char conteudo;
struct nodo *anterior;
};
struct nodo *pilha;
void push(char valor)
{
struct nodo *aux=(struct nodo*) malloc(sizeof(struct nodo));
aux->conteudo=valor;
if (pilha==NULL)
{
aux->anterior=NULL;
}
else
{
aux->anterior=pilha;
}
pilha=aux;
}
char top()
{
return pilha->conteudo;
}
void listar()
{
struct nodo *aux=pilha;
if(pilha!=NULL)
{
do
{
printf("%c", aux->conteudo);
aux=aux->anterior;
}
while(aux!=NULL);
}
}
char pop()
{
struct nodo *aux=pilha;
pilha=pilha->anterior;
char a=aux->conteudo;
free(aux);
return a;
}
int le(char *a, int m)
{
int i=0;
char c;
c=getchar();
while(c!='\n')
{
a[i]=c;
i++;
c=getchar();
}
a[i]='{FONTE}';
i=0;
if (i>m)
{
return(1);
}
}
void desaloca()
{
if(pilha!=NULL)
{
struct nodo *aux;
do
{
aux=pilha;
pilha=pilha->anterior;
free(aux);
}
while(pilha!=NULL);
}
}
main()
{
pilha=NULL;
char exp[50];
//system("clear");
printf("PROGRAMA PARA VERIFICAR EXPRESSAO MATEMATICA\n\n\n");
printf("Digite Uma Expressao: Ex.: 1-{2+[9*1(1-3)-5]/4}\n\n");
le(exp,50);
char retorno;
int i, tam=strlen(exp);
for(i=0; i<tam; i++)
{
if((exp[i]=='(')||(exp[i]=='[')||(exp[i]=='{'))
push(exp[i]);
else
{
if(exp[i]==')'||exp[i]==']'||exp[i]=='}')
{
if(exp[i]==')')
{
retorno=pop();
if(retorno!='(')
{
printf("Expressao Incorreta!\n");
i=tam;
getchar();
getchar();
}
else if(retorno=='(')
{ printf("Expressao Correta!\n");
i=tam;
getchar();
getchar();
}
}
else if(exp[i]==']')
{
retorno=pop();
if(retorno!='[')
{
printf("Expressao Incorreta!\n");
i=tam;
getchar();
getchar();
}
else if(retorno=='[')
{
printf("Expressao Correta!\n");
i=tam;
getchar();
getchar();
}
}
else if(exp[i]=='}')
{
retorno=pop();
if(retorno!='{')
{
printf("Expressao Incorreta!\n");
i=tam;
getchar();
getchar();
}
else if(retorno=='{')
{ printf("Expressao Correta!\n");
i=tam;
getchar();
getchar();
}
}
}
}
}
desaloca();
}
Ponteiro para Ponteiro para Ponteiro
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
É normal não gostar de KDE? (12)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









