Examen 2022
Examen 2022
Examen 2022
Algorithmique II
Examen final
Corrigé
1
Fin Si
ii+1
Fin Tant que
Si (produit=n) Alors
Retourner Vrai
Sinon
Retourner Faux
Fin Si
Fin
Ci-dessous une autre manière d’écriture de la fonction SemiPremier, mais elle est moins rapide que la précédente
Fonction SemiPremier(n : Entier) : Boolleen
//Nous insérons ici la fonction Premier décrite ci-dessus
Var i, j, M : Entier
SemiPremier : BoolleenFaux
Début
Si (n<=3) Alors
Retourner (Faux)
Fin Si
Mn Div 2
i2 //pour parcourir tous les entiers inférieurs ou égaux à M
Tant que (i <= M Et SemiPremier=Faux) Faire
Si (n Mod i=0 Et Premier(i)) Alors
ji
Tant que (j <= M Et SemiPremier=Faux) Faire
Si (i*j=n Et Premier(j)) Alors
SemiPremier Vrai
Fin Si
jj+1
Fin Tant que
Fin Si
ii+1
Fin Tant que
Retourner SemiPremier
Fin
3. Algorithme AfficheNombreSemiPremier ()
//Nous insérons ici la fonction SemiPremier décrite ci-dessus
Var i, N : Entier
Début
//Saisi d’un entier
Répéter
Ecrire("\nDonner la valeur d’un entier supérieur à 3")
Lire(N)
Jusqu’à N>3
Ecrire("\nLes nombres semi-premiers inférieurs à ",N, " sont : \n")
Pour (i2 à N) Faire
Si (SemiPremier(i)) Alors
Ecrire(i,"\t") //affichage de la valeur de i suivi de quelques espaces
Fin Si
Fin Pour
Fin
2
Exercice 2 : (Sur 6 points)
Étant donnés un texte t et un mot m sous forme de chaînes de caractères. La fonction suivante permet de
déterminer le nombre de fois où le mot m apparaît dans le texte t.
Exemples :
– le mot "elle" apparaît 2 fois dans le texte "quelle belle journee",
– le mot "aa" apparait 4 fois dans le texte "aaaaa".
3
- Le caractère de la chaine t correspondant à la valeur i=13 ne coïncide pas avec le premier caractère de
la chaine m. D’où on entre une seule fois dans la boucle interne pour affecter la valeur "Faux" à la
variable "Trouve", sans incrémentation de n à la sortie de cette boucle.
Ensuite on sort de la boucle externe "Tant que" pour retourner la dernière valeur de n qui est égale à 2.
1. La récursivité de la fonction BinRecursive(n) est-elle terminale ou non terminale ? justifier votre réponse.
2. Donner les étapes d’exécution de BinRecursive(13), ainsi que la chaine retournée par cet appel.
3. Sachant que la fonction BinRecursive(n) retourne le codage binaire d’un entier positif, écrire une fonction
itérative BinIterative(n) équivalente à cette fonction.
Corrigé
1. La récursivité de la fonction BinRecursive(n) est non terminale, car le retour de valeur est suivi de
traitements. En effet, le retour de la valeur de BinRecursive(n Div 2) est accompagné de la concaténation
avec la chaine "0" ou avec la chaine "1"
4
Remonté après le dernier appel
BinRecursive (3)= BinRecursive (1)+"1" = "11"
BinRecursive(6)= BinRecursive (3)+"0" = "110"
BinRecursive(13)= BinRecursive(6)+"1" = "1101"
D’où finalement l’appel de BinRecursive(13) va retourner la chaine "1101"
3. Comme la récursivité de la fonction BinRécursive n’est pas terminale, alors on ne peut pas utiliser la
méthode qu’on a vu dans le cours pour transformer la fonction BinRécursive en une fonction itérative
équivalente. D’où on va créer une fonction itérative qui effectue le meme travail que BinRécursive.
Une fonction itérative équivalente à la fonction BinRecursive(n) est donnée par :