Introduction au langage C/Pointeurs de fichiers

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

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

Cré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

modifier

Cré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