#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define tamax 10
using namespace::std;
struct pila
{
int info[10];
int tope;
int valor;
};
void crear_pila(pila &p);
void pila_vacia(pila &p);
void apilar(pila &p, int valor);
void desapilar(pila &p);
void mostar_pila(pila &p);
int sw =0;
void menu()
{
system("cls");
cout<<"\n\t1_Crear Pila ";
cout<<"\n\t2_Apilar ";
cout<<"\n\t3_Desapilar ";
cout<<"\n\t4_Mostrar Pila ";
cout<<"\n\t5_Salir \n";
cout<<"\n\tElija Opcion a realizar: ";
}
int main()
{
int opc, valor;
struct pila p;
do
{
menu();
cin>> opc;
switch(opc)
{
case 1:crear_pila(p);break;
case 2:
system("cls");
if(sw == 0)
{
system("cls");
cout<<"\n\n\n\n\t\t\tDebe Crear Pila\n";
system("PAUSE");break;
}
cout<<"\n\n\n\n\t\tIngrese un numero Entero: ";
cin>>valor;
apilar(p,valor);break;
case 3:
if(sw == 0)
{
system("cls");
cout<<"\n\n\n\n\t\tLa Pila Esta Vacia no puede desapilar\n";
system("PAUSE");
}
desapilar(p);break;
case 4:
if(sw == 0)
{
system("cls");
cout<<"\n\n\n\n\t\tLa Pila esta vacia no se puede mostrar\n";
system("PAUSE");
}
mostar_pila(p);break;
}
}while(opc!=5);
return 0;
}
void crear_pila(pila &p)
{
system("cls");
for(int x=0;x<10;x++)
{
p.info
- =0;
}
sw= 1;
cout<<"\n\n\n\n\t\tLa Pila Se ha sido Creada\n";
system("pause");
}
void pila_vacia(pila &p)
{
p.tope=0;
}
void apilar(pila &p, int valor)
{
if(p.tope == tamax)
{
system("cls");
cout<<"\n\n\n\n\t\tLa Pila Esta Llena\n";
system("PAUSE");
}
else
{
system("cls");
p.tope++;
p.info[p.tope] = valor;
cout<<"\n\n\n\n\t\tEl Elemento: "<<valor<<" ha sido Guardado\n" ;
system("PAUSE");
}
}
void desapilar(pila &p)
{
int dato;
if(sw=0)
{
sw= 1;
system("cls");
p.tope--;
cout<<"\n\n\n\n\tSe ha eleminado el dato "<<dato<<"\n";
system("PAUSE");
}
}
void mostar_pila(pila &p)
{
system("cls");
if(p.tope > 0)
{
sw= 1;
}
else
{
for(int j =0;j<tamax;j++)
{
cout<<"\n\t"<<p.info[j]<<"\n\t";
}
cout<<"\n\n\n\tElementos de la Pila\n";
system("PAUSE");
}
}
Y cual es el error?? no compila??? la funcion no hace lo que deberia?? etc
Tenes que aclarar lo mas posible para poder ayudarte, por ejemplo dando un ejemplo de lo que sucede
Saludos
Como ya te comentaron si tienes un problema explicalo a detalle y por favor utiliza las etiquetas de código ya que si no lo haces el foro interpreta de forma incorrecta algunas partes del código fuente (el caso mas conocido es el texto en cursiva).
En cuanto al programa:
* No necesitas de la variable global "sw" en su lugar el numero de elementos (el campo "tope") indica si la pila esta vacía.
* En la función "apilar" incrementas el contador y después agregas el valor:
p.tope++;
p.info[p.tope] = valor;
Esta mal ya que debe ser al revés.
* En la funcion "desapilar" utilizas el operador de asignación "=":
if (sw = 0){
Cuando deberías utilizar el operador de comparación "==".
Un saludo
ok, disculpen por no especificarme de la mejor manera. ya realice las corección que me sugirieron, no desapila
Si solo respondes "ya esta pero no funciona" es difícil ayudarte.
En su lugar publica el código fuente actualizado junto con una descripción de los problemas que todavía existen en el programa. Y cuando publiques código fuente utiliza las etiquetas de código.
Un saludo
ok, primero agradezco por estar pendiente ayudándome.
Bueno ahora el código esta actualizado y solo resta corregir en la función mostrar, ya que la pila tiene la característica de el primero en entrar es el ultimo en salir. pero no se como declarar la sentencia para que realice la operación mostrar teniendo en cuenta la característica de la pila.
Espero me puedan ayudar.
Muchas Gracias.
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define tamax 10
using namespace::std;
struct pila
{
int info[10];
int tope;
int valor;
};
void crear_pila(pila &p);
void pila_vacia(pila &p);
void apilar(pila &p, int valor);
void desapilar(pila &p);
void mostar_pila(pila &p);
int sw =0;
void menu()
{
system("cls");
cout<<"\n\t1_Crear Pila ";
cout<<"\n\t2_Apilar ";
cout<<"\n\t3_Desapilar ";
cout<<"\n\t4_Mostrar Pila ";
cout<<"\n\t5_Salir \n";
cout<<"\n\tElija Opcion a realizar: ";
}
int main()
{
int opc, valor;
struct pila p;
do
{
menu();
cin>> opc;
switch(opc)
{
case 1:crear_pila(p);break;
case 2:
system("cls");
if(sw == 0)
{
system("cls");
cout<<"\n\n\n\n\t\t\tDebe Crear Pila\n";
system("PAUSE");break;
}
cout<<"\n\n\n\n\t\tIngrese un numero Entero: ";
cin>>valor;
apilar(p,valor);break;
case 3:
if(sw == 0)
{
system("cls");
cout<<"\n\n\n\n\t\tLa Pila Esta Vacia no puede desapilar\n";
system("PAUSE");
}
else
{
desapilar(p);break;
}
case 4:
if(sw == 0)
{
system("cls");
cout<<"\n\n\n\n\t\tLa Pila esta vacia no se puede mostrar\n";
system("PAUSE");
}
else
{
mostar_pila(p);break;
}
}
}while(opc!=5);
return 0;
}
void crear_pila(pila &p)
{
system("cls");
for(int x=0;x<=tamax;x++)
{
p.info
- =0;
p.tope=0;
}
sw= 1;
cout<<"\n\n\n\n\t\tLa Pila Se ha sido Creada\n";
system("pause");
}
void pila_vacia(pila &p)
{
p.tope=0;
}
void apilar(pila &p, int valor)
{
if(p.tope == tamax)
{
system("cls");
cout<<"\n\n\n\n\t\tLa Pila Esta Llena\n";
system("PAUSE");
}
else
{
system("cls");
p.info[p.tope] = valor;
p.tope++;
cout<<"\n\n\n\n\t\tEl Elemento: "<<valor<<" ha sido Guardado\n" ;
system("PAUSE");
}
}
void desapilar(pila &p)
{
int dato;
if(p.tope>0)
{
sw= 1;
system("cls");
p.tope--;
dato = p.info[p.tope];
p.info[p.tope]=0;
cout<<"\n\n\n\n\tSe ha eleminado el valor "<<dato<<"\n";
system("PAUSE");
}
}
void mostar_pila(pila &p)
{
system("cls");
if(p.tope > 0)
{
sw= 1;
}
if(sw==1)
{
for(int j =0;j<tamax;j++)
{
cout<<"\n\t"<<p.info[j]<<"\n\t";
}
cout<<"\n\n\n\tElementos de la Pila\n";
system("PAUSE");
}
}
En esa función no tienes porque modificar la variable sw, como ya te comente su uso no es necesario. Para imprimir los valores como una pila (primero en entrar, ultimo en salir) solo tienes que procesar los elementos empezando por el ultimo:
void mostar_pila(pila &p)
{
if (p.tope == 0)
cout << "Pila vacia" << endl;
else
for (int j = p.tope; j > 0; j--)
cout << p.info[j - 1] << endl;
}
Pero, honestamente, no es una buena idea. En su lugar debes seguir la convención y procesar sus elementos solo en base a las funciones push y pop (apilar y desapilar en tu caso).
Un saludo
Bueno, Amigo muchas Gracias por todo,, me sirvió de mucho tu ayuda.
Y disculpas por ser tan enredado y causar problemas jeje :D
Gracias, Saludos.