Mathc initiation/a37a

Un livre de Wikilivres.

Sommaire


En langage C, le nom d'une fonction est un pointeur. Cela représente une adresse. Une adresse est représentée par un nombre. Si ce nombre est 123456 cela veut dire que si je vais à l'adresse 123456 et que je commence à exécuter les commandes en assembleur en fait j'exécute la fonction.

On peut utiliser ce pointeur comme argument dans l'appel d'une fonction.

Exemple :

  • G_plot(f); (f() étant une fonction)
  • G_plot(g); (g() étant une fonction)
  • G_plot(h); (h() étant une fonction)

La fonction graphique G_plot(); peut donc dessiner les fonctions f, g, h.


Déclarer les pointeurs de fonctions :

Un pointeur de fonction doit avoir les mêmes arguments que les fonctions qui vont l'utiliser.

  • Pour les fonctions de type f(x) :
  
double      f(double x){return( pow(x,2.));}
double (*P_f)(double x)
  • Pour les fonctions de type g(x,y) :
double      g(double x,double y){return(x*y;}
double (*P_g)(double x,double y)

Exemple :

  • Déclaration de la fonction Dx_1(); qui calculera les dérivées premières des fonctions de la forme f(x) :
double Dx_1(
double (*P_f)(double x),/* Declaration de pointeur de fonction */
double a,
double h
)

Pour appeler les fonctions dans le code, nous utiliserons cette méthode :

  • Pour les fonction en x :
((*P_f)(a)) /* corresponds à un appel de fonction de forme f(a). */
  • Pour les fonction en x,y :
((*P_g)(a,b)) /* corresponds à un appel de fonction de forme g(a,b). */

Exemple :

  • Le code de la fonction Dx_1(); qui calculera les dérivées premières des fonctions de la forme f(x) :
{
 return( ( ((*P_f)(a+h))-((*P_f)(a-h)) ) / (2.*h) );
}
  • Qui correspond à cet algorithme :
 f'(a) = f(a+h) - f(a-h)
          -------------
              2h

Remarque :

  • f et g sont des pointeurs et f() et g() sont des fonctions.
  • double (*P_f)(double x); c'est une déclaration de pointeur de fonction.
  • ((*P_f)(a)); c'est un appel à une fonction. Par exemple f(a);


  • P_f, f, g, ce sont des pointeur.
  • On pourrait écrire P_f = g; alors G_plot(P_f); serait égal à G_plot(g);