Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/06/2010, 01:21
decidido
 
Fecha de Ingreso: junio-2010
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 0
De acuerdo Proyecto en C++

HOLA A TODOS. QUERÍA VER SI ALGUIEN ME PODÍA AYUDAR CON UN PROBLEMA. TENGO QUE HACER UN PROGRAMA EN EL CUAL INGRESE UNA PALABRA POR TECLADO Y ME DIGA SI ES PALÍNDROME. ESTO TIENE QUE SER CON STACK, COLA, PLANTILLAS, VECTORES ENTRE OTRAS
EL TEMA ES QUE YA LO HISE PERO TENGO EL PROBLEMA QUE CUANDO LO COMPILO HACE TODO BIEN PERO LUEGO DICE "PULSE TECLA PARA CONTINUAR" Y PULSO TECLAS Y AÚN ASI NO SE CIERRA. TENGO QUE CERRARLO CON LA "X" DE ARRIBA PERO ESO ME IMPLICA MENOS NOTA. QUERÍA SABER SI ME PUEDEN AYUDAR. LES MANDO LOS CODIGOS. VAN CON COMENTARIOS ÙES ASI ME LOS PIDE EL PROFESOR:

#include <cstdlib>
#include <iostream>
#include "impleColaDinamica.cpp"
#include <string.h>

using namespace std;
/*
template <class T>
void Imprime(Cola<T>& C){ //Este procedimiento muestra los elementos de la Cola
Cola<T> R;
T e;
while (! C.Vacia()){
e = C.Extraer();
cout << "valor " << e << endl;
R.Agregar(e);
}
while (! R.Vacia()){
e = R.Extraer();
C.Agregar(e);
}
}
//Usamos este procedimiento para verificar si efectivamente la cola contenía la palabra ingresada por teclado

*/

/*
template <class T>
void ImprimeStack(Stack<T>& S){Este procedimiento muestra los elementos del Stack
Stack<T> R;
char e;
while (! S.Empty()){
e = S.Pop();
cout << "valor " << e << endl;
R.Push(e);
}
while (! R.Empty()){
e = R.Pop();
S.Push(e);
}
}
//Usamos este procedimiento para verificar si el Stack efectivamente contenía los datos de la cola invertidos
*/


/*
template <class T>
void mostrar(char A[],T n) //Este procedimiento muestra los datos del vector en el cuál guardamos inicialmente la palabra ingresada
{
for(int i=0;i<n;i++)
{
printf("%c\n",A[i]);
}
}
Usamos este procedimiento para comprobar si la palabra ingresada quedaba guardada en el vector

*/

template <class T>
bool Compara(Stack<T> S, Cola<T> C)
{
T e,f;

while(!C.Vacia())
{
e=S.Pop();
f=C.Extraer();
if(e==f){}//no hace nada.
else{
return false;
}

}

}


int main(int argc, char *argv[])
{
system("COLOR 1E");
bool opc;
Cola<char> Q,Y;
Stack<char> R;
int s,i=0,j,k;
char A[100];
cout<<"Escriba una palabra"<<endl;
cin>>A;
s=strlen(A);/*Ocupamos strlen para sacar el largo de la palabra y asi poder
traspasar el contenido del vector A a la cola Q. */

//cout<<s<<endl; Queriamos ver si nos daba correctamente el numero de letras de la palabra

while(i<s)/*(Copia el elemento de la casilla A[i] en la Cola Q "el numero de letras veces")*/
{
char p;
p=A[i];
Q.Agregar(p);
i++;
}
//mostrar(A ,s); //queríamos comprobar si el vector contenía la palabra ingresada
//Imprime(Q); //queríamos comprobar si la cola Q contenía las letras de la palabra ingreada en el orden correcto

while(! Q.Vacia())
{
//Cola<char> Y;
char e;
e=Q.Extraer();
R.Push(e);
Y.Agregar(e);

}
//Imprime(Y); //Acá queríamos ver si los datos de la cola Q se habían copiado correctamente a la cola Y
cout<<endl;
//ImprimeStack(R);//Queríamos comprobar si el Stack contenía los datos de la cola invertidos

//Compara(R, Y,&x);

opc=Compara(R,Y);
if(opc==false)
cout<<"La palabra "<<A<<" no es palindrome"<<endl;
else
cout<<"La palabra "<<A<<" es palindrome"<<endl;
system("PAUSE");
return EXIT_SUCCESS;

}


POR SI LAS NECESITAN LES DOY LA CLASE Y LA IMPLEMENTACIÓN DEL PROYECTO:

CLASE:
template <class T>
class Cola
{
public:
class Nodo
{
public:
Nodo(const T& e, Nodo *p) : dato(e), link(p) {}
~Nodo() { }

T dato;
Nodo *link;
};

Cola();
~Cola();

void Agregar(T e);
T Extraer();

bool Vacia();

private:
Nodo *mPrimero;
Nodo *mUltimo;
};

template <class T>
class Stack
{
public:
class Nodo{
public:
Nodo(const T& e,Nodo *p):dato(e),link(p) {}
~Nodo() { }
T dato;
Nodo *link;
};
Stack();
~Stack();
void Push(T e);
T Pop();

bool Empty();
private:
Nodo *mL;
};


iMPLEMENTACION:

#include <cstdlib>
#include <iostream>

#include "claseColaDinamica.h"


using namespace std;

template <class T>
Cola<T>::Cola(): mPrimero(NULL), mUltimo(NULL)
{
}

template <class T>
Cola<T>::~Cola()
{
while(!Vacia())
Extraer();
}

template <class T>
void Cola<T>::Agregar(T e)
{
Nodo *p = new Nodo(e, NULL);

if(Vacia()) {
mPrimero = p;
mUltimo = mPrimero;

return;
}
mUltimo->link = p;
mUltimo = p;
}

template <class T>
T Cola<T>::Extraer()
{
if(Vacia()) {
return T();
}

Nodo *p = mPrimero;
T e = mPrimero->dato;

mPrimero = mPrimero->link;
delete p;

return e;
}

template <class T>
bool Cola<T>::Vacia()
{
return !(mPrimero);
}


template <class T>
Stack<T>::Stack() : mL(NULL){
}

template <class T>
Stack<T>::~Stack(){
T e;
while(!Empty())
e = Pop();
}

template <class T>
void Stack<T>::Push(T e){
Nodo *p = new Nodo(e, NULL);
if(mL == NULL){
mL = p;
}
else{
p->link = mL;
mL = p;
}
}

template <class T>
T Stack<T>::Pop(){
Nodo *p = mL;
T e;
if(p == NULL){
// nada
}
else{
e = mL->dato;
mL = mL->link;
delete p;
return e;
}
}

template <class T>
bool Stack<T>::Empty(){
return (mL == NULL);
}

ES LARGO PERO ESPERO QUE HAYA ALGUIEN CAPAZ DE AYUDARME. GRACIAS