Pila

Pilar Masoli

/* DISEÑA UNA PILA TAL COMO HEMOS
HECHO CON UNA COLA. TIENES YA CONSTRUIDAS
LAS FUNCIONES PUSH() Y POP(). TENDRAS
QUE DISEÑAR EL MENU DEL PROGRAMA PRINCIPAL
Y LAS FUNCIONES PARA EL MANEJO DE LA PILA:
INTRODUCIR(), LISTAR(), BORRAR( ), ETC. */

#include <stdio.h>
#include <stdlib.h>

#define MAXVAL 300
int sp=0;  /*seria el top*/
double val[MAXVAL];

void intro(), listar(), devolver(), salir();
double pop1();
void push1(double);

int main()
{
int t;
char s[20];

for(t=0;t<MAXVAL;++t) val[t]=0.0;

printf(“Aqui comienza la gestion de tu pila.\n”);

for(;;){
fflush(stdin);   /*limpio el teclado*/
printf(“\nIntroducir dato,Listar datos, Devolver dato o Salir\n”);
printf(“(escribir la acci¢n deseada):\n”);
gets(s); /*Leo todo, porque yo me quedo solo con la primera letra*/
*s=toupper(*s);
switch(*s){   /*analizo la primera letra*/
case ‘I’: intro();        break;
case ‘L’: listar();     break;
case ‘D’: devolver();    break;
case ‘S’: salir();      break; /*no es necesario poner el break,
pero por completar…*/
default: printf(“\n\nTe has equivocado de accion!\n”);
printf(“Dame otra letra.\n\n”);
system (“pause”);
}
system(“cls”);
}

system(“PAUSE”);
return 0;
}

void intro(void)
{
double num;
char cad[10];

do{

if(sp==MAXVAL)
{
printf(“\nAtencion: la pila esta llena!!\n\n”);
system(“pause”);
return;
}

printf(“\nIntroduce el dato %d: “, sp+1);
scanf(“%lf”, &num);
push1(num);

fflush(stdin);
printf(“\n\nQuiere introducir otro dato? (Yes=Enter/No=Otra Letra): “);
gets(cad);
}
while (*cad==”);
}

void listar()
{
int i;

if(sp==0)
{
printf(“\n\nLA PILA ESTA VACIA!!\n”);
system(“pause”);
return;
}

for(i=sp-1;i>=0;i–)
printf(“\nDato %d: %.2lf”, sp-i, val[i]);    /*Los lista en el orden de salida*/
printf(“\n”);

system(“pause”);

}

void devolver()
{
double num;

num=pop1();
printf(“\n Valor sacado de pila: %.2lf\n\n”, num);
system(“pause”);
}

void salir()
{
char cad[20];
int i;
FILE *pf;

fflush(stdin);
printf(“\nSe va a cerrar su pila.\n\n”);
printf(“Esta seguro?: (Yes=Enter/No=Otra letra): “);
gets(cad);

if(*cad!=”) return;

pf=fopen(“pila.txt”, “w”);
for(i=sp-1;i>=0;i–)
fprintf(pf,”\nDato %d: %.2lf”, sp-i, val[i]);
fclose(pf);

printf(“\nSu pila se ha guardado en el fichero pila.txt\n\n”);
system(“pause”);

exit(0);

}

/* push: introduce fnum a la pila */

void push1(double fnum)
{
if(sp<MAXVAL)
val[sp++]=fnum;
else
printf(“\n\nError: pila llena\n”);
}

/* pop: extrae y regresa el ultimo valor de la pila */

double pop1(void)
{
if(sp>0)
return val[–sp];
else
{
printf(“\n\nError:pila vacia\n”);
return 0.0;
}
}

Esta entrada fue publicada en Ciencia y programación. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s