• Martes 12 de Noviembre de 2024, 21:14

Autor Tema:  Problemas Con Listas  (Leído 1959 veces)

SpeDhy

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Problemas Con Listas
« en: Domingo 12 de Diciembre de 2004, 03:21 »
0
Código: Text
  1. #include<iostream.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<stdio.h>
  5. #include<conio.h>
  6. #include<alloc.h>
  7.  
  8.  
  9. struct avion {
  10.   char *nombre;
  11.   int asiento;
  12.   struct avion *L;
  13. };
  14. struct avion *pa, *q, *n;
  15. struct avion *p=NULL;
  16. int t=1;
  17.  
  18.  
  19.  
  20. //Creacion de los lugares
  21.  
  22. void creacion(void)
  23. {
  24.   int i;
  25.   q=p;
  26.   for (i=1; i<=10; i++)
  27.     {
  28.     n=(struct avion *)malloc(sizeof(struct avion));
  29.     if (q==NULL)
  30.       q=p=n;
  31.     else
  32.       {
  33.         while(q->L != NULL)
  34.           q=q->L;
  35.         q->L=n;
  36.       }
  37.     n->asiento=i;
  38.     n->nombre=NULL;
  39.     n->L=NULL;
  40.   }
  41. }
  42.  
  43.  
  44.  
  45.  
  46. //Busca si hay algun lugar disponible
  47.  
  48. int buscar(int lugar)
  49. {
  50.   q=p;
  51.  
  52.   while(q->asiento != lugar && q->L != NULL)
  53.     q=q->L;
  54.   if (lugar == q->asiento && q->nombre == NULL)
  55.       return 1;
  56.   else
  57.       return 0;
  58. }
  59.  
  60.  
  61.  
  62.  
  63. //Reserva un lugar para el pasajero
  64.  
  65. void insertar(void)
  66. {
  67.   char *name;
  68.   int lugar, x=1;
  69.  
  70.   if (t <= 10)
  71.     {
  72.       do {
  73.         clrscr();
  74.         cout<<"\nNumero de asiento: ";
  75.         cin>>lugar;
  76.         cout<<"\nNombre del pasajero: ";
  77.         gets(name);
  78.  
  79.         if (buscar(lugar)==1)
  80.           {
  81.             q=p;
  82.             while(q->asiento != lugar && q->L != NULL)
  83.               q=q->L;
  84.             q->nombre=name;
  85.             t++;
  86.             x=0;
  87.           }
  88.         else
  89.           cout<<"\nAsiento no disponible";
  90.       }  while(x);
  91.     }
  92.   else
  93.     cout<<"\nNo hay lugar disponible";
  94. }
  95.  
  96. int eliminar(void)
  97. {
  98.   int lugar;
  99.  
  100.   if (t >= 1)
  101.     {
  102.     cout<<"Lugar que desea eliminar: ";
  103.     cin>>lugar;
  104.  
  105.     q=p;
  106.     while(q->asiento != lugar && q->L != NULL)
  107.       q=q->L;
  108.     if (q->nombre == NULL)
  109.       {
  110.       cout<<"\nEl lugar esta vacio";
  111.       return 1;
  112.       }
  113.     else
  114.       q->nombre=NULL;
  115.     t--;
  116.     }
  117.     return 1;
  118. }
  119.  
  120.  
  121. //Muestra los lugares
  122.  
  123. void mostrar(void)
  124. {
  125.   q=p;
  126.  
  127.   cout<<endl<<endl;
  128.   while(q->L != NULL)
  129.     {
  130.       if (q->nombre != NULL)
  131.         cout<<"  "<<q->asiento<<"  "<<q->nombre<<endl;
  132.       else
  133.         cout<<"  "<<q->asiento<<"  "<<"Lugar disponible!!!"<<endl;
  134.       q=q->L;
  135.     }
  136. }
  137.  
  138.  
  139.  
  140.  
  141. void main(void)
  142. {
  143.   char opcion;
  144.   creacion();
  145.   do {
  146.     clrscr();
  147.     cout<<"\n1.-Reservar lugar";
  148.     cout<<"\n2.-Dar de baja un lugar";
  149.     cout<<"\n3.-MOstrar lista de pasajeros";
  150.     cout<<"\n4.-Buscar un pasajero";
  151.     cout<<"\n5.-Salir";
  152.     cout<<"\nOpcion: ";
  153.     cin>>opcion;
  154.  
  155.     switch(opcion)
  156.     {
  157.       case '1': insertar();
  158.         break;
  159.       case '2': eliminar();
  160.         break;
  161.       case '3': mostrar();
  162.         break;
  163.       case '4':
  164.         break;
  165.       case '5': exit(0);
  166.         break;
  167.       default: cout<<"\nOpcion incorrecta";
  168.     }
  169.     getch();
  170.   } while(opcion != '5');
  171. }
  172.  
  173.  



Creo que en esta parte es donde esta el problema.

Código: Text
  1. if (buscar(lugar)==1)
  2.           {
  3.             q=p;
  4.             while(q->asiento != lugar && q->L != NULL)
  5.               q=q->L;
  6.             q->nombre=name;    [B]<-----[/B]-
  7.             t++;
  8.             x=0;
  9.           }
  10.  

El problema esta en que el programa me empalma los nombres, cuando pongo otro nombre me lo pone en su lugar, pero tambien en los lugares donde habia mas nombres.

Ojala alguien pueda hecharme una mano :D

saludos...

mgitano2001

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Problemas Con Listas
« Respuesta #1 en: Martes 14 de Diciembre de 2004, 05:28 »
0
El problema radica en que tenes mal definidas algunas variables, por ejemplo:
char *nombre; Aca estas declarando un puntero a caracter, es decir no tenes el espacio como para guardar un nombre, para los strings en C/C++, tenes que asignar un espacio.
Consejo: cambia todos char *nombre a char nombre[12] (El tamaño armalo vos), cuando asignas un string a otro usa strcpy().

Espero que te sirva, Saludos. Despues comentame.

                 Mgitano2001
</span></span>

lagom

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Problemas Con Listas
« Respuesta #2 en: Domingo 19 de Diciembre de 2004, 02:20 »
0
si la variable global (int  t)  se refiere al numero de asiento del avion entonces dedes darle algun valor  durante la ejecucion del programa ya que  utilizas condiciones que involucran a esta varible  pero no le cambias el valor  t=1

conchaxuxa

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Problemas Con Listas
« Respuesta #3 en: Domingo 19 de Diciembre de 2004, 06:44 »
0
si qieres las variables globales usar asignale valor