[C con Clase] Ayuda con estructuras y búsqueda!.
David Gonzalez Herrera
davidgh en etb.net.co
Vie Abr 27 18:34:50 CEST 2007
Estimado Salvador,
Con fecha viernes, 27 de abril de 2007, 3:56:57, escribió:
> Para empezar, necesitamos una función de comparación. Esta función debe ajustarse al prototipo:
> int <nombre>(const void *arg1, const void *arg2);
> Cada argumento será un puntero genérico que apuntará a un elemento
> del array, de modo que disponemos de dos elementos que debemos
> comparar, y devolver un valor en función de cual consideremos mayor.
> Si consideramos que el mayor es el primero, devolveremos un valor
> mayor que cero, si el mayor es el segundo, devolveremos un valor
> menor que cero, y si sin iguales, devolveremos cero.
Que buena idea, pero pues tengo unas dudas aún, usé la función así,
imprimiendo los resultados de comparar los returns de la función:
int cosa=0;
for(int x=0; x<ELEM; x++){
cosa = compararnota(&tabla[x].nota, &tabla[x+1].nota);
cout << cosa;
}
El devuelve 1 1 -1 respectivamentem pero no sé como usarla en mi caso
específico, pensé en un for() que itere por los valores de la tabla y
los muestre en pantalla, pero no me salé.
> Para comaparar las notas de dos alumnos podemos usar esta implementación:
> int compararnota(const void *arg1, const void *arg2)
> {
> // Estas asignaciones nos ayudarán a crear un código más claro:
> struct es *alumno1 = (struct es*)arg1;
> struct es *alumno2 = (struct es*)arg2;
>
> if(alumno1->nota < alumno2->nota) return -1;
> else if(alumno1->nota > alumno2->nota) return 1;
> else return 0;
> }
Esto va super bien.
> Como verás, hemos convertido los punteros generéricos en punteros a
> estructuras es, de moso que es más sencillo comparar notas.
> El resto es ahora más evidente: comparamos las notas, si la del
> alumno 1 es menor, retornamos -1, si la menor es la del alumno 2
> retornamos 1, en otro caso retornamos 0.
> Ahora es muy simple ordenar la lista por notas, basta con invocar a la función qsort:
> qsort(tabla, 3, sizeof(struct es), compararnota);
Pero entonces acá funcionaría guardando los resultados de qsort, o
imprimiendolos directamente, en esta parte estoy perdido.
Espero no ser muy burro y que me puedas ayudar.
Gracias.
--
Saludos,
David mailto:davidgh en etb.net.co
Más información sobre la lista de distribución Cconclase