#include <stdio.h>
#include <math.h> /* on va utiliser des fonctions en bibliothèque du C */
#define NB_FCT 4
/* création d'un type "fonction" : */
typedef double T_FONC (double x); /* prototype fréquent dans math.h */
/* prototype de la fonction calculer_deriv (définie plus bas) : */
double calculer_deriv( T_FONC* f, double x ) ;
/*-------------------------------------------------------------------------*/
/* définition complète d'une fonction personnelle */
double ma_fonction(double x)
{
    return 1+x*x*x;
}
/*-------------------------------------------------------------------------*/
/* Exemple de main : calcul des dérivées en x=2 de quatre fonctions stockées dans un tableau de fonctions */
void main(void)
{
    short int i ;
    double der[NB_FCT] ; /* pour stocker les dérivées calculées en x */
    double x = 2. ;
    /* définition et initialisation du tableau de pointeurs de fonctions : */
    T_FONC* fct[NB_FCT] = { ma_fonction, sqrt, exp, sin } ;
    /* calcul des dérivées en x=2 des 4 fonctions : */
    for (i=0 ; i<NB_FCT ; i++) der[i]= calculer_deriv( fct[i], x );
    /* affichage des résultats : */
    for (i=0 ; i<NB_FCT ; i++)
        printf("\n dérivée de la fct %hd en x=%lf : %lf", i+1, x, der[i] );
}
/*-------------------------------------------------------------------------*/
/* définition de la fonction qui calcule la dérivée d'une fonction fournie en paramètre : */
double calculer_deriv( T_FONC* f, double x )
{
    double dx, res;
    dx = 1e-8 * x;
    res = ( (*f)(x+dx) - (*f)(x) ) / dx ;
    return res;
}
