Pilha
Publicado por Helton Barbosa Santos Ferreira 06/09/2006
[ Hits: 7.668 ]
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(); }
1o. joguinho Labirinto (com graficos).c
Busca em texto - Lista encadeada
Dangerous Tux Game com gráficos
Manipulação de um vetor de registros
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta