elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Unas Veces Lo Hace Bien Otras No :S (Plis Urgente)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Unas Veces Lo Hace Bien Otras No :S (Plis Urgente)  (Leído 2,096 veces)
Gerik

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Unas Veces Lo Hace Bien Otras No :S (Plis Urgente)
« en: 12 Septiembre 2010, 23:22 pm »

Basicamente El Programa Debe Hacer Una Lista Circular Con n nombres, y despues eliminarlo hasta que kede solo 1, el problema es que a veces toma como borrado un nodo sin haberlo eliminado (si me hice entender)
Código
  1. /*****************
  2. Librerias
  3. *****************/
  4. #include <stdio.h>
  5. #include <conio.h>
  6. #include <iostream.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. /*Clase nodo*/
  10. class nodo
  11.     {public:
  12.      char info[30];
  13.     nodo *sig;
  14.      nodo *generar_nodo(char a[30])
  15.          {nodo *n;
  16.        n=new nodo[30];
  17.           strcpy(n->info,a);
  18.        n->sig=NULL;
  19.        return n;}
  20.      };
  21. /*Clase lista*/
  22. class lista_circular
  23.     {public:
  24.      nodo *cab;
  25. int cant;
  26.      lista_circular()
  27.         {cab=NULL;
  28.          cant=0;}
  29.      insertar(char a[30]);
  30.      extraer(int dato2);
  31.      mostrar();
  32.     };
  33. /*Inserta en la lista*/
  34. lista_circular::insertar(char a[30])
  35.    {char cad[30];
  36.     strcpy(cad,a);
  37.     nodo *nuevo=nuevo->generar_nodo(a);
  38.     if(!cab)
  39.       {cab=nuevo;
  40.      cab->sig=nuevo;
  41.        cant++;}
  42.     else{nodo *p;
  43.          p=cab;
  44.          while(p->sig!=cab)
  45.               {p=p->sig;}
  46.          p->sig=nuevo;
  47.          p=p->sig;
  48.          p->sig=cab;
  49.          cant++;}
  50.     }
  51. /*muestra la lista*/
  52. lista_circular::mostrar()
  53.    {nodo *p=cab;
  54.  while(p->sig!=cab)
  55.          {cout<<p->info<<endl;
  56.       p=p->sig;}
  57.     cout<<p->info<<endl;}//Cierro Mostrar
  58.  
  59. /*Extrae de la lista*/
  60. lista_circular::extraer(int dato2)
  61.    {if(cab)
  62.       {nodo *p,*q;
  63.      p=cab;
  64.        if(dato2==cant-5)
  65.           {while(p->sig!=cab)
  66.                 {p=p->sig;}
  67.         if(cab->sig==cab)
  68.               {cab=NULL;
  69.                cant--;}
  70.         else{cab=cab->sig;
  71.           p->sig=cab;
  72.                 cant--;}
  73.           }
  74.        else{if(dato2==cant)
  75.               {while(p->sig!=cab)
  76.                    {p=p->sig;}
  77.    p->sig=cab;
  78.                cant--;}
  79.             else{for(int i=0;i<dato2;i++)
  80.                     {q=p;
  81.             p=p->sig;}
  82.              q->sig=p->sig;
  83.              cant--;
  84.              delete p;}}
  85. }else{cout<<"  NO EXISTE LISTA\n";}
  86.    }
  87.  
  88. main()
  89.   {lista_circular obj;
  90.    char nombre[30];
  91.    int aux=0;
  92.    for(int i=0;i<5;i++)
  93.       {cout<<"Digite El Nombre "<<i<<" De La Lista: ";
  94.          gets(nombre);
  95.          cout<<endl;
  96.          obj.insertar(nombre);}
  97.    clrscr();
  98.    obj.mostrar();
  99.    int aux2=obj.cant-1;
  100.    for(int i=0;i<aux2;i++)
  101.       {clrscr();
  102.        randomize();
  103.    aux=random(obj.cant)+1;
  104.    cout<<"Cantidad De Elementos "<<obj.cant<<endl<<"Se Elimino El Elemento "<<aux<<" De La Lista."<<endl<<"Lista Actual: "<<endl;
  105.        obj.extraer(aux);
  106.        obj.mostrar();
  107.        getch();}
  108.    getch();}


En línea

Beakman

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: Unas Veces Lo Hace Bien Otras No :S (Plis Urgente)
« Respuesta #1 en: 14 Septiembre 2010, 01:13 am »

varias cosas para decir

primero: por que queres que la lista se borre "aleatoriamente"?..es decir, por que usas randomize() y random() ?

-en una parte declaras "char cad[30]"... esta de mas, no lo usas.

-en la clase nodo pones
Código:
      nodo *generar_nodo(char a[30])
      {
            nodo *n;
            n=new nodo[30];
            strcpy(n->info,a);
            n->sig=NULL;
            return n;
      }
por que pones new nodo[ "30" ] ?

-en que momento liberas memoria? solamente liberas 'p' pero asi no liberas TODO

-hacia falta que uses la conioo?    ¬¬

-etaria bueno que pongas mas comentarios, que sea mas legible

y bueno... perdoname si me estoy equivocando!! tal vez le pifie en algo.
despues lo leo mejor :)


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines