M1102 TD5 Exercice 2

Ecrire les prédicats suivants :

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

Ces prédicats renvoient vrai si le caractère qui leur est passé en paramètre est respectivement une majuscule, une minuscule ou un chiffre décimal (de '0' à '9').
Ecrire le prédicat IsSpace (), qui renvoie vrai si le caractère passé en paramètre est un caractère d’espacement (espace, tabulation ou retour à la ligne).

M1102-TD5 Exercie2 Corrigé

fonction TrouveCarDansStr (Caract : in caractere, 
                           Chaine : in string, 
                           Debut  : in entier_naturel) renvoie entier_naturel
debut
	declarer i : entier_naturel;
	i <- Debut;
	tant_que (i < taille(Chaine) ET_ALORS Caract ne_vaut_pas Chaine [i])
	faire
		i <- i +1;
	ffaire
	renvoie i;
fin

algorithme ComptagePetitEnsemble
debut
	declarer KStrVoy : constante string <- "aeiouy";
	
	declarer TabCpt : tableau_de taille (KStrVoy) entier_naturel;
	pour (i variant_de 0 a taille (TabCpt) - 1)
	faire
		TabCpt [i] <- 0;
	ffaire
	
	declarer Chaine : string;
	afficher ("Veuillez saisir une chaine de caractères : ");
	saisir (Chaine);
	
	//comptage
	pour (i variant_de 0 a taille (Chaine) -1)
	faire
		declarer Pos : entier_naturel;
		Pos <- TrouveCarDansStr (Chaine [i], KStrVoy, 0);
		si (Pos vaut taille (KStrVoy)) continue;
		TabCpt [Pos] <- TabCpt [Pos] + 1;
	ffaire
	
	//nb total d'occurence
	declarer Somme : entier_naturel;
	Somme <- 0;
	pour (i variant_de 0 a taille (TabCpt) - 1)
	faire
		Somme <- Somme + TabCpt [i];
	ffaire
	
	//affichage final
	pour (i variant_de 0 a taille (KStrVoy) -1)
	faire
		afficher ("Le caractère ", KStrVoy [i], " apparait ", TabCpt [i], " fois en absolu et ", TabCpt [i]*100 / Somme, "% en relatif");
		ligne_suivante;
	ffaire
fin

M1102 TD5 Exercice 3

Ecrire la fonction CompterDoublons () présentée ci-dessous. Les “règles du jeu” (les spécifications) sont les suivantes :

  1. un doublon est une suite de deux caractères consécutifs (deux éléments dont les rangs diffèrent d’une unité) identiques.
  2. trois caractères consécutifs identiques constituent deux doublons.

Les doublons de caractères d’espacement  ne sont pas comptabilisés.
Lorsque le caractère courant est de rang i, il y a deux façons de tester s’il appartient à un doublon :

  1. soit en testant le caractère de rang précédent (de rang i - 1), dans ce cas, le premier élément ne peut être comparé avec son prédécesseur. Il faut donc commencer les comparaisons à l’élément de rang 1.
  2. soit en testant le caractère de rang suivant (de rang i + 1), dans ce cas, le dernier élément ne peut être comparé avec son successeur. Il faut donc terminer les comparaisons par l’avant-dernier élément.

Ecrire une version de la fonction CompterDoublons() en utilisant une boucle pour, puis une autre en utilisant une boucle tant_que.

M1102-TD5 Exercie3 Corrigé

fonction isspace (C : in caractere) renvoie booleen
debut
renvoie (C vaut ' ' OU_SINON C vaut '\t' OU_SINON C vaut '\n');
fin

//variante avec une boucle pour
//fonction CompterDoublonsV0 (Chaine : in string) renvoie entier_naturel
//debut
//
//	si (taille(Chaine) < 2) renvoie 0;
//
//	declarer Compt : entier_naturel;
//    Compt <- 0;
//
//	pour (i variant_de 1 a taille (Chaine) - 1)
//	faire
//		si (isspace (Chaine [i])) continue;
//		si (Chaine [i] vaut Chaine [i-1])
//			Compt <- Compt + 1;
//		fsi
//	ffaire
//
//  renvoie Compt;
//fin

//variante en utilisant une boucle tant_que
fonction CompterDoublonsV0 (Chaine : in string) renvoie entier_naturel
debut

si (taille(Chaine) < 2) renvoie 0;

declarer Compt : entier_naturel;
Compt <- 0;

declarer i : entier_naturel;
i <- 1;

tant_que (i < taille (Chaine))
faire
si (NON isspace (Chaine [i]) ET_ALORS Chaine [i] vaut Chaine [i-1])
Compt <- Compt +1;
fsi
i <- i + 1;
ffaire

renvoie Compt;
fin

algorithme Nb_de_Doublons
debut

boucle
// Saisie

