Algorithmes élémentaires - Page professionnelle de Benjamin Favetto

publicité
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
Téléchargement