Pilas y colas

Iniciado por DEaniz, 19 Junio 2015, 01:06 AM

0 Miembros y 1 Visitante están viendo este tema.

DEaniz

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 (csharp) [Seleccionar]
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
using namespace std;

class nodo{
    private:
        nodo *siguiente;
        char parentesis;
    public:
        nodo(char p, nodo *s=NULL){parentesis=p; siguiente=s;}
        nodo* regresaSiguiente(void); //{return siguiente;}
        char regresaParentesis(void);
        void modificaParentesis(char);
        void modificaSiguiente(nodo*);

};


nodo* nodo::regresaSiguiente(void)
{
    return siguiente;
}

char nodo::regresaParentesis(void)
{
    return parentesis;
}

void nodo::modificaParentesis(char p)
{
    parentesis=p;
}

void nodo::modificaSiguiente(nodo* s){
    siguiente=s;
}
////////////////////////////////////FIN DE LA CLASE NODO///////////////////////////////////////

class Pila
{
private:
    nodo*tope;
public:
    Pila(){tope=NULL;}
    void Push(char);
    char Pop(void);
    char Tope(void)
    {return tope-> regresaParentesis();}
    char PilaVacia()
    {return tope == NULL;}

};

void Pila::Push(char p)
{
    tope=new nodo(p, tope);
}

char Pila::Pop(void)
{
    char p;
    nodo*aux;
    delete(aux);
    return p;
    if(!PilaVacia());
}


class Cola
{
private:
    nodo*cabeza;
    nodo*extremo;

public:
    Cola(){cabeza=extremo=NULL;}
    void Suma(char);
    char Elimina(void);
    int colaVacia(void){return cabeza==NULL;}
    //~ Cola();

};

void Cola::Suma(char p)
{
    if(!extremo)
    {

        extremo=cabeza=new nodo(p,NULL);
        //extremo=cabeza;
    }
    else{
        nodo*aux;
        aux=new nodo(p);
        extremo-> modificaSiguiente(aux);
        extremo=extremo -> regresaSiguiente();

    }

}

char Cola::Elimina(void)
{
    char p=-1;
    if(!colaVacia())
    {
    nodo*aux=cabeza;
    cabeza=cabeza->regresaSiguiente();
    p=aux->regresaParentesis();
    delete(aux);
    }

    return p;
}



int main()
{
    char caracter[10];
    int i;
    char c;
    Cola obj;
    Pila p;

    cout<<"escribe la funcion: "<< endl;
    cin.getline(caracter,10);

  while( caracter[i] != '\0')
    {
        obj.Suma(caracter[i]);
    }

    while(!obj.colaVacia())
    {
        c=obj.Elimina();
        if(c=='(')
           {
            p.Push(c);
           }
        else if(c==')')
            {
            p.Pop(c);
            }
    }
    if(!p.PilaVacia())
    {

        cout<<"Falta un parentesis "<<endl;
    }
if(p.PilaVacia())
{
cout<<"Todo esta bien"<<endl;
}

    return 0;


}

ivancea96

¿Dónde te marca error, y qué error te marca?

DEaniz

me marca error en el pop, y me hace cíclica la función.

ivancea96

Copia el error y ponlo aquí.

En cualquier caso,
Código (cpp) [Seleccionar]
if(!PilaVacia()); sobra.

0xFer

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
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

DEaniz


1Practica-5-estructuras-parentesis.cpp||In function 'int main()':|
1Practica-5-estructuras-parentesis.cpp|166|error: no matching function for call to 'Pila::Pop()'|
1Practica-5-estructuras-parentesis.cpp|166|note: candidate is:|
1Practica-5-estructuras-parentesis.cpp|62|note: int Pila::Pop(char)|
1Practica-5-estructuras-parentesis.cpp|62|note:   candidate expects 1 argument, 0 provided|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|


Estos son los errores que marca

DEaniz

Cita de: 0xFer en 19 Junio 2015, 02:01 AM
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!

ivancea96

En la línea 146, pusiste:
Código (cpp) [Seleccionar]
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.