declarer LigneLue : string;
afficher ("Entrer une string (ligne vide pour sortir) : ");
saisir (LigneLue);

si (taille (LigneLue) vaut 0) sortie;

// La ligne traitée est non vide
// Comptage
declarer NbreDoublons : entier_naturel;

NbreDoublons <- CompterDoublonsV0 (LigneLue);

// Affichage
afficher (LigneLue);
ligne_suivante;
afficher ("Nombre de doublons : ", NbreDoublons);
ligne_suivante;
fboucle

fin

M1102-TD4 Exercice1

Ecrire la fonction TrouveCarDansStr () de profil :

fonction TrouveCarDansStr (Caract : in caractere, 
                           Chaine : in string, 
                           Debut  : in entier_naturel) renvoie entier_naturel;

Cette fonction renvoie l’indice de la première occurrence de Caract dans Chaine, à partir de l’indice Debut. Si Caract n’a pas été trouvé, la fonction renvoie la taille de Chaine.

M1102-TD4 Exercie1 Corrigé

fonction TrouveCarDansStr (Caract : in caractere,
Chaine : in string,
Debut  : in entier_naturel) renvoie entier_naturel
debut
declarer i : entier_naturel;
i <- Debut;
tant_que (i != taille(Chaine) ET_ALORS Caract ne_vaut_pas Chaine [i])
faire
i <- i +1;
ffaire
renvoie i;
fin

algorithme TestDeTrouveCarDansStr
debut
declarer Str : string;
Str <- "Salut ca va?";

afficher (TrouveCarDansStr ('a', Str, 0));
ligne_suivante;
afficher (TrouveCarDansStr ('a', Str, 3));
ligne_suivante;
afficher (TrouveCarDansStr ('a', Str, 6));
ligne_suivante;
afficher (TrouveCarDansStr ('b', Str, 6));
ligne_suivante;
fin

M1102-TD4 Exercice2

Le but de cet exercice est d’afficher le nombre d’occurrences d’un caractère dans une chaîne de caractères. Pour cela :

  • écrire la fonction ComptCaract() qui compte le nombre d’occurrences d’un caractère passé en paramètre, dans une chaîne de caractères passées également en paramètre ; pour cela, parcourir la chaîne caractère par caractère et incrémenter le nombre d’occurrence quand il le faut ;
  • écrire l’algorithme qui teste cette fonction.

M1102-TD4 Exercie2 Corrigé

fonction ComptCarac (Caract : in caractere,
Chaine : in string) 	renvoie entier_naturel
debut
declarer Cpt : entier_naturel;
Cpt <- 0;

pour (i variant_de 0 a taille (Chaine) -1)
faire
si (Caract vaut Chaine [i])
Cpt <- Cpt + 1;
fsi
ffaire

renvoie Cpt;
fin

algorithme TestComptCarac
debut
declarer Str : string;
Str <- "Salut ca va?";

afficher ("on trouve ", ComptCarac ('a', Str), " fois la lettre 'a' dans ", Str);
ligne_suivante;
afficher ("on trouve ", ComptCarac ('b', Str), " fois la lettre 'b' dans ", Str);
ligne_suivante;
fin

M1102-TD4 Exercice3

Le but de cet exercice est d’afficher le nombre d’occurrences d’un caractère dans une chaîne de caractères. Pour cela :

  • écrire la fonction ComptCaract() qui compte le nombre d’occurrences d’un caractère passé en paramètre, dans une chaîne de caractères passées également en paramètre ; pour cela, utiliser la fonction TrouveCarDansStr ();
  • utiliser l’algorithme précédent qui teste cette fonction.

M1102-TD4 Exercie3 Corrigé

fonction TrouveCarDansStr (Caract : in caractere,
Chaine : in string,
Debut  : in entier_naturel) renvoie entier_naturel
debut
declarer i : entier_naturel;
i <- Debut;
tant_que (i < taille(Chaine) ET_ALORS Caract ne_vaut_pas Chaine [i])
faire
i <- i +1;
ffaire
renvoie i;
fin

fonction ComptCarac (Caract : in caractere,
Chaine : in string) 	renvoie entier_naturel
debut
declarer Cpt : entier_naturel;
Cpt <- 0;

declarer Pos : entier_naturel;
Pos <- 0;

boucle
Pos <- TrouveCarDansStr (Caract, Chaine, Pos);
si (Pos vaut taille (Chaine)) sortie;
Cpt <- Cpt + 1;
Pos <- Pos + 1;
fboucle

renvoie Cpt;
fin

algorithme TestComptCarac
debut
declarer Str : string;
Str <- "Salut ca va?";

afficher ("debut");
afficher ("on trouve ", ComptCarac ('a', Str), " fois la lettre 'a' dans ", Str);
ligne_suivante;
afficher ("on trouve ", ComptCarac ('b', Str), " fois la lettre 'b' dans ", Str);
ligne_suivante;
fin