Vous êtes sur la page 1sur 2

Les rponses aux questions du DM C++ 1) crire a) la dclaration du tableau boolen D bool d[DT]; //Tableau contenant les booleens

(de mme taille que t)

b) la dfinition de la fonction Inittabbool /* Inittabbool : initialise un tableau de booleen sur _size valeurs. * Entrees : bool tab[], le tableau initialiser. * : int _size, le nombre d'lments du tableau a initialiser. * Sorties : bool tab[], le tableau initialis. */ void Inittabbool(bool tab[],int _size) { for (int i=0; i<_size; i++) { tab[i]=false; } } 2) crire la dfinition de la fonction Genere_nouveau_texte /* Genere_nouveau_texte : gnre un texte partir d'une chane et d'un tableau de boolen. * a chaque caractre de la chane correspond un boolen du tableau * seules les lettres dont le booleen est a FALSE sont conserves dans la nouvelle chane * Entrees : char tab_origine[], la chane de caractres d'origine * : char tab_nouveau[], la chane de caractres crer * : bool tab_bool[], le tableau de booleens * : unsigned short _size, la taille de la chane d'origine * Sorties : char tab_nouveau[], la chane de caractres cre */ void Genere_nouveau_texte(char tab_origine[], char tab_nouveau[], bool tab_bool[], unsigned short _size) { int i,j=0; //Itrateurs for (i=0; i<_size; i++) { if(!tab_bool[i]) //On teste la valeur du boolen { tab_nouveau[j]=tab_origine[i]; j++; } } tab_nouveau[j]=EOS; //On ajoute le symbole de fin de string la fin de la chane cre } 3) crire la dfinition de la fonction Mise_a_jour /* Mise_a_jour : met n lments d'un tableau de boolen la valeur TRUE, partir de l'indice n * Entres : bool tab[], le tableau de boolens mette jour * : unsigned short i, l'indice partir duquel effectuer la mise jour * : unsigned short n, ne nombre d'lments a mettre jour la mise jour * Sorties : bool tab[], le tableau de boolens mis jour */ void Mise_a_jour(bool tab[], unsigned short i, unsigned short n) { int max=i+n; //Indice max pour la comparaison for (int j=i; j<max; j++)//On effectue la boucle sur [i..i+n[ { tab[j]=true; } } 4) crire la dfinition de la fonction Est_prefixe /* * Est_Prefixe : vrifie si une chane est prfixe d'une autre la premire chane fait partie d'un tableau plus grand.

* Entres : char tab_chaine[], le tableau contenant la chane tudier * : char tab_prefixe[], le tableau contenant le prfixe * : unsigned short n, l'indice partir duquel on tudie la premire chane * : unsigned short l, la longueur du prfixe * Sorties : return(), TRUE si la seconde chane est prfixe de la premire, FALSE sinon */ bool Est_prefixe(char tab_chaine[], char tab_prefixe[], unsigned short n, unsigned short l) { bool prefixe=true; //Variable de sortie int max=n+l; //Indice max pour la comparaison int j=0; //Itrateur pour le prfixe for (int i=n; i<max; i++) { if (tab_chaine[i]!=tab_prefixe[j]) prefixe=false; //Si une lettre diffre, ce n'est pas un prfixe j++; } return(prefixe); } 5) Complter le programme principal Voir fichier source. 6) Quel est le rsultat de lexcution de votre programme si la chane m est vide ? Si la chane m est vide, la chane tt est gale la chane t car tous les lments de d sont false. 7) Justifier partir du code crit le fait que l'lment du tableau D correspondant l'lment sentinelle de t reste toujours la valeur false. On effectue toujours les comparaisons dans des boucles allant jusqu' lt exclus.

Ainsi, dans Est_prefixe, on tudie les lments de t jusqu' i+lm exclus, avec i allant de 0 lt-lm inclus. Soit de 0 lt exclus. L'lment sentinelle n'est donc jamais pris en compte dans la comparaison et on travaille exclusivement avec les caractres. Si le tableau de boolens est entirement initialis false, alors la valeur correspondant l'lment sentinelle n'est jamais modifie.