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
#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;
}
¿Dónde te marca error, y qué error te marca?
me marca error en el pop, y me hace cíclica la función.
Copia el error y ponlo aquí.
En cualquier caso, if(!PilaVacia());
sobra.
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
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
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!
En la línea 146, pusiste:
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.