FUNCIONES COMO ARGUMENTOS DE OTRAS FUNCIONES


El manejo de direcciones en lugar de valores, permite que el nombre dado a una función geométrica, sea utilizado para reemplazarlo con otras funciones que se requieran, dando lugar a lo que podría llamarse función de reemplazo o función variable. Para emplearlas:

  1. Se declaran as funciones de usuario que reemplazarán a la función generica (no es necesario en el caso de funciones de biblioteca)

  2.  

     
     

    por ejemplo:

    int suma(int a, int b);

    int resta(int a, int b);

    int multiplica(int a, int b);
     
     

  3. Se declaran los nombres de las funciones genéricas, segun la sintaxis siguiente:

  4. tipo_de_función(*nombre_funcion1)();

    tipo_de_función(*nombre_funcion2)();
     
     

    por ejemplo: void clasifica(int a, int b, int(*opera)());
     
     

    En ese caso *opera es el nombre del apuntador de la función genérica que permitirá reemplazar ese argumento con el nombre de alguna función. Observe que siempre va encerrado entre paréntesis para los argumentos. La declaración int se relaciona con la dirección y por consiguiente siempre es de tipo entero.

  5. En la función principal se menciona la función con el nombre de la función que le corresponda (sin argumentos), segun el caso por ejemplo:

  6. main(void)

    {

    char r;

    printf("\n Indica operación + - * ");

    r=getche();

    switch(r)

    {

    case '+':

    printf("\n Se llama a clasifica con la función argumento suma ");

    clasifica(a,b,suma); break;

    case '-':

    printf("\n Se llama a clasifica con la función argumento resta ");

    clasifica(a,b,resta); break;

    case '*':

    printf("\n Se llama a clasifica con la función argumento multiplica ");

    casifica(a,b,multiplica); break;

    default:

    printf("\n Error "); break;

    }

    }

  7. Al definir la función que empleará otras fuciones semenciona como argumento el nombre geérico, segun el ejemplo siguiente:
void clasifica(int a, int b, int(*opera)())

{

int y;

y=(*opera(a,b)); /* se apunta a alguna función */

return(y);

}

int sume(int a, int b)

{

return(a+b);

}

int resta(int a, int b)

{

return(a-b);

}

int multiplica(int a, int b)

{

return (a*b);

}
 


EL PROGRAMA COMLETO SE MUESTRA ENSEGUIDA:
#include<stdio.h>

#include<conio.h>

int suma(int a, int b);

int resta(int a, int b);

int multiplica(int a, int b);

int clasifica(int a, int b, int (*opera)());

main(void)

{

char r;

int (*opera)();

int a=1, b=1;

printf("\n Indica operación + - * ");

r=getche();

switch(r)

{

case '+':

printf("\n Se llama a clasifica con la función argumento suma ");

printf("\n %d %c %d = %d",a,r,b,clasifica(a,b,suma));

clasifica(a,b,suma); break;

case '-':

printf("\n Se llama a clasifica con la función argumento resta ");

printf("\n %d %c %d = %d",a,r,b,clasifica(a,b,resta));

clasifica(a,b,resta); break;

case '*':

printf("\n Se llama a clasifica con la función argumento multiplica ");

printf("\n %d %c %d = %d",a,r,b,clasifica(a,b,multiplica));

casifica(a,b,multiplica); break;

default:

printf("\n Error "); break;

}

}
 
 

int clasifica(int a, int b, int(*opera)())

{

int y;

y=(*opera(a,b)); /* se apunta a alguna función */

return(y);

}

int sume(int a, int b)

{

return(a+b);

}

int resta(int a, int b)

{

return(a-b);

}

int multiplica(int a, int b)

{

return (a*b);

}


Selecciona un tema