Título: Consulta - Punteros Publicado por: Cero++ en 12 Diciembre 2018, 16:59 pm Buenas, otra vez yo! Necesito me aclaren esto, porque la verdad es que no entiendo para qué debería hacer la función que me están pidiendo, a ver si me pueden esclarecer un poco.
Consigna: Código
Esto fue lo que hice yo: //No quiero que me hagan los ejercicios, solo que me ayuden en las dudas que tengo, así puedo terminar de comprenderlos, sino nunca voy a poder razonarlos si me los hacen Código
Título: Re: Consulta - Punteros Publicado por: MAFUS en 12 Diciembre 2018, 17:27 pm El tercer argumento es un puntero a función por el cual le pasarás la función que realmente va a comparar.
Es cómo la función qsort, fíjate en ella. La idea es: cada función que compara dos elementos por [lo que sea] devuelve:
La firma de estas funciones auxiliares sería algo así: Código: int funcion(alumno *al_1, alumno *al_2); La firma de tu función principal sería Código: alumno* Busca_mayor(alumno *base, size_t size, int (*comparar) (alumno *al_1, alumno *al_2)) Dentro de ella tendrás que buscar el mayor de tu array haciendo uso de la función de comparación para ir encontrado el mayor de los elementos comparados. Título: Re: Consulta - Punteros Publicado por: K-YreX en 12 Diciembre 2018, 18:45 pm La firma de estas funciones auxiliares sería algo así: Código: int funcion(alumno *al_1, alumno *al_2); Otra alternativa, ya que el programa es en C++ y no en C es pasar los parámetros por referencia. Código Personalmente prefiero usar está opción y evitas usar la notación de punteros. Te lo dejo como alternativa. :-X Título: Re: Consulta - Punteros Publicado por: Cero++ en 13 Diciembre 2018, 20:07 pm Estuve pensando desde ayer las respuestas que me dieron, pero, no entiendo, no importa, gracias de todos modos ;D
Título: Re: Consulta - Punteros Publicado por: K-YreX en 13 Diciembre 2018, 20:51 pm Si tienes que buscar el mayor de un array de enteros, es simple:
Código Pero esto es porque para saber si un número es mayor que otro basta con el operador ">". Sin embargo cuando comparas estructuras tú decides que campo indica que objeto es mayor que otro. Entonces ya no sirve usar el operador ">", tienes que usar una función que haga lo mismo que ese operador, es decir, que de dos objetos te diga cual es mayor. Imagina un stuct de persona, con nombre y edad: Código Nosotros decidimos cuando una persona es mayor que otra, lo más lógico es con la edad, entonces hacemos una función que reciba dos personas y devuelva un entero positivo (1) si el primero es mayor, un entero negativo (-1) si el primero es menor y un 0 si son iguales... Código
Entonces ahora para buscar el mayor de un array de personas sería algo así: Código Aquí en vez de usar el operador ">" hemos tenido que usar la función que hemos creado porque si usas el operador ">" con dos estructuras, el programa no sabe cual es mayor (a no ser que sobrecargues ese operador, que eso lo estudiarás más adelante). Entonces si tienes más de un criterio de ordenación, por ejemplo quieres que el mayor sea e que tiene el DNI más alto. Entonces tendrías una función como <int compararPorEdad(Persona p1, Persona p2)> pero que será <int compararPorDni(Persona p1, Persona p2)>. El objetivo es que puedas usar la función <Persona personaMayor(Persona *personas, int size)> con el criterio que quieras. Entonces ese criterio lo pasas como tercer parámetro, pasas la función que compara. Código Y usas la función <int comparacion(Persona p1, Persona p2)> para comparar cada dos personas del array. Suerte :-X Título: Re: Consulta - Punteros Publicado por: Cero++ en 18 Diciembre 2018, 00:56 am Y usas la función <int comparacion(Persona p1, Persona p2)> para comparar cada dos personas del array. Suerte :-X Te soy sincero, no entiendo la aplicación, tengo una forma de hacerlo, pero no usaría ese maldito puntero >:(Hice esto, pero hasta ahí llegue con lo que me explicaste y llegue a entender, obviamente, no funciona Código
Título: Re: Consulta - Punteros Publicado por: CalgaryCorpus en 18 Diciembre 2018, 04:43 am Cuando invoques la funcion usando el puntero p, elige una de estas 2 opciones, ambas deberian funcionar.
- Usa p sin *, osea p( parametros... ) - Desreferencia primero, (*p)( parametros .. ) |