funciones2
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| funciones2 [2013/10/18 19:31] – [Ejercicio] lmateu | funciones2 [2014/09/24 21:36] (actual) – [Ejercicios] lmateu | ||
|---|---|---|---|
| Línea 48: | Línea 48: | ||
| === Primer ejemplo de uso === | === Primer ejemplo de uso === | ||
| - | El siguiente programa utiliza la función anterior para ordenar líneas lexicográficamente: | + | El siguiente programa utiliza la función anterior para ordenar líneas lexicográficamente |
| < | < | ||
| - | #include < | + | % ordenar juan pedro diego |
| - | # | + | diego |
| + | juan | ||
| + | pedro | ||
| + | </code> | ||
| - | void qsort(void *a[], int left, int right, | + | Esta es la solución usando |
| - | int (*compare)(void *, void *)); | + | |
| - | | + | < |
| + | int mistrcmp(void *p1, void *p2) { | ||
| + | char *s1= (char*)p1; | ||
| + | char *s2= (char*)p2; | ||
| + | return strcmp(s1, s2); | ||
| + | } | ||
| + | |||
| int main(int argc, char **argv) { | int main(int argc, char **argv) { | ||
| int j; | int j; | ||
| - | int (*compare)(void *, void *)= (int (*)(void *, void*)) strcmp; /* Ver nota */ | ||
| - | qsort((void**)argv, | + | qsort((void**)argv, |
| for (j= 1; j<argc; ++j) | for (j= 1; j<argc; ++j) | ||
| printf(" | printf(" | ||
| } | } | ||
| + | </ | ||
| + | |||
| + | === Segundo ejemplo de uso === | ||
| + | |||
| + | Esto no es elegante pero permite usar directamente la función strcmp, sin tener que definir mistrcmp. | ||
| + | |||
| + | < | ||
| + | int (*compare)(void *, void *)= (int (*)(void *, void*)) strcmp; /* Ver nota */ | ||
| + | qsort((void**)argv, | ||
| </ | </ | ||
| Línea 95: | Línea 112: | ||
| ninguna conversión. | ninguna conversión. | ||
| - | Otra forma de lograr lo mismo, aunque no es ni mejor ni peor eficiencia | + | Otra forma de lograr lo mismo, aunque no es más o menos eficiente, |
| < | < | ||
| Línea 111: | Línea 128: | ||
| </ | </ | ||
| - | Lo cual es mucho más legible. | + | Lo cual es más legible. |
| - | Por último también se puede usar una función de comparación de strings propia que | + | === Tercer |
| - | reciba como parámetros punteros a void: | + | |
| - | + | ||
| - | < | + | |
| - | int mistrcmp(void *p1, void *p2) { | + | |
| - | char *s1= (char*)p1; | + | |
| - | char *s2= (char*)p2; | + | |
| - | return strcmp(s1, s2); | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Ahora se puede llamar a qsort especificando como comparador mistrcmp sin tener | + | |
| - | que aplicar un complicado cast: | + | |
| - | + | ||
| - | < | + | |
| - | qsort((void**)argv, | + | |
| - | </ | + | |
| - | + | ||
| - | === Segundo | + | |
| Este ejemplo ordena los strings por valor numérico: | Este ejemplo ordena los strings por valor numérico: | ||
| < | < | ||
| - | int numcmp(void *s1, void *s2) /* compara | + | int numcmp(void *s1, void *s2) /* compara |
| int i1, i2; | int i1, i2; | ||
| Línea 205: | Línea 204: | ||
| < | < | ||
| + | /* Este programa solo funciona en plataformas de 32 bits, no cuando son de 64 bits */ | ||
| int a[6]= {3, 7, 8, 10, 1, 2}; | int a[6]= {3, 7, 8, 10, 1, 2}; | ||
| | | ||
| Línea 271: | Línea 271: | ||
| * Resuelva la pregunta 3 parte i.- del [[http:// | * Resuelva la pregunta 3 parte i.- del [[http:// | ||
| - | * Resuelva la pregunta 1 del [[http:// | + | * Resuelva la pregunta 1 del [[http:// |
funciones2.1382124717.txt.gz · Última modificación: por lmateu
