Herramientas de usuario

Herramientas del sitio


funciones2

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
funciones2 [2014/04/10 12:50] – [Punteros a funciones] lmateufunciones2 [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 los parámetros recibos desde la línea de comandos.  Por ejemplo:
  
 <code> <code>
-  #include <stdio.h> +% ordenar juan pedro diego 
-  #include <string.h>+diego 
 +juan 
 +pedro 
 +</code>
  
-  void qsort(void *a[], int left, int right+Esta es la solución usando qsort
-             int (*compare)(void *, void *)); + 
-             +<code> 
 +  int mistrcmp(void *p1void *p2) { 
 +    char *s1= (char*)p1; 
 +    char *s2= (char*)p2; 
 +    return strcmp(s1s2); 
 +  } 
 +               
   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, 1, argc-1, compare);+    qsort((void**)argv, 1, argc-1, mistrcmp);
  
     for (j= 1; j<argc; ++j)     for (j= 1; j<argc; ++j)
       printf("%s\n", argv[j]);       printf("%s\n", argv[j]);
   }   }
 +</code>
 +
 +=== Segundo ejemplo de uso ===
 +
 +Esto no es elegante pero permite usar directamente la función strcmp, sin tener que definir mistrcmp.
 +
 +<code>
 +  int (*compare)(void *, void *)= (int (*)(void *, void*)) strcmp; /* Ver nota */
 +  qsort((void**)argv, 1, argc-1, compare);
 </code> </code>
  
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 es:+Otra forma de lograr lo mismo, aunque no es más o menos eficiente, es:
  
 <code> <code>
Línea 111: Línea 128:
 </code> </code>
  
-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 ejemplo de uso ===
-reciba como parámetros punteros a void: +
- +
-<code> +
-  int mistrcmp(void *p1, void *p2) { +
-    char *s1(char*)p1; +
-    char *s2(char*)p2; +
-    return strcmp(s1, s2); +
-  } +
-</code> +
- +
-Ahora se puede llamar a qsort especificando como comparador mistrcmp sin tener +
-que aplicar un complicado cast: +
- +
-<code> +
-    qsort((void**)argv, 1, argc-1, mistrcmp); +
-</code> +
- +
-=== Segundo ejemplo de uso ===+
  
 Este ejemplo ordena los strings por valor numérico: Este ejemplo ordena los strings por valor numérico:
Línea 205: Línea 204:
  
 <code> <code>
 +  /* 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://users.dcc.uchile.cl/~lmateu/CC3301/controles/ex-131.pdf|examen de 2013/1]].   * Resuelva la pregunta 3 parte i.- del [[http://users.dcc.uchile.cl/~lmateu/CC3301/controles/ex-131.pdf|examen de 2013/1]].
-  * Resuelva la pregunta 1 del [[http://users.dcc.uchile.cl/~lmateu/CC3301/controles/c2-131.pdf|control 2 de 2013/1]].+  * Resuelva la pregunta 1 del [[http://users.dcc.uchile.cl/~lmateu/CC3301/controles/c2-131.pdf|control 2 de 2013/1]].  Pruebe su solución usando el archivo [[http://users.dcc.uchile.cl/~lmateu/CC3301/download/colapri.zip|colapri.zip]].  Para la parte a.- complete el archivo p1a.c.  Verifique el resultado con el comando "make test-p1a" Luego resuelva la parte b.- en el archivo ordenar.c y verifique su funcionamiento con el comando "make test-p1b".
  
funciones2.1397134250.txt.gz · Última modificación: 2014/04/10 12:50 por lmateu