« C pointeurs/Tableau de pointeurs de fonctions » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Page blanchie
Ligne 1 :
{{Chapitre
| niveau = 14
| idfaculté = informatique
| numéro = 3
| précédent = [[../Pointeurs de fonctions/]]
| suivant = [[../Tableau de pointeurs de fonctions 2/]]
}}
 
 
= Introduction =
 
* Nous avons des fonctions de mêmes prototypes.
* Nous voulons les associer pour pouvoir les manipuler dans des boucles.
* Nous allons créer un '''tableau de pointeurs de fonctions'''.
 
* Le tableau de pointeurs de fonctions doit être déclaré avec un prototype de la même forme que celui des fonctions.
 
 
= Tableau de pointeurs de fonctions =
 
 
== Les fonctions trigonométriques ==
 
Nous allons utiliser les fonctions trigonométriques du C.
 
 
=== Déclaration du tableau ===
 
<source lang="c">
double (*TrigF[6])(double x) = {cos,sin,tan,atan,asin,acos};
</source>
 
* Toutes les fonctions ont la même forme : <tt>double ''fonction''(double)</tt>.
* Le tableau à la même forme que les fonctions : <tt>double ''tableau''(double)</tt>.
* Il y a six fonctions : cos, sin, tan, atan, asin, acos.
 
 
=== Exemple d'un appel ===
 
<source lang="c">
cos(.5) == TrigF[0](.5)
</source>
 
 
=== Exemple à tester ===
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c01.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
int main(void)
{
double (*TrigF[6])(double x) = {cos,sin,tan,atan,asin,acos};
 
double x= .5;
int i= 0;
 
printf(" Nous avons declare un tableau "
" de pointeurs de fonctions.\n "
" J'ai utilise ici les fonctions predefinie du c.\n");
 
printf(" cos(%.1f) = %.3f \n", x, cos(x));
printf(" TrigF[%d](%.1f)) = %.3f\n\n",i,x,TrigF[i](x));
 
printf(" Press return to continue");
getchar();
 
return 0;
}
</source>
 
 
== Application ==
 
* Créer un tableau de valeurs des fonctions trigonométriques.
* Imprimer le résultat dans cette ordre (sin,cos,tan,acos,asin,atan)
* Pour .1 <= x <+ .5
 
 
=== Avec le résultat à l'écran ===
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c03.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
int main(void)
{
double (*TrigF[6])(double x) = {atan,asin,acos,tan,cos,sin};
 
int i= 6;
double x= .1;
 
for(;x<=.5;x+=.1)
{
printf("\n");
for(i=6;i;) printf(" %.3f ",TrigF[--i](x));
}
 
printf("\n\n Press return to continue.\n");
getchar();
 
return 0;
}
</source>
 
 
Le résultat :
 
x || sin cos tan acos asin atan
0.1 || 0.100 0.995 0.100 1.471 0.100 0.100
0.2 || 0.199 0.980 0.203 1.369 0.201 0.197
0.3 || 0.296 0.955 0.309 1.266 0.305 0.291
0.4 || 0.389 0.921 0.423 1.159 0.412 0.381
0.5 || 0.479 0.878 0.546 1.047 0.524 0.464
 
 
Remarques :
* Attention à l'ordre des fonctions dans la déclaration du tableau.
* double (*TrigF[6])(double x) = {'''atan,asin,acos,tan,cos,sin'''};
 
 
Au démarrage :
* La décrémentation ce fait dans le tableau. '''TrigF[--i](x)'''
* Il entre 6 dans le tableau.
* 6 est décrémenté -> 5 (avant l'appel de la fonction '''--i''')
* La sixième fonctions est appelé (Sin).
* La numéro cinq. :)
 
 
Au final :
* Il entre '''UN''' dans le tableau.
* '''UN''' est décrémenté -> 0
* La première fonctions est appelé (atan).
* La numéro zéro. :))
 
 
* i est égal à zéro en rentrant dans la boucle.
* Le cycle est cassé. :(
 
 
=== Avec le résultat dans un fichier ===
 
 
* Déclarer le pointeur de fichiers.
** FILE *fp;
* Ouvrir le fichier.
** fp = fopen("list.txt","w");
* Fermer le fichiers
** fclose(fp);
* Remplacer tout les '''printf(''' par '''fprintf(fp,'''
** fprintf(fp,
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c02.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
int main(void)
{
FILE *fp = fopen("list.txt","w");
 
double (*TrigF[6])(double x) = {atan,asin,acos,tan,cos,sin};
 
int i= 6;
double x= .1;
 
fprintf(fp," x || sin cos tan acos asin atan \n");
 
for(;x<=.5;x+=.1)
{
fprintf(fp," %.1f ||",x);
for(i=6;i;)
fprintf(fp," %.3f ",TrigF[--i](x));
fprintf(fp,"\n");
}
 
fclose(fp);
 
printf("\n\n Ouvrir le fichier list.txt\n");
getchar();
 
return 0;
}
</source>
 
 
{{Bas de page
| idfaculté = informatique
| précédent = [[../Pointeurs de fonctions/]]
| suivant = [[../Tableau de pointeurs de fonctions 2/]]
}}