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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda] Ordenar por edad y por nombre, datos de un struct.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Ordenar por edad y por nombre, datos de un struct.  (Leído 16,918 veces)
darking664

Desconectado Desconectado

Mensajes: 10



Ver Perfil
[Ayuda] Ordenar por edad y por nombre, datos de un struct.
« en: 5 Octubre 2013, 02:26 am »

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstring>
  5. #define tam 4 //constante
  6.  
  7. struct empleado{
  8. char nom[30];
  9. int edad;
  10. float sueldo;
  11. char sexo;
  12. char mat[2][30];
  13. };
  14.  
  15. //Prototipos
  16. empleado captura();
  17.  
  18. void imprimir(empleado emp);
  19. void ordenar(empleado vec[]);
  20.  
  21. using namespace std;
  22.  
  23. int main()
  24. {
  25. //vec de struct para trabajar TAM registros
  26. empleado vec[tam];
  27. int temp,temp2;
  28.  
  29. for(int i=1;i<tam;i++)
  30. vec[i]=captura();
  31.  
  32.  
  33. cout<<"\n\nRegistros Desordenados\n";
  34. for(int i=1;i<tam;i++)
  35. imprimir(vec[i]);
  36.  
  37.  
  38. //C O M P L E T A R ..... Linea de codigo que ordena el vector por edad
  39. cout<<"\n\nRegistros ordenados por EDAD\n";
  40.  
  41.  
  42. for(int i=1;i<tam-1;i++)
  43. {
  44. for(int j=1;j<tam-i-1;j++)
  45. {
  46. if (vec[j].edad> vec[j+1].edad)
  47. {
  48. temp=vec[j].edad;
  49. vec[j].edad=vec[j+1].edad;
  50. vec[j+1].edad=temp;
  51. }
  52. }
  53. }
  54.  
  55.  
  56.  
  57. for(int i=0;i<tam;i++)
  58. imprimir(vec[i]);
  59.  
  60.  
  61. //C O M P L E T A R ..... Linea de codigo que ordena el vector por nombre
  62. cout<<"\n\nRegistros Ordenados por NOMBRE\n";
  63.  
  64. for(int j=1;j<tam;j++)
  65. {
  66. temp2=strcmp(vec[j].nom,vec[j+1].nom);
  67. if(temp2>0)
  68. strcpy(vec[0].nom,vec[j].nom);
  69. strcpy(vec[j].nom,vec[j+1].nom);
  70. strcpy(vec[j+1].nom,vec[0].nom);
  71. }
  72.  
  73.  
  74. for(int i=1;i<tam;i++)
  75. imprimir(vec[i]);
  76.  
  77.  
  78.  
  79. system("PAUSE");
  80. return EXIT_SUCCESS;
  81. }
  82.  
  83.  
  84.  
  85. empleado captura()
  86. {
  87. empleado emp; //Variable local de captura
  88.  
  89. cout<<"\n\nNombre: ";
  90. cin.getline(emp.nom,30);
  91. cout<<"Edad: ";
  92. cin>>emp.edad;
  93. cout<<"Sueldo: ";
  94. cin>>emp.sueldo;
  95. cout<<"Sexo: ";
  96. cin>>emp.sexo;
  97. fflush(stdin);
  98. cout<<"mail 1: ";
  99. cin.getline(emp.mat[0],30);
  100. cout<<"mail 2: ";
  101. fflush(stdin);
  102. cin.getline(emp.mat[1],30);
  103. return emp;
  104. }
  105.  
  106. void imprimir(empleado emp)
  107. {
  108. cout<<endl<<"Nombre: "<<emp.nom;
  109. cout<<endl<<"Edad: "<<emp.edad;
  110. cout<<endl<<"Sueldo: "<<emp.sueldo;
  111. cout<<endl<<"Sexo: "<<emp.sexo;
  112. cout<<endl<<"Mail 1: "<<emp.mat[0];
  113. cout<<endl<<"Mail 2: "<<emp.mat[1]<<endl;
  114. return;
  115. }
  116.  


El programa consiste en ordenar el vector por edad y nombre alfabeticamente...
si alguien me puede orientar o ayudarme, se los agradezco mucho.

:)


« Última modificación: 5 Octubre 2013, 02:28 am por zagato-krono » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [Ayuda] Ordenar por edad y por nombre, datos de un struct.
« Respuesta #1 en: 5 Octubre 2013, 11:34 am »

Código
  1. for(int i=1;i<tam-1;i++)
  2. {
  3. for(int j=1;j<tam-i-1;j++)
  4. {
  5. if (vec[j].edad> vec[j+1].edad)
  6. {
  7. temp=vec[j].edad;
  8. vec[j].edad=vec[j+1].edad;
  9. vec[j+1].edad=temp;
  10. }
  11. }
  12. }

Ahí estás ordenando las edades... pero le estás asignando a cada individuo una edad que no es la suya... lo que tienes que ordenar es las estructuras en sí.

