Pilha
Publicado por Helton Barbosa Santos Ferreira 06/09/2006
[ Hits: 7.859 ]
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(); }
Cálculo de logaritmo de um número por Série de Taylor em C
Um Classico exercicio de Lógica de Programação
Nenhum coment�rio foi encontrado.
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
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
Converter os repositórios Debian para o novo formato com as chaves
Instalando Spotify no Debian 13
Realizar overclock no Miyoo Mini (plus ou normal)
Erro na inicialização do Debian como resolver (4)
Dúvidas sobre a originalidade de conteúdos online (11)
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (4)