arquivos estão antes de cada página de código:
===========================
main.c
===========================
/* Algoritmo de Transformar expressãod e pós-fixa para pré-fixa - Estrutura de Dados
| Kássio Rômulo Lima SOusa CP09126-81 | Núbia Cristine Silveira dos Santos CP09142-81 |
*/
#define TRUE 1
#define FALSE 0
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<math.h>
#include "stack.h"
/* Função para calculos básicos, adição, subtração, multiplicação e divisão */
int calc(int op1, int op2, char opcao){
int aux=0;
if(opcao == '+'){
aux = op1 + op2;
}
if(opcao == '-'){
aux = op1 - op2;
}
if(opcao == '*'){
aux = op1 * op2;
}
if(opcao == '/'){
aux = op1 / op2;
}
if(opcao == '^'){
aux = pow((float)op1,(float)op2);
}
return aux;
}
/* Funcao para avaliar a expressao posfixa e fazer todas as possibilidades */
void transforma(){
int i=0;
int op1, op2, resultado, valor, elemento;
char expressao[60], *aux;
stack *form;
printf("Digite uma expressão pos-fixa: ");
scanf("%s", expressao);
form = stkCreate(strlen(expressao));
while(i < strlen(expressao)){
aux = expressao[i];
if((expressao[i] == '+') || (expressao[i] == '-') || (expressao[i] == '*') || (expressao[i] == '/') ||(expressao[i] == '^') ){
op1 = (int) stkpop(form);
op2 = (int) stkpop(form);
valor = calc(op1, op2, aux);
stkpush(form, (void*)valor);
}else{
elemento = atoi(&aux);
stkpush(form, (void*) elemento);
}
i++;
}
resultado = (int)stkpop(form);
printf("Resultado da operacao = %d\n", resultado);
free(form);
}
int main(void){
transforma();
system("pause");
}
===========================
stack.c
===========================
/* Algoritmo de Transformar expressãod e pós-fixa para pré-fixa - Estrutura de Dados
| Kássio Rômulo Lima SOusa CP09126-81 | Núbia Cristine Silveira dos Santos CP09142-81 |
*/
#define _STACK_H_
#define TRUE 1
#define FALSE 0
#include <stdio.h>
#include <assert.h>
#include "stack.h"
/* Funcao Criar pilha */
stack *stkCreate(int max){
stack *s;
if(max>0){
s = (stack *) malloc(sizeof(stack));
if(s!=NULL){
s->item = (void **) malloc(max*sizeof(void *));
if(s->item!=NULL){
s->maxitens = max;
s->topo = -1;
return s;
}
free(s);
}
}
return NULL;
}
/* Funcao para Destruir pilha */
int stkdestroy(stack *s){
if(s!=NULL){
free(s->item);
free(s);
return TRUE;
}
return FALSE;
}
/* Funcao para Inserir elemento na pilha */
int stkpush(stack *s, void *item){
if(s!=NULL){
if(s->topo < s->maxitens-1){
s->topo++;
s->item[s->topo] = item;
return TRUE;
}
}
return FALSE;
}
/* Funcao que Remove elemento da pilha */
void *stkpop(stack *s){
void *aux;
if(s!=NULL){
if(s->topo > -1){
aux = s->item[s->topo];
s->topo--;
return aux;
}
}
return NULL;
}
/* Funcao que Retorna o elemento do topo da pilha */
void *stktop(stack *s){
if(s!=NULL){
if(s->topo > -1){
return s->item[s->topo];
}
}
return NULL;
}
/* Funcao que Confere se a pilha está vazia*/
int stkisempty(stack *s){
if(s!=NULL){
if(s->topo < 0){
return TRUE;
}
}
return FALSE;
}
/* Fim das funções */
===========================
stack.h
===========================
/*Folha de protótipos das funções utilizadas no programa*/
#ifndef __STACK_H_
#define __STACK_H_
/* Estrutura stack */
typedef struct _stack_{
int maxitens;
int topo;
void ** item;
}stack;
/*Funcao Para criar a pilha:
pré-condições: ; maxItens > 0 ; retorna a pilha
; retorna null em caso de maxitens> 0 ou nao houver espaço para alocar
*/
stack *stkCreate(int max);
/*Funcao para Destruir pilha:
pré-condições: ; S nao ser null ;retorna TRUE se a pilha for eliminada
; retorna FALSE caso nao satisfaça as pré-condições
*/
int stkdestroy(stack *s);
/*Funcao que Insere elemento da pilha:
pré-condições: ; s nao ser null e s->topo tem que ser menor que s->maxitens-1
; retorna TRUE se o elemento for inserido
*/
int stkpush(stack *s, void *item);
/*Funcao que Remove elemento da pilha:
pré-condições: ; c nao ser null e c->item nao pode ser null
; retorna o elemento se o elemento for removido
; retorna NULL caso nao satisfaça as pré-condições
*/
void *stkpop(stack *s);
/*Funcao que Retorna elemento do topo:
pré-condições: ; s nao ser null e s->topo te que ser maior que -1
; retorna elemento do topo
*/
void *stktop(stack *s);
/*Funcao que Confere se a pilha está vazia:
pré-condições: ; s nao ser null e s->topo te que ser menor que 0
; retorna TRUE se pilha for vazia
; retorna FALSE se pilha nao for vazia
*/
int stkisempty(stack *s);
#endif
Coloque aqui o seu email