M1102-TD7 Exercice 1

Dans cet exercice un mot est défini comme une suite non vide de lettres (minuscules ou majuscules), de chiffres et ou de caractère “souligné” ‘_’ (underscore).

Ecrire la fonction CompterMots () de profil :

fonction CompterMots (Chaine : in string) renvoie entier_naturel;

Les prédicats suivants sont supposés exister :

fonction IsUpper (Car : in caractere) renvoie booleen;
fonction IsLower (Car : in caractere) renvoie booleen;
fonction IsDigit (Car : in caractere) renvoie booleen;
fonction IsSpace (Car : in caractere) renvoie booleen;

Remarques :

  1. Il ne s’agit pas d’identifier complètement les mots mais seulement de les compter.Or il y a autant de mots que de débuts de mots ! Il suffit donc de compter les débuts de mots.

    Le début d’un mot peut être défini comme une lettre (majuscule ou minuscule), un chiffre ou un ‘_’, précédé par un caractère qui n’est aucun de ces caractères.

  2. Un mot peut commencer au rang 0. Il ne faut donc pas commencer la boucle de traitement au caractère de rang 1. On ne peut pas non plus comparer le premier caractère (de rang 0) avec son prédécesseur.

Il y a donc deux possibilités : soit traiter à part le premier caractère, ce qui est lourd, soit comparer le caractère courant avec son prédécesseur, qui aura été mémorisé dans une variable intermédiaire et qui, pour le rang 0, aura correctement été initialisé.

Comme nous l’avons signalé dans plusieurs exercices précédents, il y a deux approches algorithmiques extrêmement différentes, qui apparaissent clairement dans le cœur des deux algorithmes de haut niveau ci-dessous :

Approche caractère/caractère

....
Se_positionner_en_debut_de_chaine;
pour (chaque_caractere_de_la_chaine)
faire
si (c_est_un_debut_de_mot)
Compter_le_mot;
fsi
Passer_au_caractere_suivant;
ffaire
....

Dans cet approche, la chaîne est vue comme une simple suite de caractères, qui sont donc traités séquentiellement.

Approche mot/mot

....
boucle
Se_positionner_en_debut_de_mot;
si (fin_de_ligne) sortie;
Compter_le_mot;
Passer_a_la_fin_du_mot;
fboucle
....

Dans ce cas, la fonction superpose à la structure physique du tableau vu comme une “suite de caractères”, une structure logique de “suite de mots”.

A faire Ecrire les deux variantes de cette fonction.