M1102-TD5 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

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 ComptagePetitEnsemble
debut
	declarer KStrVoy : constante string <- "aeiouy";
	
	declarer TabCpt : tableau_de taille (KStrVoy) entier_naturel;
	
	declarer Chaine : string;
	afficher ("Veuillez saisir une chaine de caractères : ");
	saisir (Chaine);
	
	//comptage
	pour (i variant_de 0 a taille (KStrVoy) -1)
	faire
		TabCpt [i] <- ComptCarac (KStrVoy [i], Chaine);
	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 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 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