Previous Next Up Index Contents

Exercice 9.21

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
 /* Déclarations */
 char INTRO[51];/* chaîne pour l'introduction des données */
 char *MOT[10]; /* Tableau de pointeurs sur les 10 chaînes */
 int MAX;       /* indice du prochain candidat à supprimer */
  int I,J;       /* indices courants */
 /* Saisie des données et allocation dynamique de mémoire */
 puts("Introduire 10 phrases terminées chaque fois"
      " par un retour à la ligne :");
 for (I=0; I<10; I++)
     {
      /* Lecture d'une phrase */
      printf("Phrase %d : ",I);
      gets(INTRO);
      /* Réservation de la mémoire */
      MOT[I] = malloc(strlen(INTRO)+1);
      /* S'il y a assez de mémoire, ... */
      if (MOT[I])
           /* copier la phrase à l'adresse */
           /* fournie par malloc,          */
           strcpy(MOT[I], INTRO);
      else
          {
           /* sinon afficher un message d'erreur */
           printf("\aPas assez de mémoire \n");
           /* et quitter le programme. */
           exit(-1);
          }
      }

 /* Suppression des mots du tableau par ordre lexicographique */
 for (I=0; I<10; I++)
     {
      /* Recherche de la dernière chaîne dans l'ordre   */
      /* lexicographique : Initialiser d'abord MAX avec */
      /* l'indice d'une chaîne encore existante. */
      /* Les conditions de la forme MOT[I] ou !MOT[I]   */
      /* contrôlent si la chaîne I a déjà été supprimée */
      /* ou non. */
      for (MAX=0 ; !MOT[MAX] ; MAX++)
           ;
      for (J=MAX; J<10; J++)
           if (MOT[J] && strcmp(MOT[MAX], MOT[J])>0)
               MAX=J;
      /* Suppression de la chaîne */
      free(MOT[MAX]);
      MOT[MAX]=0;
      /* Affichage des mots restants */
      printf("Passage No.%d :\n", I);
      for (J=0; J<10; J++)
           if (MOT[J]) puts(MOT[J]);
      printf("Poussez Enter pour continuer ...\n");
      getchar();
     }
  return 0;
}


Previous Next Up Index Contents

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