Pilha
Publicado por Helton Barbosa Santos Ferreira 06/09/2006
[ Hits: 7.562 ]
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(); }
3º EP - Poli USP - Angry Birds (angry bixos)
1o. joguinho Labirinto (com graficos).c
Joguinho de labirinto usando as setas do teclado
Nenhum comentário foi encontrado.
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Gentoo bane contribuições de código feitas com IA (3)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba