Feuille de TD n˚1
MPSI option informatique F´ evrier 2021
Exercice 1 : Pr´evoir la r´eponse de l’interpr`ete de commande apr`es les d´efinitions suivantes : 1) .
# let a = 2 ;;
# let f x = a * x ;;
# let a = 3 in f 1 ;;
???
# let a = 3 ;;
# f 1 ;;
???
2) .
# let a =
ddlet a = 3 and b = 2 in
ddddlet a = a + b and b = a - b in dddddda - b ;;
???
# let b = 2 in a - b * b ;;
???
Exercice 2 :
1) En utilisant une affectation locale, calculer 1 +√
7 +√ 73 1 +e
√
7 , ln(cos(1)) + sin(ln(5)) cos(1) + ln(5)
2) En utilisant une affectation locale, donner un calcul efficace (avec un seul appel `a la fonction exponentielle) de th(x).
Exercice 3 : Ecrire les fonctions suivantes :
1) funct1 qui `af ∈IRIR associe la valeur 12(f(0) +f(1)) 2) funct2 qui `a (f, x)∈IRIR×IR associe la valeur (f(x))2 3) funct3 qui `af ∈IRIR associe la fonction f2 (le carr´e de f) 4) funct4 qui `af ∈IRIR associe la fonction x7→f(x+ 1).
Exercice 4 :L’op´erateur des diff´erences finies ∆ associe `a toute suite (un)n∈INla suite ((un+1−un)n∈IN. Ecrire une fonction´ delta qui r´ealise cette transformation. On commencera par en donner son
type.
Exercice 5 : Un nombre entier n ≥2 est dit parfait s’il est ´egal `a la somme de ses diviseurs positifs (y compris 1) diff´erents de lui-mˆeme.
Ecrire une fonction qui donne tous les nombres parfais inf´erieurs `a 10 000.
Exercice 6 : Ecrire une fonction recherche d’arguments un ´el´ement e et un tableau t tri´e, qui recherche pr´esence et la position de l’´el´ement dans le tableau si celui-ci est pr´esent.
Exercice 7 : On suppose qu’un polynˆome de degr´e n, P =
n
X
k=0
akxk est repr´esent´e par un tableau [|a0;. . .;an|]. Ecrire une fonction valeur de signatureint array -> int -> int, qui calcule P(a). Cette fonction devra ˆetre lin´eaire selon le degr´e du polynˆome.
1
Exercice 8 : Ecrire une fonction log2 qui prend en argument un entier n, avec n ≥ 1, et calcule le plus grand entier k tel que 2k≤n.
On proposera une version it´erative et une version r´ecursive.
Exercice 9 : Ecrire une fonction r´ecursive de signature int -> int -> int qui calcule le coefficient binomial
n k
. Il faudra que cette fonction aie une complexit´e lin´eaire en appels r´ecursifs.
Exercice 10 :Ecrire une fonctionbezoutde signatureint -> int -> int * intqui calcule des coefficients de Bezout de deux entiers.
Exercice 11 : Une application ϕ de l’ensemble [[1,10]] dans lui-mˆeme est repr´esent´ee par un tableau T `a dix cases : pour tout entier i dans [[0,9]], la i-i`eme case du tableau T contient ϕ(i+ 1).
Ecrire un programme inverse qui prend en entr´ee le tableau T et retourne le tableau U repr´esentant l’application r´eciproque ϕ−1 lorsque ϕ est bijective ; dans le cas contraire le pro- gramme affiche le message non bijectif.
Exercice 12 :Ecrivez une fonction r´´ ecursivesom chiffres de typeint -> intqui calcule la somme des chiffres de l’entier pass´e en argument.
Exercice 13 : (addition r´ecursive terminale)
Ecrire une fonctionadd : int -> int -> int, r´ecursive terminale, et effectuant la somme de ses deux arguments (suppos´es > 0). Les seules op´erations autoris´ees sont l’addition ou la soustraction de 1.
Exercice 14 : Ecrivez une fonction r´´ ecursive ordre lexico de type string -> string ->
bool qui d´etermine si une chaˆıne de minuscules est situ´ee avant une autre pour l’ordre lexico- graphique.
Exercice 15 : Les tours de Hano¨ı: le mat´eriel de ce casse-tˆete classique est constitu´e de trois piquets, num´erot´es 1,2,3 et de n rondelles de diam`etres diff´erents perc´ees de sorte qu’elles peuvent ˆetre enfil´ees sur les piquets. Dans la position initiale, les rondelles sont enfil´ees par ordre de diam`etre d´ecroissant sur le piquet 1 ; le but du jeu est de les transf´erer vers le piquet 3 en respectant les r`egles suivantes :
– d´eplacer une seule rondelle `a la fois
– `a aucun moment il n’a une rondelle pos´ee sur une autre de diam`etre inf´erieur
1) Ecrire une fonction r´ecursive affichant une succession de d´eplacements permettant de r´esoudre ce probl`eme.
2) D´eterminer le nombre de d´eplacements effectu´es en fonction de n.
2