[C con Clase] 1 lista dentro de otra lista

Toni tsptoni en gmail.com
Sab Abr 10 03:09:19 CEST 2010


hola, estoy aprendiendo a usar C++ y estoy atascado en una práctica.

Después de estar ya un par de horas buscando por donde falla mi código, ya
lo localicé, y al parecer el void AlmacenarCiudad no funciona correctamente,
ya que no escribe en el nodo el nombre de la ciudad,
lo deja en nulo como podeis ver a continuacion.

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

typedef struct nodo* T_persona;
        struct nodo{
               T_persona pers;
               string nombre;
        };


typedef struct nodo1* T_ciudad;
        struct nodo1{
               T_ciudad sig;
               T_persona per;
               string ciutat;
         };





void Destruir (T_ciudad& datos){

 }

void Inicializar (T_ciudad& datos){
     if (datos!=NULL){
        Destruir (datos);
        system("PAUSE");
     cout<<"llega 1";
     }
     else{
        datos = NULL;
        system("PAUSE");
     cout<<"llega 2";
     }

 }

void Imprimir (T_ciudad& datos){
     system("PAUSE");
     cout<<"llega 1";
    //prueba para confirmar que siempre le llega la lista en nulo
     if (datos==NULL){
                      cout<<"la lista es nula!!";
      }
     //parece que el imprimir funciona, pero la lista siempre llega en nulo,
parece fallo de AlmacenarCiudad
     if (datos!=NULL){
                      system("PAUSE");
     cout<<"llega 2";
     T_ciudad aux;
     T_persona aux2;
     aux=datos;
     system("PAUSE");
     cout<<"llega 3";
       while (aux!=NULL){
             system("PAUSE");
     cout<<"llega 4";
           aux2=aux->per;
           cout<<aux->ciutat<<" ";
             while (aux2!=NULL){
                   system("PAUSE");
     cout<<"llega 5";
                   cout<<aux2->nombre<<" ";
                   aux2=aux2->pers;
              }
              system("PAUSE");
     cout<<"llega 6";
           cout<<endl;
           aux=aux->sig;
        }
      }
      system("PAUSE");
     cout<<"llega fin";
 }



void AlmacenarCiudad (T_ciudad& datos, const string& ciudad, bool& ok){

        T_ciudad aux;
        ok=false;
        aux=datos;
  /*      if (datos==NULL){
        datos=new nodo1;
        datos->ciutat=ciudad;
        datos->sig=NULL;
        aux=datos;
        }*/
        while (aux!=NULL){   //no consigo que escriba el nombre de la
ciudad...
           if (aux->sig->ciutat==ciudad){
              ok=true;
            }
           aux=aux->sig;
         }
          if (aux==NULL){
              aux = new nodo1;
              aux->ciutat=ciudad;
              aux->sig=NULL;
          }

   if (ok==true){ //true y false funcionan correctamente
     cout<<"La ciudad ya existe"<<endl<<endl;
    }
    else{
       cout<<"La ciudad se anadio correctamente"<<endl<<endl;
     }
 }

void AlmacenarPersona (T_ciudad& datos, const string& ciudad, const string&
persona, bool& ok){

 }

T_persona BuscarPersona (T_ciudad& datos, const string& ciudad, const
string& persona){

 }




char menu()
{
     char opcion;
     cout << endl;
     cout << "Opciones: " << endl<<endl;
     cout << "A: Inicializar " << endl;
     cout << "B: Imprimir la estructura" << endl;
     cout << "C: Destruir todo(Borrar)" << endl;
     cout << "D: Crear una ciudad nueva" << endl;
     cout << "E: Añadir una persona a una ciudad" << endl;
     cout << "F: Buscar a una persona en una determinada ciudad" << endl;
     cout << "X: Para finalizar el programa" << endl<<endl;
     do {
        cin >> opcion;
        opcion = toupper(opcion);
     } while (!((opcion == 'X') || (('A' <= opcion) && (opcion <= 'F'))));
     return opcion;
}

int main ()
{
      char opcion;
      string ciudad,persona;
      bool ok;
      T_ciudad datos = NULL;


      do {
         opcion = menu();
         switch (opcion) {
                case 'A': Inicializar(datos);
                          break;
                case 'B': Imprimir(datos);
                          break;
                case 'C': Destruir(datos);
                          break;
                case 'D': cout << "Introduzca una ciudad: " ;
                          cin >> ciudad;
                          AlmacenarCiudad(datos,ciudad,ok);
                          break;
                case 'E': cout<<"Introduzca el nombre de la ciudad: "<<endl;
                          cin>>ciudad;
                          cout<<"Introduzca el nombre de la persona: ";
                          AlmacenarPersona(datos,ciudad,persona,ok);
                          break;
                case 'F': cout << "Introduzca el nombre de la ciudad: "
<<endl;
                          cin >> ciudad;
                          cout<<"Introduzca el nombre de la persona: ";
                          cin>>persona;
                          T_persona PuntPersona;
                          BuscarPersona(datos,ciudad,persona);
                          break;
         }
      }while (opcion != 'X');

system ("PAUSE");
return 0;
}

Muchas gracias,
Saludos,
Antonio.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100410/e53ba612/attachment.html>


Más información sobre la lista de distribución Cconclase