« C pointeurs/Pointeurs de fichiers » : 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 = 1
| précédent = [[../|sommaire]]
| suivant = [[../Pointeurs de fonctions/]]
}}
 
== Introduction ==
 
 
Quelques fonctions à connaitre :
 
<source lang="c">
f_p=fopen("a.txt","w");//(write) Créer un fichier en écriture.
f_p=fopen("a.txt","r");//(read) 0uvrir un fichier en lecture.
f_p=fopen("a.txt","a");//(append) 0uvrir un fichier en écriture.
// Rajouter le texte en fin de fichier.
 
printf( "%d",i); // Imprimer sur l'écran.
fprintf(f_p,"%d",i); // Imprimer dans le fichier *f_p
sprintf( s,"%d",i); // Imprimer dans la chaine de caractères s.
</source>
 
 
* Éviter les lettres accentuées dans les fichiers sources (*.c,*.h).
* Cela pose des problèmes pour échanger les fichiers entre Windows et Linux ou à l'international.
 
 
== Premiers fichiers ==
 
=== Un fichier list.txt ===
 
# Copier cet exemple dans votre éditeur.
# Sauvez-le sous le nom "c01.c"
# Compilez et exécutez-le.
# Éditer le fichier "list.txt"
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c01.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(pow(x,2.));}
/* ------------------------------ */
int main(void)
{
FILE *fp; /*Déclarer un pointeur de fichier. */
double a;
/*Ouvrir le fichier en mode écriture.*/
fp = fopen("list.txt","w"); /*fp est un pointeur de fichier */
/*qui pointe sur "list.txt" */
for(a = -5.0; a <= 5.0; a++)
fprintf(fp," %6.3f %6.3f\n",/*Imprimer dans le fichier */
a, f(a));
fclose(fp); /*Fermer le fichier */
 
printf("\n\n Ouvrir le fichier list.txt "
"\n\n Press return to continue. ");
getchar();
return 0;}
</source>
 
 
=== Un fichier de données pour Gnuplot ===
 
Nous ne mettrons pas d'extension pour les fichiers de données avec [[b:Mathc_gnuplot/Introduction|Gnuplot]].
# Compilez et exécutez-ce fichier.
# Éditer le fichier "data"
# Dans [[b:Mathc_gnuplot/Introduction|Gnuplot]]. tapez : plot "data"
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c02.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(pow(x,2.));}
/* ------------------------------ */
int main(void)
{
FILE *fp = fopen("data","w");
double a = -5.0;
 
for(; a <= 5.0; a+=.2)
fprintf(fp," %6.3f %6.3f\n",a,f(a));
fclose(fp);
 
printf(" Dans gnuplot -> plot \"data\" \n\n"
" Press return to continue. \n\n");
getchar();
 
return 0;
}
</source>
 
 
=== Un fichier de commande pour Gnuplot ===
 
L'extension des fichiers de commande de gnuplot est "*.plt"
Ici on dessine deux chaines de caractères.
# Compilez et exécutez-ce fichier.
# Éditer le fichier "a_main.plt"
# Dans [[b:Mathc_gnuplot/Introduction|Gnuplot]] tapez : load "a_main.plt"
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c03.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
char heq[] = "sin(x)";
char geq[] = "cos(x)";
/* ------------------------------ */
int main(void)
{
FILE *fp = fopen("a_main.plt","w");
 
fprintf(fp,"# Fichier de commande pour Gnuplot \n"
"# En ligne de commande : load \"a_main.plt\"\n"
"#\n"
" set zeroaxis\n"
" plot %s,\\\n"
" %s \n\n"
" reset", geq, heq);
fclose(fp);
 
printf("\n\n load \"a_main.plt\" with gnuplot."
"\n\n Press return to continue. ");
getchar();
 
return 0;
}
</source>
 
Cela donne dans le fichier "a_main.plt" :
 
<source lang="gnuplot">
# Fichier de commande pour Gnuplot
# En ligne de commande : load "a_main.plt"
#
set zeroaxis
plot cos(x),\
sin(x)
reset
</source>
 
On peut remarquer que chaque fonction est sur une ligne différente.
Important si l'on veut dessiner quatre ou cinq fonctions.
 
 
=== Dessiner une liste et une chaîne de caractères ===
 
