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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  POO ordenación de arreglos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: POO ordenación de arreglos  (Leído 1,926 veces)
SojatDotar

Desconectado Desconectado

Mensajes: 40


Ver Perfil
POO ordenación de arreglos
« en: 28 Febrero 2016, 15:53 pm »

Buenas, tengo una duda, si tengo una clase llamada Estudiante, con los atributos privados y quisiera ordenar de menor a mayor en un procedimiento un arreglo de Estudiante

Código:
struct Estudio
{
int dia;
int mes;
int anyo;

};



class Estudiante {
private:
Estudio tiempo;
int curso;
int edad;
public:
void setTiempo(Estudio t);
Estudio getTiempo();
void setCurso(int c);
int getCurso();
void setEdad(int e);
int getEdad();
};
Ahora en el main tengo un arreglo Estudiante el tamaño del arreglo lo da el usuario y quisiera ordenar ese arreglo de estudiante de menor a mayor, como sería? ordenaria como un arreglo normal? nunca he ordenado un arreglo de objetos


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: POO ordenación de arreglos
« Respuesta #1 en: 28 Febrero 2016, 16:50 pm »

Ordenar implica 2 cosas básicas: intercambios y comparaciones.
En un arreglo de tipos nativos:
Código
  1. //Comparar
  2. if(arr[i]>arr[j])
  3. //...
  4. //Intercambiar
  5. int k = arr[i];
  6. arr[i] = arr[j];
  7. arr[j] = k;

En tu clase Estudiante, por ejemplo:
Código
  1. //Comparar
  2. if(arr[i].getEdad()>arr[j].getEdad())
  3. //...
  4. //Intercambiar
  5. Estudiante k = arr[i];
  6. arr[i] = arr[j];
  7. arr[j] = k;

Al final es lo mismo. Solo elige cómo lo quieres comparar. Lueog ya, dependerá todo de qué quieras haces exactamente.


En línea

SojatDotar

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: POO ordenación de arreglos
« Respuesta #2 en: 28 Febrero 2016, 18:02 pm »

y en caso que también quiera ordenar el struct que esta dentro de la clase?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: POO ordenación de arreglos
« Respuesta #3 en: 28 Febrero 2016, 18:20 pm »

Tendrás que comparar las estructuras, del modo que quieras. Si no quieres andar comaprando una a una, haz un método del tipo compareTo(x). Generalmente este tipo de funciones devuelven -1, 0 0 1, según sea menor, igual o mayor.

Hay otra forma, que no es muy lógica (en este caso), pero te puede servir, y son los operadores.

Código
  1. class Estudiante{
  2.   //...
  3.  
  4. public:
  5.    bool operator>(const Estudiante& e){
  6.        return edad>e.getEdad();
  7.    }
  8. };
  9.  
  10. int main(){
  11.    Estudiante a,b;
  12.    a.setEdad(15);
  13.    b.setEdad(25);
  14.    cout << (a>b);
  15. }

Casi todos los operadores son sobrecargables. Por ejemplo, <,>,>=,<=,==,!=,>>,<<, operador coma (,), [], (), &,|,^,||,&&, ...
Algunos, como el operador (), te permite enviarle más deun parámetro.

Atu estructura Estudio le puedes añadir un par de operadores del tipo:
Código
  1. bool operator>(const Estudio& e){
  2.        if(anyo>e.anyo)
  3.            return true;
  4.        if(anyo<e.anyo)
  5.            return false;
  6.        if(mes>e.mes)
  7.            return true;
  8.        // etc...
  9. }
En línea

SojatDotar

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: POO ordenación de arreglos
« Respuesta #4 en: 28 Febrero 2016, 18:24 pm »

Gracias, en el primer ejemplo cuando pusiste Estudiante K = Arr no entendí bien ese ejemplo



Otra pregunta se haría tal cuál si lo hago con procedimientos? es decir un void que ordene por tiempo, otra que ordene por curso y otra que ordene por edad ?
« Última modificación: 28 Febrero 2016, 19:35 pm por Eternal Idol » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: POO ordenación de arreglos
« Respuesta #5 en: 28 Febrero 2016, 23:22 pm »

Lo de Estudiante K = arr[ i ] es paraintercambiar valorses. k sería una variable temporal donde almacenar el valor a itnercambiar.

Y sí, puedes hacer 4 funciones, al final solo tendrás que cambiar un par de detalles en cada una. Si te referías a otra cosa, no entendí muy bien.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ordenación arrays
PHP
nØFi# 2 2,256 Último mensaje 15 Junio 2009, 21:13 pm
por ^Cloud^
ordenacion burbuja
.NET (C#, VB.NET, ASP)
S1dD3xt35 6 4,461 Último mensaje 21 Marzo 2010, 01:09 am
por S1dD3xt35
Ordenación burbuja
Programación C/C++
Runex 1 2,199 Último mensaje 28 Abril 2012, 01:48 am
por Torino10
Ordenación de tablas « 1 2 »
Programación C/C++
muymuyperdido 12 5,114 Último mensaje 5 Enero 2013, 11:57 am
por muymuyperdido
Algoritmo de ordenación.
Programación C/C++
Leafar77 1 1,788 Último mensaje 11 Marzo 2015, 17:16 pm
por NOIS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines