« Mathc gnuplot/Pointeurs de fonctions » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 58 :
** ((*P_f)()) c'est un appel à une fonction.
 
 
== Exemples graphiques (avec Gnuplot) ==
 
* Passer un pointeur de fonctions à une fonction.
 
 
=== Dessiner deux fonctions successivement ===
* La fonction Gplt() dessine f(x) et g(x)...
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c04.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return( pow(x,2.));}
double g(double x){return(2.0*x + 3.0);}
/* ------------------------------ */
void G_plt(
double (*P_f)(double x)
)
{
FILE *fp = fopen("data","w");
double a = -5.0;
 
for(; a <= 5.0; a += 0.3)
fprintf(fp," %6.3f %6.3f\n",a,((*P_f)(a)));
fclose(fp);
}
/* ------------------------------ */
int main(void)
{
printf(" Type: plot \"data\" ");
G_plt(f);
getchar();
 
printf(" Type: plot \"data\" ");
G_plt(g);
 
printf("\n\n Press return to continue.\n");
getchar();
 
return 0;
}
</source>
 
 
=== Solution pour le chapitre précédent ===
* La fonction G_plot() dessine la fonction (data) et la chaîne de caractères...
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c05.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(cos(x));}
char feq[] = "cos(x)";
/* ------------------------------ */
double g(double x){return(sin(x));}
char geq[] = "sin(x)";
/* ------------------------------ */
int G_plot(
double (*P_f)(double x),
char Feq[])
{
FILE *fp;
double a = -5.0;
 
fp = fopen("data","w");
for(; a <= 5.0; a+=.2)
fprintf(fp," %6.3f %6.3f\n",a,((*P_f)(a)));
fclose(fp);
 
fp = fopen("a_main.plt","w");
fprintf(fp," set zeroaxis\n"
" plot \"data\",\\\n"
" %s\n"
" reset",Feq);
fclose(fp);
 
return 0;
}
/* ------------------------------ */
int main(void)
{
printf(" load \"a_main.plt\" with gnuplot ");
G_plot(f,feq);
getchar();
 
printf(" load \"a_main.plt\" with gnuplot ");
G_plot(g,geq);
 
printf("\n\n Press return to continue.\n");
getchar();
 
return 0;
}
 
</source>
 
 
Résultat après le premier appel de G_plot():
 
set zeroaxis
plot "data",\
cos(x)
reset
 
 
Résultat après le deuxième appel de G_plot():
 
set zeroaxis
plot "data",\
sin(x)
reset
 
== Exemple numérique ==
Ligne 211 ⟶ 333 :
.
Press return to continue.
 
 
 
== Exemples graphiques (avec Gnuplot) ==
 
* Passer un pointeur de fonctions à une fonction.
 
 
=== Dessiner deux fonctions successivement ===
* La fonction Gplt() dessine f(x) et g(x)...
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c04.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return( pow(x,2.));}
double g(double x){return(2.0*x + 3.0);}
/* ------------------------------ */
void G_plt(
double (*P_f)(double x)
)
{
FILE *fp = fopen("data","w");
double a = -5.0;
 
for(; a <= 5.0; a += 0.3)
fprintf(fp," %6.3f %6.3f\n",a,((*P_f)(a)));
fclose(fp);
}
/* ------------------------------ */
int main(void)
{
printf(" Type: plot \"data\" ");
G_plt(f);
getchar();
 
printf(" Type: plot \"data\" ");
G_plt(g);
 
printf("\n\n Press return to continue.\n");
getchar();
 
return 0;
}
</source>
 
 
=== Solution pour le chapitre précédent ===
* La fonction G_plot() dessine la fonction (data) et la chaîne de caractères...
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c05.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(cos(x));}
char feq[] = "cos(x)";
/* ------------------------------ */
double g(double x){return(sin(x));}
char geq[] = "sin(x)";
/* ------------------------------ */
int G_plot(
double (*P_f)(double x),
char Feq[])
{
FILE *fp;
double a = -5.0;
 
fp = fopen("data","w");
for(; a <= 5.0; a+=.2)
fprintf(fp," %6.3f %6.3f\n",a,((*P_f)(a)));
fclose(fp);
 
fp = fopen("a_main.plt","w");
fprintf(fp," set zeroaxis\n"
" plot \"data\",\\\n"
" %s\n"
" reset",Feq);
fclose(fp);
 
return 0;
}
/* ------------------------------ */
int main(void)
{
printf(" load \"a_main.plt\" with gnuplot ");
G_plot(f,feq);
getchar();
 
printf(" load \"a_main.plt\" with gnuplot ");
G_plot(g,geq);
 
printf("\n\n Press return to continue.\n");
getchar();
 
return 0;
}
 
</source>
 
 
Résultat après le premier appel de G_plot():
 
set zeroaxis
plot "data",\
cos(x)
reset
 
 
Résultat après le deuxième appel de G_plot():
 
set zeroaxis
plot "data",\
sin(x)
reset