Pilha
Publicado por Helton Barbosa Santos Ferreira 06/09/2006
[ Hits: 7.852 ]
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(); }
Algoritmo método da Posição Falsa ou Falsa Posição, Newton Raphson e Bisseção em Calculo Númerico
Mudando Cor da Letra e Fundo de Tela
[GAME-2] Acerte os rortões nas janelas (jogo com gráficos)
Calculando o número de Neper !
Nenhum coment�rio foi encontrado.
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Debian 13 Trixie para Iniciantes
Convertendo pacotes DEB que usam ZSTD (Padrão Novo) para XZ (Padrão Antigo)
Debian 13 "trixie&... lançado! (44)
Rust é o "C da nossa geração"? (3)
Gerenciador de arquivos é finalizado ao abrir pasta específica (2)