Par exemple, on peut passer de CHAUD à FROID
de cette manière :
CHAUD
CHAUT
HAUT
FAUT
FAIT
LAIT
LAID
LAIDE
RAIDE
ROIDE
FROIDE
FROID
On trouve ici 10 intermédiaires. Pouvez-vous
faire mieux ?Exercez-vous avec les problèmes suivants en tentant de faire la liaison avec le moins d'intermédiaires possibles.
Dans la même revue, P. Berloquin parle de
pondérer les proverbes français en associant à
chaque lettre de la phrase un nombre correspondant à sa
place, ce nombre restant identique si la lettre est répétée.
Il donne l'exemple suivant :
A B O N C H A T B O N R A T
1 2 3 4 5 6 1 7 2 3 4 8 1 7
Le total donne 54. Il obtient alors le poids du proverbe
en divisant ce nombre par le nombre de lettre du proverbe. Ici :
54/14 = 3,85.
Quel est le proverbe français le plus léger ?
Le plus lourd ?
[Ajout 1997: Merci à Olivier Miakinen que m'a fait parvenir ce programme C calculant le poids de mots.]
#include#include #define MAXLINE 1000 typedef struct { int ordre; /* ordre d'apparition d'une lettre */ int nombre; /* nombre d'apparitions de cette lettre */ } compte_t; /* * Cette fonction retourne le numero d'ordre de la lettre (0 pour A ou a, * 1 pour B ou b, etc., jusqu'a 25 pour Z ou z) ou -1 si ce n'est pas une * lettre (espace, signe de ponctuation, etc.) */ int lettre_index(char lettre) { if ((lettre >= 'A') && (lettre <= 'Z')) return (lettre - 'A'); if ((lettre >= 'a') && (lettre <= 'z')) return (lettre - 'a'); return -1; } main() { while (1) { char readline[MAXLINE]; char *cp; int index; int ordre = 0; /* ordre d'apparition de la derniere lettre */ int nombre = 0; /* nombre de lettres au total */ compte_t compte[26]; double poids = 0; printf("-> "); if (gets(readline) == NULL) { printf("\nErreur %d. Bye\n", errno); exit(1); } /* Remise a zero du comptage */ for (index = 0; index < 26; index++) { compte[index].ordre = 0; compte[index].nombre = 0; } /* Nouveau comptage */ for (cp = readline; *cp != '\0'; cp++) { index = lettre_index(*cp); if (index < 0) { /* Espace ou signe de ponctuation */ continue; } if (compte[index].nombre == 0) { /* C'est la premiere fois que cette lettre apparait */ ordre++; compte[index].ordre = ordre; } compte[index].nombre++; nombre++; } if (nombre == 0) { printf("Pas de lettre. Bye.\n"); exit(0); } /* Calcul du poids */ for (index = 0; index < 26; index++) { poids += compte[index].nombre * compte[index].ordre; } poids /= nombre; printf("Nombre de lettres = %d\n", nombre); printf("Poids = %f\n", poids); } }