// $Id: cor.li012-03.c,v 1.1 2003/04/15 10:11:36 amsili Exp $ #include #define LONG_MOT 22 // Longueur maximale d'un mot #define NB_PREF 21 // Nombre maximal de préfixes pour un mot donné #define MAX 6 // Nombre de mots traités #define NB_PREF_TOTAL 140 // Majorant de MAX * NB_PREF // ---------------------------------------------------------------------- // Question 1 : algo qui, à partir d'une chaîne de caractères s, // affiche à l'écran tous les préfixes possibles de s (non triviaux) void affprefixes(char s []) { int i,j ; for (i=0 ; i= i+1 ; j--) { if (strcmp(t[j],t[j-1])<0) { swap(t, j, j-1) ; changement = 1 ; } } } } // ---------------------------------------------------------------------- // Question 5 : suppression des doublets. // ---------------------------------------------------------------------- // N.B. Ceci ne peut fonctionner que sur un tableau *trié* : alors les // doublets sont voisins. Puisqu'on supprime des éléments, la taille // pertinente du tableau est modifiée, on renvoie la nouvelle valeur. int supprime_doublets(t_tableau_mots t, int n) { int i,j ; for (i=0 ; i= 2) { affprefixes(argv[1]) ; // Question 1 n = stocke_prefixes(argv[1],liste2) ; // Question 2 aff_liste_prefixes(liste2,n) ; // Pour vérifier remplit_tableau_mots(tabs) ; // Pour préparer la qst 3 stocke_prefixes_tab(tabs, tabs_pref) ; // Question 3 printf("Les préfixes trouvés sont :\n") ; aff_tab_liste_pref(tabs_pref,MAX) ; // Pour vérifier // tri(tabs) ; // Question 4 i = fusion(tabs_pref, total_pref, indices) ; // Question 6 m = supprime_doublets(total_pref, i) ; // Question 5 printf("Les préfixes triés et sans doublets sont : \n") ; aff_tableau_mots(total_pref, m) ; // Pour vérifier } }