#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; }