Introduction au langage C/Pointeurs de fichiers
Introduction
modifierQuelques fonctions à connaitre :
f_p=fopen("a.txt", "w"); // (w rite) Créer et ouvrir un fichier en écriture.
f_p=fopen("a.txt", "r"); // (r ead) 0uvrir un fichier en lecture.
f_p=fopen("a.txt", "a"); // (a ppend) 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.
Premier exemple
modifierCréer un fichier list.txt
modifier- Testé sous Code Block (Windows,Linux).
/* ------------------------------ */
#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;
fp = fopen("list.txt","w"); /* Ouvrir le fichier en mode écriture. */
/* 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");
printf("\n\n Press return to continue.\n");
getchar();
return 0;
}
Fichier pour Gnuplot
modifierCréer un fichier de données pour Gnuplot
modifier- Je ne mets pas d'extension pour les fichiers de données avec gnuplot.
- Cette fois je vérifie si fopen() ne renvoie pas NULL (0).
/* ------------------------------ */
#include <stdio.h>
/* ------------------------------ */
/* ------------------------------ */
double f(double x){return(x*x);}
/* ------------------------------ */
int main(void)
{
FILE *fp;
double a;
if (!(fp = fopen("data","w"))) return 0; /* Si le pointeur est NULL stop */
for(a = -5.0; a <= 5.0; a++)
fprintf(fp," %6.3f %6.3f\n", a, f(a));
fclose(fp);
printf(" Dans gnuplot -> plot \"data\" ");
printf("\n\n Press return to continue.\n");
getchar();
return 0;
}
Créer un fichier de commande pour Gnuplot
modifier- Je vérifie la création de pointeur avec une seconde méthode.
- J'utilise l'extension plt pour les fichiers de commande comme les exemples fournis par Gnuplot.
/* ------------------------------ */
#include <stdio.h>
#include <math.h>
/* ------------------------------ */
/* ------------------------------ */
char heq[] = "sin(x)";
char geq[] = "cos(x)";
/* ------------------------------ */
int main(void)
{
FILE *fp;
if ((fp = fopen("a_main.plt","w")) == NULL) return 0;
fprintf(fp,"# Fichier de commande pour Gnuplot \n");
fprintf(fp,"# En ligne de commande : load \"a_main.plt\"\n");
fprintf(fp,"#\n\n");
fprintf(fp," set zeroaxis\n"); /* Dessiner les axes */
fprintf(fp," plot %s,\\\n", geq); /* Dessiner g */
fprintf(fp," %s \n\n", heq); /* Dessiner h */
fprintf(fp," reset"); /* Réinitialiser gnuplot */
fclose(fp);
printf("\n\n Open the file \"a_main.plt\" with gnuplot.\n");
printf("\n\n Press return to continue.\n");
getchar();
return 0;
}
Cela donne dans le fichier "a_main.plt" :
# Fichier de commande pour Gnuplot
# En ligne de commande : load "a_main.plt"
#
set zeroaxis
plot cos(x),\
sin(x)
reset
- On peut remarquer que chaque fonction est sur une ligne différente.
- Important si l’on veut dessine quatre ou cinq fonctions.
Génération de code C automatisé
modifier- Voici un type de code qui peut-être créer par une boucle for(:); et copier dans un fichier.
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)
- Il suffit ensuite de le copier dans le fichier c.
Un exemple
modifier- 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 vidéo. Vous pouvez retrouver les fichiers correspondant ici : fichiers. Pour une initiation aux courbes de Bézier c’est ici : Courbes_de_béziers