Además si estás usando dos bucles ( i y j ), no tiene sentido que a la hora de cambiar el orden uses solo j.

Código
  1. for(int i=1;i<tam-1;i++)
  2. {
  3.  for(int j=1;j<tam-i-1;j++)
  4.  {
  5.    if (vec[i].edad> vec[j].edad)
  6.    {
  7.      struct empleado temp = vec[i];
  8.      vec[i]= vec[j];
  9.      vec[j] = temp;          
  10.    }
  11.  }
  12. }

En el caso de ordenar por nombre te pasa exactamente lo mismo.

PD.: intenta no usar variables globales, no suelen ser una buena idea en el 99% de los casos.

PD2.: ya que estás usando c++, lo mismo te resulta más cómodo utilizar la clase string para manejar las cadenas, en vez de char*. Además, te podrías plantear usar la clase vector en vez de un array de c para gestionar la lista de empleados.

PD3.: Hay una tercera forma de ordenar y es usando las funciones qSort y sort... pero eso es algo que dejo que investigues por tu cuenta.

Un saludo.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [Ayuda] Ordenar por edad y por nombre, datos de un struct.
« Respuesta #2 en: 5 Octubre 2013, 17:55 pm »

El programa consiste en ordenar el vector por edad y nombre alfabeticamente...
En el segundo fragmento que debes completar solo tienes un bucle cuando necesitas dos.

En el primer fragmento hay dos errores, el primero ya lo indico eferion y el segundo son los indices (incorrectos) utilizados. Utiliza el motor de búsqueda de los foros (o sitios como Wikipedia) para verificar como se debe implementar el algoritmo de ordenacion BubbleSort.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
darking664

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Re: [Ayuda] Ordenar por edad y por nombre, datos de un struct.
« Respuesta #3 en: 7 Octubre 2013, 03:31 am »

Código
  1. for(int i=1;i<tam-1;i++)
  2. {
  3.  for(int j=1;j<tam-i-1;j++)
  4.  {
  5.    if (vec[i].edad> vec[j].edad)
  6.    {
  7.      struct empleado temp = vec[i];
  8.      vec[i]= vec[j];
  9.      vec[j] = temp;          
  10.    }
  11.  }
  12. }

En el caso de ordenar por nombre te pasa exactamente lo mismo.

PD.: intenta no usar variables globales, no suelen ser una buena idea en el 99% de los casos.

PD2.: ya que estás usando c++, lo mismo te resulta más cómodo utilizar la clase string para manejar las cadenas, en vez de char*. Además, te podrías plantear usar la clase vector en vez de un array de c para gestionar la lista de empleados.

PD3.: Hay una tercera forma de ordenar y es usando las funciones qSort y sort... pero eso es algo que dejo que investigues por tu cuenta.

Un saludo.
[/quote]


GRACIAS de veras, perdona x no poder contestar ayer (se me fue la luz), y entre trabajo y tareas de las otras materias .... :S

Si, investigare mas acerca de los metodos, y me basare en las lineas que escribiste.

No entendia bien como hacerlo en el struct.
:D :D :D :D :D :D
En línea

darking664

Desconectado Desconectado

Mensajes: 10



Ver Perfil
Re: [Ayuda] Ordenar por edad y por nombre, datos de un struct.
« Respuesta #4 en: 7 Octubre 2013, 03:36 am »

En el segundo fragmento que debes completar solo tienes un bucle cuando necesitas dos.

En el primer fragmento hay dos errores, el primero ya lo indico eferion y el segundo son los indices (incorrectos) utilizados. Utiliza el motor de búsqueda de los foros (o sitios como Wikipedia) para verificar como se debe implementar el algoritmo de ordenacion BubbleSort.

Un saludo

Gracias,  tomare en cuenta tus sugerencias, paso a terminar el programa :D :D
Igual, perdona por no contestar rapido, como ya explique se me fue la luz y no pude seguir...

y de veras gracias, saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ordenar alfabeticamente Nombres (Struct)
Programación C/C++
Ja_90 6 9,647 Último mensaje 22 Octubre 2014, 19:10 pm
por Ja_90
Ayuda con C++ Ordenar por apellido y edad
Programación C/C++
bryanrz96 1 4,804 Último mensaje 1 Diciembre 2015, 22:17 pm
por ivancea96
[C] Ordenar Array de STRUCT
Programación C/C++
n-utz 3 5,283 Último mensaje 24 Septiembre 2016, 19:08 pm
por n-utz
ayuda para ordenar datos de un archivo en c
Programación C/C++
jkomarcelino 0 1,436 Último mensaje 3 Agosto 2018, 03:54 am
por jkomarcelino
Problema con la Restricción de Edad hecha con If-Else y Struct
Programación C/C++
Rodrili1337 3 1,788 Último mensaje 27 Noviembre 2018, 02:10 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines