Vous êtes sur la page 1sur 1

MPSI DS 1 Option Informatique MPSI DS 1 Option Informatique

• la durée de vol en altitude est le plus petit indice n tel que un+1<u0.
Exercice 1 : Questions diverses et variées Question 4
Écrire les fonctions (sans recourir à la fonction termes):
1. Donner le type de l’expression suivante : let f g x = g x + 2023;; • duree_vol qui calcule la durée du vol en fonction de u0.
• altitude_max qui calcule l'altitude maximale en fonction de u0.
2. Ecrire une fonction aplatir l qui transforme une liste de listes en une liste simple ; par exemple, • duree_vol_alt qui calcule la durée de vol en altitude en fonction de u0.
aplatir [[1] ;[2 ;3] ;[4 ;5 ;6]] doit renvoyer [1 ;2 ;3 ;4 ;5 ;6].
Question 5
Ecrire une fonction max_duree_vol : int -> int * int list prenant en argument un entier
3. Rédiger une fonction au_moins_deux : ’ a list -> ’ a list retournant la liste des éléments - dans un ordre strictement positif a et qui calcule la plus longue durée de vol pour les valeurs de u0
quelconque - qui apparaissent au moins deux fois dans une liste donnée. La liste retournée ne devra inférieures ou égales à a ainsi que la liste des u0 correspondant.
pas comporter de répétition. Par exemple, au_moins_deux [1; 2; 1; 3; 2 ; 4; 5; 3 ;2] retournera par
exemple la liste [1 ; 2 ; 3]. Problème 2 : Ensembles
4. Écrire une fonction racine x eps de type float -> float -> float, qui retourne √x avec une précision de
On représente un ensemble (fini) d'objets par la liste de ses éléments. La liste vide représente donc
eps, en utilisant l’algorithme suivant, appelé algorithme de Babylone :
u0 = 1
l'ensemble vide. Une liste représente un ensemble si et seulement si elle est sans doublon, i.e. les

 éléments n'apparaissent qu'une seule fois dans la liste.
 1 x 
un +1 = 2  un + u 
  n  Quelques rappels :
→ La fonction List.mem permet de savoir si un élément appartient ou non à une liste ; par exemple,
x
qui s’arrête lorsque un +1 − un < eps ⇔ un − < 2 × eps . On pourra utiliser la fonction abs_float.
un
List.mem 7 [1;8;7;4] retourne true.
5. Écrire une fonction est_triee : 'a list -> bool qui prend comme argument une liste et → L'opérateur @ permet de concaténer deux listes ; on rappelle qu'il est de complexité linéaire par
renvoie le booléen true si la liste est triée par ordre croissant, et false dans tout autre cas. rapport à la première liste.
→ La fonction List.map permet de générer la liste des images des éléments d’une liste par une
6. Écrire une fonction decomposition : int -> int -> int list qui prend en argument fonction; par exemple, List.map (function x -> x + 1) [1;8;7;4] retourne
un entier n et un entier b (compris entre 2 et 10) et retourne comme résultat la décomposition de [2;9;8;5].
n en base b sous forme d'une liste.
Un bonus sera attribué si les chiffres sont dans le bon ordre … Un conseil : pensez récursivement !

1. Écrire une fonction valide qui calcule le booléen indiquant si une liste représente effectivement un
Problème 1 : Suite de Syracuse
ensemble.
a
 si a pair 2. Écrire une fonction unique , qui supprime les doublons d'une liste : unique [1;2;1;0;3;2]
Soit f la fonction définie sur par f (a) =  2 .
 3a+1 sinon calcule la liste [1;2;0;3].
Question 1
3. Écrire une fonction inclus qui calcule le booléen indiquant si un ensemble est inclus dans un autre.
Écrire une fonction f : int -> int qui permet de calculer f. 4. Écrire la fonction egal qui calcule le booléen indiquant si deux ensembles sont égaux.
5. Écrire la fonction intersection qui calcule l’intersection de deux ensembles.
Soit a ∈ * ; on définit la suite (un)n∈ par u0 = a et un = f(un−1) pour n > 0.
6. Écrire une fonction parties qui calcule l'ensemble des parties d'un ensemble : parties
Question 2
[0;1;2] calcule [[];[2];[1];[1;2];[0];[0;2];[0;1]; [0;1;2]] ou toute autre
Écrire une fonction u : int -> int -> int qui permet de calculer un.
liste à une permutation prés.
La conjecture de Syracuse, encore appelée conjecture de Collatz, est l'hypothèse
mathématique selon laquelle la suite de Syracuse de n'importe quel entier strictement
positif atteint 1 ; les termes suivants sont alors 4, 2, 1, 4, 2, 1,…

Question 3
Écrire une fonction termes : int -> int list qui permet de calculer la liste des termes
u0, u1, …, un = 1 où n est le plus petit entier tel que un = 1.

Voici quelques définitions :


• la durée de vol le plus petit indice n tel que un = 1 ,
• l'altitude maximale la valeur maximale de la suite,
P. CHATEL - 1/2 - 18/03/2023 P. CHATEL - 2/2 - 18/03/2023

Vous aimerez peut-être aussi