Vous êtes sur la page 1sur 2

EXERCICES DE PROGRAMMATION

Certains algorithmes sont donnés en langage naturel: c’est un bon exercice que de les
implémenter en Maple ou autre langage que l’on peut exécuter sur machine.

1) Ecrire une procédure de calcul des nombres de Fibonacci qui utilise une répétition (boucle
Tant que… Faire… ou Pour…) ; combien d' opérations sont alors nécessaires pour calculer le
100ème ?

2) Quel est la valeur de resu après l’exécution du programme (stupide) suivant :


0 ‘ a; 0 ‘ resu;
REPETE
POUR b = 0 JUSQU'A b=a
resu+1 ‘ resu
a+1 ‘ a
TANT QUE a<100

3) Voici la définition de la fonction d' ACKERMANN ; essayez de trouver une formule pour
ACK(1,n), ACK(2,n) et même ACK(3,n).
Fonction Ack(n,p)
SI p=0 ALORS n+1
SI n=0 ALORS Ack(p-1,1)
SINON Ack(p-1, Ack(p,n-1))
Fin;

4) Que calcule le programme suivant ?


Programme Mystère
Demander n {l' utilisateur donne un nombre}
1‘p ;0‘k
REPETE
n-p ‘n
2+p ‘p
k+1‘k
TANT QUE n>0
Affiche k

5) Quel sera, à votre avis, le comportement d' un ordinateur sur lequel on fait tourner le
programme suivant :
0 ‘ resu
1 ‘n
REPETE
resu + (1/n) ‘ resu
n+1 ‘n
TANT QUE resu<10000000
1 3
6) Utiliser la suite récurrente x n +1 = (x n + ),x 0 = 1, pour construire une fraction rationnelle
2 xn
de dénominateur >104 , qui approche 3 à 10-8 près.
Combien de variables sont nécessaires ?

7) Que fait le programme suivant
† ?
Rem : la fonction nul(x) teste si x est quasiment égal à zéro.
p XOR q est vraie si une e une seule des deux assertions est vraie (différence symétrique).

f :=x › x*x-2;
nul := x › evalb( abs(x)<0.0000001);

u :=0; v :=3;
fu := f(u); fv := f(v);
WHILE NOT (nul(fu) OR nul(fv) OR nul(u-v) ) DO
print (u, v, "images", fu, fv);
w:=(u + v)/2; fw := f(w);
IF (fu<0) XOR (fw<0) THEN v := w, fv := fw;
ELSE u:= w, fu:= fw;

END IF;
END DO
print("solution : ", u);

7) Ecrire un programme semblable au précédent, mais plus efficace, en utilisant la dérivée ff de


la fonction f (on admet que ff ne s' annule pas durant l' exécution du programme).

8) Ecrire un programme qui calcule le pgcd et les coefficients de Bezout de deux "nombres" a
et b, dans un anneau euclidien (on suppose déjà implémentées les fonctions somme(a,b),
prod(a,b) et quotient(a,b), mais écrivez vous-même la fonction reste(a,b) !).
Ce programme pourra fonctionner, par exemple, quand a,b sont des polynômes (ou des
entiers de Gauss, etc)

9) A l'aide de la fonction mod, écrire la fonction val(p,n) qui compte combien de fois p divise
n (i.e. val(2,56) donne 3) puis, en l' utilisant, construire un programme de décomposition d' un
nombre en facteurs premiers.