Correction TD 3 : Algorithmes itératifs Licence 1 MASS semestre 2, 2007/2008 Exercice 1 : Plus petit, plus grand aAlgorithme devinerA(n : entier) : rien début variable a : entier a←n−1 tant que a 6= n faire écrire(”Proposer un nombre ”) lire(a) si a < n alors écrire(”trop petit”) sinon écrire(”trop grand”) fin si fin tant que écrire(”vous avez trouvé”) fin bAlgorithme devinerB(n : entier) : rien début variable a, i : entier a←n−1 i←0 tant que a 6= n et i < 5 faire écrire(”Proposer un nombre ”) lire(a) si a < n alors écrire(”trop petit”) sinon écrire(”trop grand”) fin si i←i+1 fin tant que 1 écrire(”vous avez trouvé”) fin Exercice 2 : Comptage aAlgorithme comptageTailleSup160() : entier début variable t, n, i : entier n←0 pour i de 1 à 10 faire écrire(”Saissez votre taille (en cm) :” ) lire(t) si t ≤ 160 alors n←n+1 fin si fin pour retourner n fin bAlgorithme votation(n : entier) : rien début variable oui, non, blanc, i : entier vote : caractère oui ← 0 non ← 0 blanc ← 0 pour i de 1 à n faire lire(vote) si vote = ”O” alors oui ← oui + 1 sinon si vote = ”N” alors non ← non + 1 sinon blanc ← blanc + 1 fin si fin si fin pour écrire(”Pourcentage de BLANC : ”, 100*blanc/n) écrire(”Pourcentage de OUI parmi les exprimés : ”, 100*oui/(oui + non)) écrire(”Pourcentage de NON parmi les exprimés : ”, 100*non/(oui + non)) 2 fin Exercice 3 : Suite récurrentes a- u1 = 12 u0 + 2 = u2 = 21 u1 + 2 = u3 = 12 u2 + 2 = u4 = 12 u3 + 2 = u5 = 21 u4 + 2 = 3 2 11 4 27 8 59 16 123 32 b- Algorithme U100() : réel début variable i : entier u : réel u←1 pour i de 1 à 100 faire u ← 21 u + 2 fin pour retourner u fin c- Algorithme Un(n : entier) : réel début variable i : entier u : réel u←1 pour i de 1 à n faire u ← 21 u + 2 fin pour retourner u fin d- Algorithme rangLimite() : entier début variable u, p : entier u←1 p←0 tant que |u − 4| > 10−2 faire u ← 12 u + 2 p←p+1 fin tant que retourner p fin 3 Exercice 4 : Zéro d’une fonction a- Algorithme zeroIteratif(f : fonction, a, b : entier) : réel début variable x : entier x←a tant que f (x) < 0 faire x ← x + 10−2 fin tant que retourner x fin b- Algorithme zeroDichotomie(f : fonction, a, b : entier) : réel début variable x1 , x2 , xm : entier x1 ← a x2 ← b tant que |x1 − x2 | > 10−2 faire 2 xm ← x1 +x 2 si f (xm ) < 0 alors x1 ← xm sinon x2 ← xm fin si fin tant que retourner x1 fin Exercice 5 : Suite de polynomes a- P1 (X) = (X −1 + X)P0 (X) = X −1 + X P2 (X) = (X −1 + X)P1 (X) = X −2 + 2 + X 2 P3 (X) = (X −1 + X)P2 (X) = X −3 + 3X −1 + 3X + X 3 P4 (X) = (X −1 + X)P3 (X) = X −4 + 4X −2 + 6 + 4X 2 + X 4 P5 (X) = (X −1 +X)P4 (X) = X −5 +5X −3 +10X −1 +10X +5X 3 +X 5 Les coefficients correspondent aux coefficients du binôme de Newton. b- Algorithme P100() : polynme début variable P : polynome i : entier P ←1 pour i de 1 à 100 faire P ← (X −1 + X)P fin pour 4 retourner P fin Exercice 6 : Lapins a- Le nombre de couples de lapins au mois n est la somme des couples existants le mois d’avant (au mois n − 1) et des couples naissants au mois n. Or, le texte précise que tous les couples existants deux mois auparavant (au mois n − 2) se reproduisent. Par conséquent, au mois n ≥ 2 le nombre de lapins est : un = un−1 + un−2 b- Le premier mois, il n’y a qu’un seul couple u0 = 1 et le mois suivant aucun lapin n’est encore né, donc u1 = 1. Algorithme lapin12() : entier début variable u, v, i, tmp : entier v←1 u←1 pour i de 2 à 12 faire tmp ← u u ← u+v v ← tmp fin pour retourner u fin c- Algorithme mois300() : entier début variable u, v, tmp, m : entier v←1 u←1 m←0 tant que u ≤ 300 faire tmp ← u u ← u+v v ← tmp m←m+1 fin tant que retourner m fin d- Algorithme moisL(L : entier) : entier début variable u, v, tmp, m : entier v←1 5 u←1 m←0 tant que u ≤ L faire tmp ← u u ← u+v v ← tmp m←m+1 fin tant que retourner m fin 6