Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DEaniz en 19 Junio 2015, 01:06 am



Título: Pilas y colas
Publicado por: DEaniz en 19 Junio 2015, 01:06 am
Hola, hice este programa donde se tiene que usar colas y pilas para poder balancear una ecuacion, es decir, si pongo mas parentesis de lo debido me debe aparecer que le faltan parentesis
si no pues solo poner que esta correcto.
pero me marca error, y la verdad no se porque
si alguien me pudiera ayudar y/o asesorar porfavor, gracias

Código
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <string.h>
  6. using namespace std;
  7.  
  8. class nodo{
  9.    private:
  10.        nodo *siguiente;
  11.        char parentesis;
  12.    public:
  13.        nodo(char p, nodo *s=NULL){parentesis=p; siguiente=s;}
  14.        nodo* regresaSiguiente(void); //{return siguiente;}
  15.        char regresaParentesis(void);
  16.        void modificaParentesis(char);
  17.        void modificaSiguiente(nodo*);
  18.  
  19. };
  20.  
  21.  
  22. nodo* nodo::regresaSiguiente(void)
  23. {
  24.    return siguiente;
  25. }
  26.  
  27. char nodo::regresaParentesis(void)
  28. {
  29.    return parentesis;
  30. }
  31.  
  32. void nodo::modificaParentesis(char p)
  33. {
  34.    parentesis=p;
  35. }
  36.  
  37. void nodo::modificaSiguiente(nodo* s){
  38.    siguiente=s;
  39. }
  40. ////////////////////////////////////FIN DE LA CLASE NODO///////////////////////////////////////
  41.  
  42. class Pila
  43. {
  44. private:
  45.    nodo*tope;
  46. public:
  47.    Pila(){tope=NULL;}
  48.    void Push(char);
  49.    char Pop(void);
  50.    char Tope(void)
  51.    {return tope-> regresaParentesis();}
  52.    char PilaVacia()
  53.    {return tope == NULL;}
  54.  
  55. };
  56.  
  57. void Pila::Push(char p)
  58. {
  59.    tope=new nodo(p, tope);
  60. }
  61.  
  62. char Pila::Pop(void)
  63. {
  64.    char p;
  65.    nodo*aux;
  66.    delete(aux);
  67.    return p;
  68.    if(!PilaVacia());
  69. }
  70.  
  71.  
  72. class Cola
  73. {
  74. private:
  75.    nodo*cabeza;
  76.    nodo*extremo;
  77.  
  78. public:
  79.    Cola(){cabeza=extremo=NULL;}
  80.    void Suma(char);
  81.    char Elimina(void);
  82.    int colaVacia(void){return cabeza==NULL;}
  83.    //~ Cola();
  84.  
  85. };
  86.  
  87. void Cola::Suma(char p)
  88. {
  89.    if(!extremo)
  90.    {
  91.  
  92.        extremo=cabeza=new nodo(p,NULL);
  93.        //extremo=cabeza;
  94.    }
  95.    else{
  96.        nodo*aux;
  97.        aux=new nodo(p);
  98.        extremo-> modificaSiguiente(aux);
  99.        extremo=extremo -> regresaSiguiente();
  100.  
  101.    }
  102.  
  103. }
  104.  
  105. char Cola::Elimina(void)
  106. {
  107.    char p=-1;
  108.    if(!colaVacia())
  109.    {
  110.    nodo*aux=cabeza;
  111.    cabeza=cabeza->regresaSiguiente();
  112.    p=aux->regresaParentesis();
  113.    delete(aux);
  114.    }
  115.  
  116.    return p;
  117. }
  118.  
  119.  
  120.  
  121. int main()
  122. {
  123.    char caracter[10];
  124.    int i;
  125.    char c;
  126.    Cola obj;
  127.    Pila p;
  128.  
  129.    cout<<"escribe la funcion: "<< endl;
  130.    cin.getline(caracter,10);
  131.  
  132.  while( caracter[i] != '\0')
  133.    {
  134.        obj.Suma(caracter[i]);
  135.    }
  136.  
  137.    while(!obj.colaVacia())
  138.    {
  139.        c=obj.Elimina();
  140.        if(c=='(')
  141.           {
  142.            p.Push(c);
  143.           }
  144.        else if(c==')')
  145.            {
  146.            p.Pop(c);
  147.            }
  148.    }
  149.    if(!p.PilaVacia())
  150.    {
  151.  
  152.        cout<<"Falta un parentesis "<<endl;
  153.    }
  154. if(p.PilaVacia())
  155. {
  156. cout<<"Todo esta bien"<<endl;
  157. }
  158.  
  159.    return 0;
  160.  
  161.  
  162. }


Título: Re: Pilas y colas
Publicado por: ivancea96 en 19 Junio 2015, 01:19 am
¿Dónde te marca error, y qué error te marca?


Título: Re: Pilas y colas
Publicado por: DEaniz en 19 Junio 2015, 01:32 am
me marca error en el pop, y me hace cíclica la función.


Título: Re: Pilas y colas
Publicado por: ivancea96 en 19 Junio 2015, 01:52 am
Copia el error y ponlo aquí.

En cualquier caso,
Código
  1. if(!PilaVacia());
sobra.


Título: Re: Pilas y colas
Publicado por: 0xFer en 19 Junio 2015, 02:01 am
Código
  1. char Pila::Pop(void){}

Fijate que no tiene parámetros y tú le estas pasando un char, que me imagino que es el carácter que quieres eliminar


Título: Re: Pilas y colas
Publicado por: DEaniz en 19 Junio 2015, 02:15 am
Código
  1. 1Practica-5-estructuras-parentesis.cpp||In function 'int main()':|
  2. 1Practica-5-estructuras-parentesis.cpp|166|error: no matching function for call to 'Pila::Pop()'|
  3. 1Practica-5-estructuras-parentesis.cpp|166|note: candidate is:|
  4. 1Practica-5-estructuras-parentesis.cpp|62|note: int Pila::Pop(char)|
  5. 1Practica-5-estructuras-parentesis.cpp|62|note:   candidate expects 1 argument, 0 provided|
  6. ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
  7.  

Estos son los errores que marca


Título: Re: Pilas y colas
Publicado por: DEaniz en 19 Junio 2015, 02:17 am
Código
  1. char Pila::Pop(void){}

Fijate que no tiene parámetros y tú le estas pasando un char, que me imagino que es el carácter que quieres eliminar


Si. pero como podría corregir ese error, esque no te entiendo bien, gracias!


Título: Re: Pilas y colas
Publicado por: ivancea96 en 19 Junio 2015, 13:16 pm
En la línea 146, pusiste:
Código
  1. p.Pop(c);

A un método pop() no se le pasa ningún argumento. Pop elimina el último dato introducido en la pila, sea cual sea.