M1102-TD7 Exercie2 Corrigé

fonction isupper (Car : in caractere) renvoie booleen
debut
renvoie ('A' <= Car ET_ALORS Car <= 'Z');
fin

fonction islower (Car : in caractere) renvoie booleen
debut
renvoie ('a' <= Car ET_ALORS Car <= 'z');
fin

fonction isdigit (Car : in caractere) renvoie booleen
debut
renvoie ('0' <= Car ET_ALORS Car <= '9');
fin

fonction CarDeMot (Car : in caractere) renvoie booleen
debut
renvoie (islower (Car) OU_SINON isupper(Car) OU_SINON isdigit (Car) OU_SINON Car vaut '_');
fin

fonction DebutMot (Car : in caractere) renvoie booleen
debut
renvoie (islower (Car) OU_SINON isupper(Car));
fin

//approche mot/mot
//fonction CompterNbMots (Chaine : in string) renvoie entier_naturel
//debut
//	declarer Cpt : entier_naturel;
//	Cpt <- 0;
//	declarer i : entier_naturel;
//	i <- 0;
//
//	boucle
//		//on se positionne sur le début du prochain mot
//		//seul le predicat change par rapport a l'exercice 1
//		tant_que ((i < taille (Chaine)) ET_ALORS  (NON DebutMot (Chaine [i])))
//		faire
//			i <- i + 1;
//		ffaire
//		si (i vaut taille (Chaine)) sortie;
//
//		//si on ne sort pas, c'est qu'on est sur le debut d'un mot
//		Cpt <- Cpt + 1;
//
//		//on passe le mot courant
//		tant_que (i < taille (Chaine) ET_ALORS CarDeMot (Chaine [i]))
//		faire
//			i <- i + 1;
//		ffaire
//	fboucle
//
//	renvoie Cpt;
//fin

//approche caractere/caractere
fonction CompterNbMots (Chaine : in string) renvoie entier_naturel
debut
declarer Cpt : entier_naturel;
Cpt <- 0;
declarer EstDansMot : booleen;
EstDansMot <- faux;

pour (i variant_de 0 a taille (Chaine) -1)
faire
//on identifie le debut d'un nouveau mot
si (NON EstDansMot ET_ALORS DebutMot (Chaine [i]))
Cpt <- Cpt + 1;
EstDansMot <- vrai;
//on identifie la fin du mot courant
sinon_si (EstDansMot ET_ALORS NON CarDeMot (Chaine [i]))
EstDansMot <- faux;
fsi
ffaire
renvoie Cpt;
fin

algorithme ComptageDeMots
debut
declarer LigneLue : string;
boucle
afficher ("Entrer une ligne : ");
saisir (LigneLue);
si (0 vaut taille (LigneLue)) sortie;
afficher (LigneLue);
ligne_suivante;
afficher ("Nombre de mots de la ligne :", CompterNbMots (LigneLue));
ligne_suivante;
fboucle
fin