elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  desarrollo de pila, error en función apilar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: desarrollo de pila, error en función apilar  (Leído 3,002 veces)
JZtban

Desconectado Desconectado

Mensajes: 5


Ver Perfil
desarrollo de pila, error en función apilar
« en: 28 Abril 2013, 01:34 am »

#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");
         
      }     
}


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: desarrollo de pila, error en función apilar
« Respuesta #1 en: 28 Abril 2013, 01:51 am »

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


En línea

Ahorrate una pregunta, lee el man
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: desarrollo de pila, error en función apilar
« Respuesta #2 en: 28 Abril 2013, 03:33 am »

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:
Código
  1. p.tope++;
  2. p.info[p.tope] = valor;
Esta mal ya que debe ser al revés.

* En la funcion "desapilar" utilizas el operador de asignación "=":
Código
  1. if (sw = 0){
Cuando deberías utilizar el operador de comparación "==".

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
JZtban

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: desarrollo de pila, error en función apilar
« Respuesta #3 en: 28 Abril 2013, 23:15 pm »

ok, disculpen por no especificarme de la mejor manera. ya realice las corección que me sugirieron, no desapila
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: desarrollo de pila, error en función apilar
« Respuesta #4 en: 29 Abril 2013, 15:17 pm »

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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
JZtban

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: desarrollo de pila, error
« Respuesta #5 en: 30 Abril 2013, 06:50 am »

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 línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: desarrollo de pila, error en función apilar
« Respuesta #6 en: 30 Abril 2013, 14:14 pm »

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:
Código
  1. void mostar_pila(pila &p)
  2. {
  3.   if (p.tope == 0)
  4.      cout << "Pila vacia" << endl;
  5.   else
  6.      for (int j = p.tope; j > 0; j--)
  7.         cout << p.info[j - 1] << endl;
  8. }

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
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
JZtban

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: desarrollo de pila, error en función apilar
« Respuesta #7 en: 1 Mayo 2013, 05:24 am »

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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines