Previous Next Up Index Contents

Exercice 11.5

a) Supprimer les enregistrements, dont le numéro de matricule se termine par 8

#include <stdio.h>
#include <stdlib.h>
main()
{
  /* Déclarations : */
  /* Noms des fichiers et pointeurs de référence */
  char ANCIEN[]  = "A:\\INFORM.TXT";
  char NOUVEAU[] = "A:\\INFBIS.TXT"; 
  FILE *INFILE, *OUTFILE;
  /* Autres variables */
  char NOM[30], PRENOM[30];
  int MATRICULE;
 
  /* Ouverture de l'ancien fichier en lecture */
  INFILE = fopen(ANCIEN, "r");
   if (!INFILE)
     { 
      printf("\aERREUR: Impossible d'ouvrir "
             "le fichier: %s.\n", ANCIEN);
      exit(-1);
     }
  /* Ouverture du nouveau fichier en écriture */
  OUTFILE = fopen(NOUVEAU, "w");
   if (!OUTFILE)
     { 
      printf("\aERREUR: Impossible d'ouvrir "
             "le fichier: %s.\n", NOUVEAU);
      exit(-1);
     }
  /* Copie de tous les enregistrements à l'exception */
  /* de ceux dont le numéro de matricule se termine  */
  /* par 8. */
  while (!feof(INFILE))
    {
     fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
     if (MATRICULE%10 != 8)
        fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,NOM,PRENOM);
    }
  /* Fermeture des fichiers */
  fclose(OUTFILE);
  fclose(INFILE);
   return 0;
} 

b) Supprimer les enregistrements, dont le prénom est "Paul" (utiliser strcmp)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 main()
{
  /* Déclarations */
  . . .
  /* Ouverture de l'ancien fichier en lecture */
  . . .
  /* Ouverture du nouveau fichier en écriture */
  . . .
  /* Copie de tous les enregistrements à l'exception */
  /* de ceux dont le prénom est 'Paul'. */
  while (!feof(INFILE))
    {
     fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
     if (strcmp(PRENOM,"Paul") != 0)
        fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,NOM,PRENOM);
    }
   /* Fermeture des fichiers */
  . . .
} 

c) Supprimer les enregistrements, dont le nom est un palindrome. Définir une fonction d'aide PALI qui fournit le résultat 1 si la chaîne transmise comme paramètre est un palindrome, sinon la valeur zéro.

#include <stdio.h>
#include <stdlib.h>
main()
{
  /* Prototype de la fonction PALI */
  int PALI(char *CH);
   /* Déclarations */
  . . .
  /* Ouverture de l'ancien fichier en lecture */
   . . .
  /* Ouverture du nouveau fichier en écriture */
  . . .
  /* Copie de tous les enregistrements à l'exception */
  /* des palindromes. */
  while (!feof(INFILE))
    {
     fscanf (INFILE, "%d\n%s\n%s\n", &MATRICULE, NOM, PRENOM);
     if (!PALI(NOM))
        fprintf(OUTFILE, "%d\n%s\n%s\n", MATRICULE,NOM,PRENOM);
    }
   /* Fermeture des fichiers */
  . . .
} 


int PALI(char *CH)
{
 /* Variable locale */
 char *CH2;
 /* Placer CH2 à la fin de la chaîne */
 for (CH2=CH; *CH2; CH2++)
     ;
 CH2--;
 /* Contrôler si la chaîne désignée par CH est un palindrome */
 for (; CH<CH2; CH++,CH2--)
      if (*CH != *CH2) return 0;
 return 1;
}
  


Previous Next Up Index Contents

Feedback - Copyright © 1993,1996,1997 F.Faber