#include #include #include struct EmbalagemBiscoito { int topo; int lote; int data; int hora; float *pElem; }; void criarpilha( struct EmbalagemBiscoito *p, int c, int d, int h){ p->data = d; p->hora = h; p->topo = -1; p->lote = c; p->pElem = (float*) malloc(c * sizeof(float)); } int estavazia ( struct EmbalagemBiscoito *p ){ if( p-> topo == -1 ) return 1; else return 0; } int estacheia ( struct EmbalagemBiscoito *p ){ if (p->topo == p->lote - 1) return 1; else return 0; } void empilhar ( struct EmbalagemBiscoito *p, float v){ p->topo++; p->pElem [p->topo] = v; } float desempilhar ( struct EmbalagemBiscoito *p ){ float aux = p->pElem [p->topo]; p->topo--; return aux; } float retornatopo ( struct EmbalagemBiscoito *p ){ return p->pElem [p->lote]; } int main(){ struct EmbalagemBiscoito pilhaBiscoito; int lote, op, data, hora; float valor; printf( "\ninsira lote " ); scanf( "%d", &lote ); printf( "\ninsira data " ); scanf( "%d", &data ); printf( "\ninsira hora " ); scanf( "%d", &hora ); criarpilha (&pilhaBiscoito, lote, data, hora); while( 1 ){ /* loop infinito */ printf("\n1- empilhar \n"); printf("2- desempilhar \n"); printf("3- Mostrar o topo \n"); printf("4- sair\n"); scanf("%d", &op); switch (op){ case 1: if( estacheia( &pilhaBiscoito ) == 1 ) printf("\nPILHA CHEIA! \n"); else { printf("\nVALOR? "); scanf("%f", &valor); empilhar (&pilhaBiscoito, valor); } break; case 2: if ( estavazia(&pilhaBiscoito) == 1 ) printf( "\nPILHA VAZIA! \n" ); else{ valor = desempilhar (&pilhaBiscoito); printf ( "\n%.1f DESEMPILHADO!\n", valor ); } break; case 3: if ( estavazia (&pilhaBiscoito) == 1 ) printf( "\nPILHA VAZIA!\n" ); else { valor = retornatopo (&pilhaBiscoito); printf ( "\nLOTE do ultimo pacote inserido: %.1f\n", valor ); } break; default: printf( "\nOPCAO INVALIDA! \n" ); } } }