• Lunes 13 de Mayo de 2024, 10:37

Autor Tema:  Problemas De Ordenamiento  (Leído 1410 veces)

fabrizzio

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Problemas De Ordenamiento
« en: Miércoles 27 de Septiembre de 2006, 18:22 »
0
que tal , estoy haciendo un programa AGENDA, con listas dobles enlazadas, que me almacene los campos que estan en la estructura, trate de ordenarlos al momento que los estoy ingresando, pero se me hizo complicado y llegue a la conclusion de que seria mejor hacer otra funcion ORDENA; el problema esta en que no puedo ordenar porque no puedo decir   por ejemplo  aux->nombre>nuevo->nombre
pienso que no funciona porque son cadenas de carecteres y no numemos.

entonces trate de convertir la cadena a numero con la funcion atoi pero no funciono, tambien trate de usar la funcion strcmp pero nada, pliz ayuda ..

aqui alzo parte del codigo para que tengan idea

struct agenda
{
  char nombre[20];
  char cedula[10];
  char telefono[6];
  int parentezco;
  agenda *ant;
  agenda *sig;
};

void crear_nodo()
{
  nuevo=new agenda;
  nuevo->sig=NULL;
  nuevo->ant=NULL;
}

void ingreso()
{
  char op = 's';
  char nombre[20];
  char cedula[10];
  char telefono[6];
  int parentezco;
  while (op=='s')
  {
    clrscr();
    cout<<"Ingrese los siguientes datos, para salir en nombre ingrese'#'\n";
    cout<<"Parentezco: 1.-Familia, 2.-amigos, 3.-Trabajo\n";
    cout<<"C‚dula: ";cin>>cedula;
    cout<<"Nombre: ";cin>>nombre;
    cout<<"telefono: ";cin>>telefono;
    cout<<"Parentezco: ";cin>>parentezco;
    cout<<"Desea ingresar otro dato? s/n";op=getche();
    crear_nodo();
    strcpy(nuevo->cedula,cedula);
    strcpy(nuevo->nombre,nombre);
    strcpy(nuevo->telefono,telefono);
    nuevo->parentezco=parentezco;
    if(ini==NULL)
    {
      ini=fin=nuevo;
    }
    else
    {
      nuevo->ant=fin;
      fin->sig=nuevo;
      fin=nuevo;
    }
  };
}

malcom

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Problemas De Ordenamiento
« Respuesta #1 en: Jueves 28 de Septiembre de 2006, 05:44 »
0
Hola, bueno tienes que crear una funcion que examine caracter por caracter  las 2 cadenas, mandas a una funcion las 2 cadenas como argumentos y haces un ciclo hasta que una de las 2 cadenas termine y alli si podrias preguntar algo asi

  if(aux->nombre > nuevo->nombre)
    {
    //aux es mayor que nuevo, por ejemplo aux es "carro" y nuevo es "arbol"
     ----
     ----
     ----
    }


. y asi si podrias ordenarlos.

De todas maneras lo que se estila en estos casos es usar un campo clave, algo que no se repita y por lo general numerico. en tu caso seria la cedula o el telefono del contacto.

Espero te ayude...

malcom

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Problemas De Ordenamiento
« Respuesta #2 en: Jueves 28 de Septiembre de 2006, 13:01 »
0
Se me olvidaba, tambien puedes usar la funcion strcmp de la "string.h". a esa funcion le mandas las 2 cadenas y depende del valor que te devuelva sabras cual cadena es mayor alfabéticamente hablando o si son iguales.

cesar_00015

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Problemas De Ordenamiento
« Respuesta #3 en: Martes 3 de Octubre de 2006, 22:37 »
0
Trata de usar punteros a punteros de tal manera que a la hora de ordenarlos solo necesitas direccionar los punteros (o apuntadores) de mayor a menor o de menor a mayor segun el orden que quieras. Ahorras memoria ya q no copias nada y el programa se vuelve mas eficiente.
Saludos.