On associe les deux méthodes vues précédemment.
# Compilez et exécutez-ce fichier.
# Éditer le fichier "a_main.plt"
# Dans [[b:Mathc_gnuplot/Introduction|Gnuplot]] tapez : load "a_main.plt"
 
 
<source lang="c">
/* ------------------------------ */
/* Save as c04.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(cos(x));}
/* ------------------------------ */
char feq[] = "cos(x)";
/* ------------------------------ */
int main(void)
{
FILE *fp;
double a = -5.0;
 
fp = fopen("data","w");
for(; a <= 5.0; a+=.2)
fprintf(fp," %6.3f %6.3f\n", a, f(a));
fclose(fp);
 
fp = fopen("a_main.plt","w");
fprintf(fp,"# Fichier de commande pour Gnuplot \n"
"# En ligne de commande : load \"a_main.plt\"\n"
"#\n"
" set zeroaxis\n"
" plot \"data\",\\\n"
" %s\n"
" reset",feq);
fclose(fp);
 
printf("\n\n load \"a_main.plt\" with gnuplot."
"\n\n Press return to continue. ");
getchar();
 
return 0;
}
</source>
 
Cela donne dans le fichier "a_main.plt" :
 
<source lang="gnuplot">
# Fichier de commande pour Gnuplot
# En ligne de commande : load "a_main.plt"
#
set zeroaxis
plot "data",\
cos(x)
reset
</source>
 
 
=== Une fonction graphique ===
 
On met simplement le contenu de la fonction main() dans G_plot().
# Compilez et exécutez-ce fichier..
# Éditer le fichier "a_main.plt"
# Dans [[b:Mathc_gnuplot/Introduction|Gnuplot]] tapez : load "a_main.plt"
 
 
<source lang="c">
//* ------------------------------ */
/* Save as c05.c */
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
double f(double x){return(cos(x));}
char feq[] = "cos(x)";
/* ------------------------------ */
int G_plot(void)
{
FILE *fp;
double a = -5.0;
 
fp = fopen("data","w");
for(; a <= 5.0; a+=.2)
fprintf(fp," %6.3f %6.3f\n",a,f(a));
fclose(fp);
 
fp = fopen("a_main.plt","w");
fprintf(fp,"# Fichier de commande pour Gnuplot \n"
"# En ligne de commande : load \"a_main.plt\"\n"
"#\n"
" set zeroaxis\n"
" plot \"data\",\\\n"
" %s\n"
" reset",feq);
fclose(fp);
 
return 0;
}
/* ------------------------------ */
int main(void)
{
G_plot();
 
printf("\n\n load \"a_main.plt\" with gnuplot."
"\n\n Press return to continue. ");
getchar();
 
return 0;
}
</source>
 
Cela donne dans le fichier "a_main.plt" :
 
<source lang="gnuplot">
# Fichier de commande pour Gnuplot
# En ligne de commande : load "a_main.plt"
#
set zeroaxis
plot "data",\
cos(x)
reset
</source>
 
 
== Génération de code C automatisé ==
 
* Voici un type de code qui peut-être créer par une boucle for(:); et copier dans un fichier.
 
<source lang="c">
P0.x * pow((1-t),3) * pow(t,0) +
3 * P1.x * pow((1-t),2) * pow(t,1) +
3 * P2.x * pow((1-t),1) * pow(t,2) +
P3.x * pow((1-t),0) * pow(t,3)
</source>
 
* Il suffit ensuite de le copier dans le fichier c.
 
=== Un exemple ===
 
* La création de polynômes pour les courbes de Bézier
** Ce travail est trop complexe pour être abordé ici.
** Vous pouvez le voir dans cette '''[http://www.dailymotion.com/video/x9831y_c13b4_tech vidéo]'''.
** Vous pouvez retrouver les fichiers correspondant ici : '''[https://docs.google.com/file/d/0B-KoQAOnU4FncklGVG1adnFGM1k/edit?usp=sharing fichiers]'''.
** Pour une initiation aux courbes de Bézier c'est ici : '''[[Mathc_Home_Edition_c13/Courbes_de_béziers|Courbes_de_béziers]]'''
 
{{Bas de page
| idfaculté = informatique
| précédent = [[../|sommaire]]
| suivant = [[../Pointeurs de fonctions /]]
}}