Creo que ahora si me salio el array de longitud variable sin perder datos

Iniciado por Y2J, 25 Agosto 2011, 01:48 AM

0 Miembros y 1 Visitante están viendo este tema.

Y2J

Pues eso, creo que ahora si me salio el array de longitud variable sin perder datos que necesitaba en mi tema anterior (Como hacer un array de longitud variable?)
Ahora quisiera que me digan si realmente esta bien y puedo implemetarlo en mi programa, que es de registrarse y luego acceder a tu al sistema con tu nombre y contraseña



#include <iostream>
#include <cstdlib>

using namespace std;

struct Registro
{
       string Codigo;
       string Nombre;
       int Edad;
       int DNI;
       //void  Acceder();
};

int Menu_Principal();
void Registrarse(Registro *P,int x);
//int i=1;

int Menu_Principal()
{
        int opcion;   
        cout<<"MENU PRINCIPAL\n"<<endl;
        cout<<"1) Acceder\n2) Registrarse\n3) Salir\n\nIngrese una opcion: "<<endl;
        cin>>opcion;
        return opcion;
}
   
void Registrarse(Registro *P,int x)
{
      cout<<"PROCESO DE REGISTRO\n"<<endl;
      cout<<"Ingrese su Nombre Completo: ";
      getline(cin,(*(P+(x-1))).Nombre);
      cout<<"Ingrese su codigo de acceso (Solo 5 digitos): ";
      getline(cin,(*(P+(x-1))).Codigo);
      cout<<"Ingrese su edad: ";
      cin>>(*(P+(x-1))).Edad;
      cout<<"Ingrese su DNI: ";
      cin>>(*(P+(x-1))).DNI;
      }

int main()
{
    int j=1;
    int i;
    string nom,cod;
    Registro *Persona;
    Registro *Persona2;
    do
    {
             if(j<2)
             Persona=new Registro[j];
             if(j%2==1)//si es impar
             Registrarse(Persona,j);
             else
             Registrarse(Persona2,j);
             j=j+1;
             fflush(stdin);
             if(j%2==0)//si es par
             Persona2= new Registro[j];
             else
             Persona=new Registro[j];
             for(i=0;i<j-1;i++)
             {
                               if(j%2==0)
                               nom=Persona.Nombre;
                               else
                               nom=Persona2.Nombre;
                               if(j%2==0)
                               cod=Persona.Codigo;
                               else
                               cod=Persona2.Codigo;
                               if(j%2==0)
                               Persona2.Nombre=nom;
                               else
                               Persona.Nombre=nom;
                               if(j%2==0)
                               Persona2.Codigo=cod;
                               else
                               Persona.Codigo=cod;
             }
             if(j%2==0)
             cout<<Persona2[0].Nombre<<endl;
             else
             cout<<Persona[0].Nombre<<endl; /*Esto es para comprobar que no hay                   perdida de datos al copiar los datos y que primer dato siempre es el mismo*/
             
             if(j%2==0)
             delete []Persona;
             else
             delete []Persona2;
             system("CLS");             
    }       
    while(1);
    getchar();getchar();
    return 0;
}

Khronos14

Pues tienes dos formas de hacer un array de longitud variable: arrays redimensionables y listas enlazadas.

Los arrays redimensionales consiste en crear una copia temporal de los datos de tu array, crear un nuevo array con new() con un tamaño superior para el nuevo registro, y a continuación vuelcas toda la información del array temporal en el nuevo.

Las listas enlazadas tienen un poco más de trabajo, pero son más ágiles. En google encontrarás información sobre ellas o mismo en el foro.

Saludos.

Y2J

ya lo se pero queria hacerlo sin esas cosas, ademas que aun no llego al tema de listas enlazadas y stl, pero queria saber si mi algoritmo esta bien