Вы находитесь на странице: 1из 8

TADs

Tipo abstrato Pilha A pilha uma maneira de organizar os dados da seguinte fora, o primeiro que entrar vai ser o ltimo que sair, tambm conhecido como LI-FO (Last in,First Out). Operaes deste tipo retornam o vetor com os inteiros, e o valor de onde est o topo. Funo create_pilha():Pilha*

Ps-condio: Cria uma pilha vazia, que aloca dinamicamente uma pilha, inicializa o topo em 0, e retorna um ponteiro para a pilha; Funo empty(Pilha *p):Inteiro

Pr-condio: Recebe uma Pilha como parmetro. Ps-condio: Verifica se a pilha est vazia, verificando se o topo igual a 0, se for retorna 1, seno retorna 0; Funo push(Pilha *p, int aux):void

Pr-condio: Recebe uma Pilha e um valor inteiro como parmetro. Ps-condio: Insere na pilha o inteiro no valor de onde est o topo, e aumenta o valor do topo em 1. Funo pop(Pilha *p) :Inteiro

Pr-condio: Recebe uma Pilha como parmetro. Ps-condio: Guarda numa varivel auxiliar o valor que est no topo-1 da Pilha, diminui em 1 o valor do topo e retorna o valor da varivel auxiliar. Funo operacao(char *p1,int *p2,int *p3):Inteiro

Pr-condio: Recebe um caractere, no caso de uma das operaes (+,-,*,/), e os dois inteiros da operao. Ps-condio: Retorna o valor do resultado da operao entre os dois inteiros. Funo learquivo(Pilha *p):void

Pr-condio: Recebe como parmetro a Pilha. Ps-condio: Abre o arquivo que contm as operaes, lido e inserido os nmeros em uma pilha, quando encontrado dois nmeros so desempilhados e uma operao desempilhada, depois mostra o resultado da operao. Funo reset_pilha(Pilha *p):void

Pr-condio: Recebe a Pilha como parmetro. Ps-condio: Reseta o topo da pilha para 0.

Programa Principal: main.c


#include<stdio.h> #include<stdlib.h> #include<pilha.h> void learquivo(Pilha *p){//

FILE *fp; char c,p1; int p2,p3,aux; short int x=0;

fp = fopen ("operacoes.txt","r"); if (fp==NULL){ printf ("Arquivo nao encontrado\n"); system ("pause"); exit (1); } while (!feof(fp)){ reset_pilha(p); x=0; do{ c = fgetc(fp); if((c=='+')||(c=='-')||(c=='*')||(c=='/')){ push(p,&c); x=0; } else if((c=='0')||(c=='1')||(c=='2')||(c=='3')||(c=='4')||(c=='5')||(c=='6')||(c=='7')||(c=='8')||(c=='9')){ push(p,&c); x++; } if(x==2){ p3 = pop(p)-'0'; p2 = pop(p)-'0'; p1 = pop(p);

printf("%c %d %d\n",p1,p2,p3); aux = operacao(&p1,&p2,&p3); c = aux+'0'; push(p,&c); if(p->topo==1){ printf("Resultado: %d\n",aux); } x=1; } }while(c!='#'); while(p->topo!=1){ p3 = pop(p)-'0'; p2 = pop(p)-'0'; p1 = pop(p); printf("%c %d %d\n",p1,p2,p3); aux = operacao(&p1,&p2,&p3); c = aux+'0'; push(p,&c); if(p->topo==1){ printf("Resultado: %d\n",aux); } } } fclose(fp); }

int main(){ Pilha *p = create_pilha(); learquivo(p); return 0; }

pilha.h
#define MAX 100 typedef struct pilha{ //Define uma Pilha int topo; char vet[MAX]; }Pilha;

create_pilha.h
Pilha* create_pilha();

empty.h
int empty(Pilha *p);

operao.h
int operacao(char *p1,int *p2,int *p3);

pop.h
char pop(Pilha *p);

push.h
void push(Pilha *p,char *aux);

reset_pilha.h
void reset_pilha(Pilha *p);

Pilha.c
#include<pop.h> #include<empty.h> #include<push.h> #include<create_pilha.h> #include<operao.h> #include<reset_pilha.h>

Empty.c
#include<pilha.h>

int empty(Pilha *p){//Verifica se a pilha est vazia if(p->topo == 0){

return 1; } else return 0; }

create_pilha.c
#include<pilha.h>

Pilha* create_pilha(){ //Aloca e retorna um ponteiro para uma Pilha Pilha *p = (Pilha*)malloc(sizeof(Pilha*));//Aloca uma pilha p->topo = 0;//Inicializa o topo em 0 return p; }

operacao.c
#include<pilha.h> int operacao (char *p1, int *p2, int *p3){ switch (*p1){ case '+': return (*p2)+(*p3); break; case '-': return (*p2)-(*p3); break; case '*': return (*p2)*(*p3); break; case '/': return (int)(*p2)/(*p3); break; } }

pop.c

#include<pilha.h> char pop(Pilha *p){//Retira um elemento da pilha char aux; if(empty(p)==1){//Verifica se a pilha est vazia, pois se ela estiver vazia no h como retirar printf("Pilha vazia\n"); } aux = p->vet[p->topo-1]; p->topo--;//Move o topo para a a p return aux; }

push.c
#include<pilha.h> #include<push.h>

void push(Pilha *p,char *aux){//Insere novo elemento na pilha p->vet[p->topo] = (*aux); p->topo++; }

reset_pilha.c
#include<pilha.h> void reset_pilha(Pilha *p){ //Reseta a pilha p->topo =0; }

KARINA TIEMI KATO RICARDO AUGUSTO MARTINS

CALCULADORA POLONESA

Londrina,2014

Вам также может понравиться