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é

[Algo]
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
[/Algo]

M1102-TD4 Exercice1

Ecrire la fonction TrouveCarDansStr () de profil :
[Algo]fonction TrouveCarDansStr (Caract : in caractere,
Chaine : in string,
Debut : in entier_naturel) renvoie entier_naturel;
[/Algo]
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é

[Algo]
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
[/Algo]