ESGI 2010/2011 Travaux dirigés I1 La répétition Fonctionnement des structures de répétition ou instructions répétitives Exercice 1 Soit l'algorithme : x : Entier ECRIRE("Donner l'entier de départ") LIRE(x) (x < 100) ECRIRE(x) x ← x + 20 Que produit cet algorithme lorsque x vaut 47, 198 ou -18 ? L'écrire à l'aide des instructions ... ... et ... Exercice 2 Soit l'algorithme : x : Entier ECRIRE("Donner l'entier de départ") LIRE(x) ECRIRE(x) x←x*2 (x > 100) Que produit cet algorithme lorsque x vaut 28, 195 ou −2 ? L'écrire à l'aide de l'instruction répétitive ... ... 1 ... ESGI 2010/2011 Travaux dirigés I1 Exercice 3 Exprimer l'instruction répétitive suivante : i ← min ECRIRE(i) à l'aide de : ... max ... et ... ... ... ... Que produit cet algorithme si : ∗ min = 5 et max = 20 ? ∗ min = 13 et max = 13 ? ∗ min = 20 et max = 5 ? Ecriture d'algorithmes Exercice 4 On désire emballer N oeufs dans NB boîtes de 12. Déterminer, sans eectuer de divisions, le nombre NB ainsi que le nombre NR des oeufs restants. N.B : on simulera la division en eectuant des soustractions successives. Exercice 5 Eectuer la division euclidienne de A par B 6= 0 (saisis préalablement par l'utilisateur) en achant le reste R et le quotient Q. N.B : on a alors A = B×Q + R avec 0 ≤ R < B Exercice 6 Calculer la racine carrée entière par excès d'un nombre donné. Exercice 7 Lire un à un les caractères d'une suite de caractères terminée par un point (".") et acher le nombre des "A" qu'elle contient. 2 ESGI 2010/2011 Travaux dirigés I1 Exercice 8 Demander à l'utilisateur s'il est un homme ou une femme, puis le saluer ("Bonjour Monsieur" ou "Bonjour Madame") en tenant compte de sa réponse. On exigera la réponse "H" ou la réponse "F". Améliorer cet algorithme en acceptant "h" pour "H" et "f" pour "F". (On pourra trouver une solution avec 2 variables booléennes : Homme et Femme, le but étant que l'une ait pour valeur Faux et l'autre Vrai ) Exercice 9 Ecrire un algorithme du jeu "trop petit, trop grand" qui consiste à faire deviner un nombre compris entre 1 et 1000, en répondant seulement "trop petit" ou "trop grand", à chaque nombre proposé par le joueur. Exercice 10 Ecrire un algorithme qui devine le nombre choisi entre 1 et 1000 par l'utilisateur qui aura à répondre à chacun des essais de l'algorithme l'un des trois caractères P (si l'essai est trop petit), T (si l'algorithme à trouvé) ou G (si l'essai est trop grand). Méthode à suivre : le nombre x (saisi par l'utilisateur) se trouve dans l'intervalle [a, b] que l'on initialise à [1, 1000]. Traitement : le nombre à essayer est le milieu de l'intervalle [a, b] (que l'on apelle M), on garde ensuite la moitié de l'intervalle ([a, M ] ou [M, b]) où le nombre x gure et on recommence le même traitement sur ce nouvel intervalle, jusqu'à ce que le nombre soit trouvé par l'agorithme. Cette méthode, à connaître, est appelée : raisonnement par dichotomie Faire la trace de cet algorithme lorsque le nombre à deviner est 237 et que l'utilisateur ne triche pas. Exercice 11 Gérer un stock de QP ramettes de papier et QC cahiers. Cette gestion consiste à recommencer à volonté le dialogue : Quel article (R ou C) ? Quelle quantité en + ou en − ? Encore un article à traiter ? Remarque : les stocks des deux articles seront initialisés, au début de l'algorithme par des instructions LIRE. Bien évidemment, on refusera une sortie (quantité négative) si le stock correspondant est insusant. Exercice 12 Demander un nombre N, entier positif, puis calculer : 3 ESGI 2010/2011 Travaux dirigés I1 La somme S1 = 1 + 2 + 3 + ... + N La somme S2 = 12 + 22 + 32 + ... + N 2 Le produit F = 1 × 2 × 3 × ... × N On écrira une solution sans boucle , puis une autre l'utilisant. Remarque : F = N !, se lit "N factoriel" Exercice 13 Cet exercice propose de réécrire le calcul de fonctions mathématiques à partir du développement en séries entières d'après la méthode de Taylor-Mac-Laurin. Ces mathématiciens ont montré que toute fonction peut s'écrire comme suite d'additions (ou de soustractions) de facteurs de x. Ainsi, sinus(x) correspond au calcul : sin(x) = x − x3 x5 x7 x2n+1 + − + ... + (−1)n + ... 3! 5! 7! (2n + 1)! Ecrivez l'algorithme qui calcule sinus(x). La boucle de traitement devra s'arrèter quand la précision obtenue sera susament petite, ce qui se traduit par une valeur très faible du nouveau facteur de x. La précision sera dénie à la 15me décimale. N.B : pour les calculs des factoriels, on utilisera l'appel de la fonction factorielle, dont l'algorithme de traitement a été écrit dans l'exercice précédent. Exercice 14 Calculer la somme des notes d'une suite de notes comprises entre 0 et 20. Il faut exiger que chaque note soit bien dans l'intervalle [0, 20]. On envisagera deux méthodes pour déterminer si la suite est terminée : soit poser une question ("encore (O ou N) ?"), soit accepter un codage (par exemple 99) après la dernière note. Exercice 15 Lire une série de notes comprises entre 0 et 20, puis acher la plus petite, la plus grande, le nombre des notes strictement inférieures, égales et strictement supérieures à 10. Exercice 16 Compter le nombre de séquences "LE" deans une suite de caractères, lus un à un, et terminée pau un "point nal". On envisagera trois méthodes : 1. examiner, lorsqu'on trouve un E, si le caractère précédent était un L ; 4 ESGI 2010/2011 Travaux dirigés I1 2. avancer jusqu'à la lettre L, regarder si elle est suivi d'un E, ainsi de suite jusqu'à la n de la liste ; 3. considérer des couples d'éléments consécutifs. Pour cela, on peut imaginer utiliser une paire de lunettes, dont chaque verre montrerait un caractère et qui se déplace dans la liste, caractère par caractère, de la gauche vers la droite. Exercice 17 Lire la suite des prix (en e et terminée par 0) des achats d'un client. Calculer la somme qu'il doit, lire la somme qu'il paye et simuler la remise de la monnaie en achant les textes : 20 e, 10 e, 5 e, 2 e et 1 e, autant de fois qu'il y a de billets ou de pièces de chaque sorte à rendre 5