#include <stdio.h> #include <stdlib.h> #include <string.h> main() { /* Déclarations : */ /* Noms des fichiers et pointeurs de référence */ char ANCIEN[] = "A:\\MOTS.TXT"; char NOUVEAU[] = "A:\\MOTS_TRI.TXT"; FILE *INFILE, *OUTFILE; /* Tableau de pointeurs */ char *TAB[50]; /* Autres variables */ char CHAINE[50]; char *AIDE; /* pour la permutation */ int N_MOTS; /* nombre de mots du fichier */ int I; /* ligne à partir de laquelle TAB est trié */ int J; /* indice courant */ int FIN; /* ligne où la dernière permutation a eu lieu */ /* permet de ne pas trier un sous-ensemble déjà trié */ /* Ouverture de l'ancien fichier en lecture */ INFILE = fopen(ANCIEN, "r"); if (!INFILE) { printf("\aERREUR: Impossible d'ouvrir " "le fichier: %s.\n", ANCIEN); exit(-1); } /* Initialisation du du compteur des mots */ N_MOTS = 0; /* Lecture du fichier dans la mémoire centrale */ while (!feof(INFILE)) { fscanf (INFILE, "%s\n", CHAINE); /* Réservation de la mémoire */ TAB[N_MOTS] = malloc(strlen(CHAINE)+1); if (TAB[N_MOTS]) strcpy(TAB[N_MOTS], CHAINE); else { printf("\aPas assez de mémoire \n"); exit(-1); } N_MOTS++; } /* Fermeture du fichier */ fclose(INFILE); /* Tri du tableau par propagation de l'élément maximal. */ for (I=N_MOTS-1 ; I>0 ; I=FIN) { FIN=0; for (J=0; J<I; J++) if (strcmp(TAB[J],TAB[J+1])>0) { FIN=J; AIDE = TAB[J]; TAB[J] = TAB[J+1]; TAB[J+1] = AIDE; } } /* Ouverture du nouveau fichier en écriture */ OUTFILE = fopen(NOUVEAU, "w"); if (!OUTFILE) { printf("\aERREUR: Impossible d'ouvrir " "le fichier: %s.\n", NOUVEAU); exit(-1); } /* Copie du tableau dans le nouveau fichier */ for (I=0; I<N_MOTS; I++) fprintf(OUTFILE, "%s\n", TAB[I]); /* Fermeture du fichier */ fclose(OUTFILE); return 0; }