#include <stdio.h> #include <stdlib.h> main() { /* Prototypes des fonctions appelées */ int PALI(char *CH); int LONG_CH(char *CH); /* Déclarations : */ /* Nom du fichier et pointeur de référence */ char NOM_FICH[] = "A:\\MOTS.TXT"; FILE *FICHIER; /* Autres variables */ char CHAINE[50]; int N_PALI; /* nombre de palindromes */ int N_MOTS; /* nombre de mots */ int L_TOT; /* longueur totale de tous les mots */ /* Ouverture du nouveau fichier en écriture */ FICHIER = fopen(NOM_FICH, "r"); if (!FICHIER) { printf("\aERREUR: Impossible d'ouvrir " "le fichier: %s.\n", NOM_FICH); exit(-1); } /* Compter les palindromes et accumuler */ /* les longueurs des mots. */ L_TOT =0; N_PALI=0; N_MOTS=0; while (!feof(FICHIER)) { fscanf(FICHIER, "%s\n", CHAINE); N_MOTS++; L_TOT += LONG_CH(CHAINE); N_PALI += PALI(CHAINE); } /* Fermeture du fichier */ fclose(FICHIER); /* Affichage des résultats */ printf("Le fichier %s contient :\n", NOM_FICH); printf("\t%d \tmots d'une longueur moyenne de :\n", N_MOTS); printf("\t%.1f \tcaractères et\n", (float)L_TOT/N_MOTS); printf("\t%d \tpalindromes\n", N_PALI); return 0; } int PALI(char *CH) { /* Variable locale */ char *CH2; /* Placer CH2 à la fin de la chaîne */ for (CH2=CH; *CH2; CH2++) ; CH2--; /* Contrôler si la chaîne désignée par CH est un palindrome */ for (; CH<CH2; CH++,CH2--) if (*CH != *CH2) return 0; return 1; } int LONG_CH(char *CH) { char *P; for (P=CH ; *P; P++) ; return P-CH; }