• Sábado 14 de Diciembre de 2024, 23:59

Autor Tema:  Problemas con Bubble sort  (Leído 1802 veces)

Belialx3

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Problemas con Bubble sort
« en: Jueves 16 de Octubre de 2008, 05:08 »
0
hola, haciendo un programa de metodos de ordenamiento, me encontré con este problema:

el programa consiste en una especie de base de datos de automoviles (bastante primitiva), donde el usuario da el "Codigo", "modelo", "año", "precio". estoy utilizando estructuras, esta escrutura es:

Código: Text
  1.  
  2. autos{
  3.      int codigo;
  4.      char modelo[10];
  5.      char año[4];
  6.      char precio[10];
  7. } autos[100];
  8.  
  9.  

 para ordenar mis datos usando bubble sort, usé el campo de "codigo" como base para hacerlo, ya que se trata de unicamente numeros. el problema es que unicamente me ordena ese campo (el de codigo) pero los otros  campos(nombre,direccion, telefono), nos deja en su posicion original.

mi pregunta es: como hago para que se mueva el registro completo a la posicion deseada?...

esta es la parte del codigo encargada del ordenamiento

Código: Text
  1.     
  2. for(ai=a-1;ai>=0;ai--){  //a es el total de datos(autos) en la lista
  3.      for(aj=1;aj<=ai;aj++){
  4.     if(autos[aj-1].codigo>autos[aj].codigo){
  5.          auxa=autos[aj-1].codigo;
  6.          autos[aj-1].codigo=autos[aj].codigo;
  7.          autos[aj].codigo=auxa;
  8.  
  9.     }
  10.      }
  11. }
  12. // esta es la parte del despliegue
  13. for(ai=1;ai<a;ai++){
  14.     gotoxy(1,3+ai); cout<<ai;
  15.     gotoxy(6,3+ai); cout<<autos[ai].codigo;
  16.     gotoxy(25,3+ai); cout<<autos[ai].marca;
  17.     gotoxy(45,3+ai); cout<<autos[ai].modelo;
  18.     gotoxy(65,3+ai); cout<<autos[ai].precio;
  19. }
  20.  
  21. cout<<"nn   Presione "ENTER" para continuar...";
  22. getch();
  23.  
  24.  

se que unicamente estoy cambiando la posicion del vector codigo, y que por esa razon los otros quedan en su posicion original, pero como soluciono esto? gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas con Bubble sort
« Respuesta #1 en: Jueves 16 de Octubre de 2008, 10:14 »
0
Tienes 2 opciones. Crear otra estructura de datos para mover el auto completo de golpe,

Código: C
  1.  
  2. typedef struct tCoche{
  3.     autos auto;
  4. }Coches[100];
  5.  
  6. [...]
  7.  
  8. tCoche auxa;
  9.  
  10. for(ai=a-1; ai>=0; ai--){  //a es el total de datos(autos) en la lista
  11.      for(aj=1; aj<=ai; aj++){
  12.           if(Coches[aj-1].auto.codigo > Coches[aj].auto.codigo){
  13.                auxa = Coche[aj-1];
  14.                Coche[aj-1] = Coche[aj];
  15.                Coche[aj] = auxa;
  16.           }
  17.      }
  18. }
  19.  
  20.  

o bien mover todos los registros tal y como lo haces con el de código (por cierto, no puedes usar la "ñ" en los registros, así que he cambiado año por anio).

Código: C
  1.  
  2. int auxa;
  3. char *auxb;
  4.  
  5. for(ai=a-1;ai>=0;ai--){  //a es el total de datos(autos) en la lista
  6.      for(aj=1;aj<=ai;aj++){
  7.     if(autos[aj-1].codigo>autos[aj].codigo){
  8.          auxa=autos[aj-1].codigo;
  9.          autos[aj-1].codigo=autos[aj].codigo;
  10.          autos[aj].codigo=auxa;
  11.  
  12.          auxb=autos[aj-1].modelo;
  13.          autos[aj-1].modelo=autos[aj].modelo;
  14.          autos[aj].modelo=auxb;
  15.  
  16.          auxb=autos[aj-1].anio;
  17.          autos[aj-1].anio=autos[aj].anio;
  18.          autos[aj].anio=auxb;
  19.  
  20.          auxb=autos[aj-1].precio;
  21.          autos[aj-1].precio=autos[aj].precio;
  22.          autos[aj].precio=auxb;
  23.     }
  24.      }
  25. }
  26.  
  27.  

Está sin probar, pero deberían funcionar ambos métodos. Cualquier problema me comentas.

Belialx3

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Problemas con Bubble sort
« Respuesta #2 en: Jueves 16 de Octubre de 2008, 20:09 »
0
gracias por responder. la segunda opcion me parecio bien, pero al aplicarlo me aparece el siguiente error:

Código: Text
  1. Lvalue required in function main()
  2.  

estuve investigando, y por lo que encontré, es debido a que quiero asignarle un valor a una constante (o algo asi). ese error me lo marca en estas partes:

Código: Text
  1. auxab=autos[aj-1].marca;
  2. autos[aj-1].marca=autos[aj].marca;<----aqui
  3. autos[aj].marca=auxab;<----aqui
  4.  
  5. auxab=autos[aj-1].precio;
  6. autos[aj-1].precio=autos[aj].precio;<----aqui
  7. autos[aj].precio=auxab;<----aqui
  8.  
  9. auxab=autos[aj-1].modelo;
  10. autos[aj-1].modelo=autos[aj].modelo; <----- aqui
  11. autos[aj].modelo=auxab;<----aqui
  12.  
  13.  

6 errores en total. bueno, eso seria todo por el momento jeje. :P

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas con Bubble sort
« Respuesta #3 en: Viernes 17 de Octubre de 2008, 09:11 »
0
Postea por favor el código de las declaraciones que uses.

Recuerda también declarar la función main() como int main() y hacer un return 0; al final de ésta.

Belialx3

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Problemas con Bubble sort
« Respuesta #4 en: Martes 21 de Octubre de 2008, 00:13 »
0
:S al final el problema era otro jejeje, use el strcpy para lograr eso y me quedó asi:

Código: Text
  1.                                        
  2. for(ai=a-1;ai>=0;ai--){
  3. for(aj=1;aj<=ai;aj++){
  4. if(autos[aj-1].precio>autos[aj].precio){
  5. auxa=autos[aj-1].precio;
  6. autos[aj-1].precio=autos[aj].precio;
  7. autos[aj].precio=auxa;
  8.  
  9. auxa=autos[aj-1].modelo;
  10. autos[aj-1].modelo=autos[aj].modelo;
  11. autos[aj].modelo=auxa;
  12.  
  13. auxa=autos[aj-1].codigo;
  14. autos[aj-1].codigo=autos[aj].codigo;
  15. autos[aj].codigo=auxa;
  16.  
  17. strcpy(auxab,autos[aj-1].marca);
  18. strcpy(autos[aj-1].marca,autos[aj].marca);
  19. strcpy(autos[aj].marca,auxab);
  20. }
  21. }
  22. }
  23.  
  24.  

y la variable auxab la declare como vector:    auxab[20].

aun asi muchisimas gracias por responder, y una disculpa por no responder antes, pero no tuve tiempo. saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas con Bubble sort
« Respuesta #5 en: Martes 21 de Octubre de 2008, 06:42 »
0
Cita de: "Belialx3"
use el strcpy

Am, sí, eran char *. Qué despiste.