TP MAPLE no1 Algorithmes élémentaires Benjamin Favetto Vincent Mercat 28 novembre 2008 1 Introduction Le but de ce premier TP est de se familiariser avec le vocabulaire et les notions de base de la pensée algorithmique. Pour cela, nous disposons de la machine la plus puissante du monde : une feuille et un crayon ! Dans cette série d’exercices, il vous est en effet demandé de rédiger dans un langage compréhensible par votre voisin plusieurs algorithmes simples mettant en jeu des notions déjà rencontrées dans votre passé mathématique. Selon Wikipedia, on dispose de la définition suivante : Un algorithme est un moyen pour un humain de présenter la résolution par calcul d’un problème à une autre personne physique (un autre humain) ou virtuelle (un calculateur). En effet, un algorithme est un énoncé dans un langage bien défini d’une suite d’opérations permettant de résoudre par calcul un problème. [...] Rappels : On ne cherchera pas à savoir – dans un premier temps – comment l’ordinateur peut comprendre un tel langage. On se bornera à manipuler des variables exactement comme en mathématiques, avec, par exemple l’expression “soit x = 5” : on a affecté la valeur 5 à x, et on peut l’utiliser par la suite dans un calcul, par exemple “3.x + 2 = 17”. On utilisera aussi deux types de boucles afin d’effectuer un calcul de façon itérative : – Les boucles inconditionnelles, qui effectuent un calcul un nombre déterminé de fois (par exemple, la multiplication d’un entier n par 3 est une répétition d’additions : n + n + n = 3 × n, c’est une boucle inconditionnelle très simple), – Les boucles conditionnelles, qui exécutent un calcul tant qu’une condition est vraie (par exemple, étant donné un entier n, on peut décider de lui soustraire 1 tant que le résultat est positif, mais le nombre de soustractions dépend de n). Remarque : La rédaction d’un algorithme ne doit pas s’effectuer de façon linéaire, mais plutôt en respectant, comme dans toute bonne rédaction, un plan en trois parties : on doit pour cela clairement identifier les données que l’on doit traiter, la façon de les traiter et ce que l’algorithme doit renvoyer. Pour cela, on pourra méditer, puis compléter, le squelette correspondant au deuxième exemple ci-dessus : soustract(n) Initialisation u←n tant que . . . faire u ← ... Corps de l’algo. fin faire retourner . . . Résultat 1 2 Exercice 1 On définit pour n ∈ N la quantité factorielle n par : 0! = n! = 1 n Y k pour n ≥ 1 k=1 et l’on remarque immédiatement que n! = n × (n − 1)!. Rédiger un algorithme basé sur une boucle inconditionnelle qui prend en entrée un entier n et qui calcule n!. On prêtera attention – au choix des variables – à leur initialisation – à la formulation du calcul que doit effectuer une étape de la boucle – aux valeurs des variables à la fin de l’algorithme. 3 Exercice 2 Rédiger un algorithme permettant de calculer n X k=1 1, n X k=1 k, n X k2 k=1 sur le modèle de l’exercice précédent. 4 Exercice 3 Etant donnés deux entiers naturels a et b, avec b 6= 0, on appelle quotient et reste de la division euclidienne de a par b les entiers naturels q et r tels que a = bq + r avec 0 ≤ r < b. Nous disposons de la proposition suivante : Proposition : Pour a, b donnés, le couple (q, r) existe et est unique. Le but de cet exercice est de rédiger un algorithme permettant le calcul du couple (q, r). Pour cela, on se basera sur une boucle conditionnelle et l’on fera attention à – la valeur initiale des différentes quantités du problème, – l’étape de calcul que l’on doit répéter dans l’algorithme (Indication : procéder par soustraction), – la condition intervenant dans la boucle (Indication : s’assurer de la positivité du reste). Question subsidiaire : prouver l’unicité dans la proposition précédente. 5 Exercice 4 Soit n ∈ N un entier, on souhaite écrire un algorithme permettant de calculer le n-ème terme un de la suite de Fibonacci, définie par : u0 = 0 , u1 = 1, un+2 = un+1 + un . Pour cela, on prêtera attention à l’actualisation des valeurs des différentes variables lorsqu’on passe du calcul de un à un+1 . On se basera sur une boucle inconditionnelle. 2 6 Exercice 5 On définit pour n ≥ 0 la suite (un ) par u0 = K entier naturel quelconque et : un+1 = un si un est pair 2 3un + 1 si un est impair (une telle suite s’appelle suite de Syracuse, voir http://fr.wikipedia.org/wiki/Conjecture_de_Syracuse pour plus d’informations). Rédiger un algorithme permettant le calcul, étant donné un entier naturel n, du n-ème terme de cette suite. Pour cela, on réfléchira – aux variables nécessaires et à leur initialisation, – à la stratégie à adopter (boucle conditionnelle ou inconditionnelle ?), – au test de la condition. 7 Exercice 6 Le but de cet exercice est de rédiger un algorithme permettant de trouver une valeur d’annulation d’une fonction. On s’appuiera sur le résultat suivant : Proposition : Soit f une fonction continue de [a, b] à valeurs réelles, strictement croissante, et telle que f (a)f (b) < 0. Alors il existe un unique x0 ∈ [a, b] tel que f (x0 ) = 0. Pour un grand nombre de fonctions, il n’est pas possible de trouver une valeur explicite de x0 , et l’on recourt souvent à l’ordinateur pour fournir une valeur numérique approchée. On souhaite pour cela procéder par dichotomie, c’est à dire – On sait d’après la proposition que x0 ∈ [a, b], – On coupe l’intervalle [a, b] en deux sous-intervalles de même longueur, – Si f ( a+b 2 ) > 0 alors x0 appartient à l’intervalle de gauche, sinon x0 appartient à l’intervalle de droite, – On recommence le procédé jusqu’à obtenir un intervalle contenant x0 de longueur attendue (i.e. conforme à la précision que l’on veut pour l’approximation numérique). Afin de mettre en oeuvre cette méthode, on commencera par faire un dessin, puis on effectuera à la main quelques itérations du procédé. On réfléchira notemment à la longueur de l’intervalle contenant x0 au bout de k itérations. Ensuite seulement, on réfléchira : – Aux variables intervenant dans le problème, – Au choix de la stratégie (boucle conditionnelle ou inconditionnelle ?), – Au passage d’une étape à l’étape suivante, – A ce que doit retourner l’algorithme. 8 Un peu de Maple ... Reprendre les exercices avec Maple, une fois les algorithmes élaborés sur papier. Pour cela, on n’hésitera pas à se servir abondemment de l’aide de Maple . . .Voici quelques éléments de syntaxe : – l’affectation d’une variable se fait via l’opérateur :=, par exemple x:=5;affecte 5 à x. – la boucle inconditionnelle for admet la syntaxe suivante for i from 1 to n do . . . end ; – la boucle conditionnelle while admet la syntaxe suivante while . . . do . . . end ; – . . .et surtout, ne pas oublier ; en fin de ligne ! 3