Previous Next Up Index Contents

Exercice 11.13

#include <stdio.h>
main()
{
  /* Prototype de la fonction FIN_PHRASE */
  int SEPA(char C);
   /* Déclarations : */
  /* Noms des fichiers et pointeurs de référence */
  char NOM_FICH[30]; 
  FILE *FICHIER;

  /* Autres variables */
  char C;       /* caractère lu dans le fichier */
  int ABC[26];  /* compteurs des lettres de l'alphabet */
   int NTOT;     /* nombre total des caractères */
  int NAUTRES;  /* nombre des caractères qui ne font pas
                   partie de l'alphabet */
  int NMOTS;    /* nombre des mots */
  int NPARA;    /* nombre de paragraphes (retours à la ligne) */
  int I;        /* indice d'aide */
  int DANS_MOT; /* indicateur logique: */
                /* vrai si la tête de lecture se trouve */
                /* actuellement à l'intérieur d'un mot. */
  
  /* Ouverture de l'ancien fichier en lecture */
  do
    {
     printf("Nom du fichier texte : ");
     scanf("%s", NOM_FICH);
     FICHIER = fopen(NOM_FICH, "r"); 
      if (!FICHIER) 
         printf("\aERREUR: Impossible d'ouvrir "
                "le fichier: %s.\n", NOM_FICH);
    }
  while (!FICHIER);
  /* Initialisations des variables */
  for (I=0; I<26; I++)
      ABC[I]=0;
   NTOT    =0;
  NAUTRES =0;
  NMOTS   =0;
  NPARA   =0;
  DANS_MOT=0;
  /* Examination des caractères du fichier */
  while (!feof(FICHIER))
     {
      C=fgetc(FICHIER);
      if (!feof(FICHIER))
         {
          /* Comptage au niveau caractères */
          if (C=='\n')
             NPARA++;
          else
             {
              NTOT++;
              if (C>='a' && C<='z')
                 ABC[C-'a']++;
              else if (C>='A' && C<='Z')
                 ABC[C-'A']++;
              else
                 NAUTRES++;
             }
 

          /* Comptage des mots */
          if (SEPA(C))
             {
              if (DANS_MOT)
                 {
                  NMOTS++;
                  DANS_MOT=0;
                 }
             }
          else
             DANS_MOT=1;
         }
      }
   /* Fermeture du fichier */
  fclose(FICHIER);
   /* Affichage du résultat */
  printf("Votre fichier contient :\n");
  printf("\t%d paragraphes\n", NPARA);
  printf("\t%d mots\n", NMOTS);
  printf("\t%d caractères\ndont\n", NTOT);
  for (I=0; I<26; I++)
       printf("\t%d fois la lettre %c\n", ABC[I], 'a'+I);
  printf("et %d autres caractères\n", NAUTRES);
  return 0;
} 


int SEPA(char C)
{
 /* Tableau contenant tous les séparateurs de mots */
 char SEP[12] = { '\n', ' ', ',', ';', '.', ':',
                 '?', '!', '(', ')', '"', '\'' };
 int I;
  
 /* Comparaison de C avec tous les éléments du tableau */
 for (I=0 ; C!=SEP[I] && I<12 ; I++) ;
 if (I==12)
     return 0;
 else
     return 1;
  /* ou bien simplement : */
 /* return (I != 12);    */
}


Previous Next Up Index Contents


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