Introduction au langage C/Pointeurs de fichiers

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Pointeurs de fichiers
Icône de la faculté
Chapitre no 10
Leçon : Introduction au langage C
Chap. préc. :Pointeurs
Chap. suiv. :Pointeurs de fonctions
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Introduction au langage C : Pointeurs de fichiers
Introduction au langage C/Pointeurs de fichiers
 », n'a pu être restituée correctement ci-dessus.

Introduction[modifier | modifier le wikicode]

Quelques 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[modifier | modifier le wikicode]

Créer un fichier list.txt[modifier | modifier le wikicode]

  • 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[modifier | modifier le wikicode]

Créer un fichier de données pour Gnuplot[modifier | modifier le wikicode]

  • 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 | modifier le wikicode]

  • 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 | modifier le wikicode]

  • 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 | modifier le wikicode]

  • 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