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;
}
Feedback - Copyright © 1993,1996,1997 F.Faber