L'aire d'un triangle quelconque de côtés de longueurs $a$, $b$, $c$ est donnée par la formule
$\sqrt{p(p-a)(p-b)(p-c)}$ où $p$ désigne le demi-périmètre du triangle. Définissez une fonction
aire : float -> float -> float -> float
telle que aire a b c
est l'aire du triangle de côtés de longueur $a$, $b$, $c$. Vous ne devez pas calculer le demi-périmètre plusieurs fois.
Définissez une fonction est_rectangle : float -> float -> float -> bool
telle que est_rectangle a b c
renvoie true
si et seulement si le triangle de côtés $a$, $b$, $c$ est un triangle rectangle.
Définissez de trois façons différentes la fonction max_liste : 'a list -> 'a
qui renvoie le plus grand élément d'une liste non vide quelconque (si la liste est vide, la fonction doit lever l'exception Invalid_argument "max_liste"
List.fold_left
On rappelle l'existence de la fonction max : 'a -> 'a -> 'a
.
La décomposition en facteurs premiers (dfp) d'un entier $n\geq 1$ est la suite de ces facteurs premiers listés dans l'ordre croissant. Par exemple
Définissez une fonction dfp_vers_entier : int list -> int
qui a une décomposition en facteur premier associe l'entier correspondant. Par exemple, dfp_vers_entier [2;2;5;7]
renvoie 140
.
Définissez la fonction inverse entier_vers_dfp : int -> int list
. Vous pourrez utiliser une boucle for ou while et un style impératif, ou vous pourrez compléter la fonction ci-dessous
let entier_vers_dfp n =
let rec f n m = match (n, m) with
| (1, _) -> []
| (n, p) when n mod p = 0 -> ...
| _ -> ....
in f n ...
Définissez la fonction dfp_produit : int list -> int list -> int list
qui prend les dfp de deux nombres et qui calcule la dfp de leur produit. Par exemple, dfp [2;2;5] [2;3;7]
renvoie [2;2;2;3;5;7]
.
On rappelle le type des arbres binaires d'expressions vu en cours
type arbre =
| Feuille of feuille
| Noeud of operateur * arbre * arbre
and feuille =
| Const of int
| Var of string
and operateur = PLUS | SUB | MULT | DIV
Définissez la fonction taille : arbre -> int
qui calcule le nombre de noeuds internes d'un arbre (autrement dit le nombre d'opérations.
Définissez la fonction hauteur : arbre -> int
qui calcule la hauteur de l'arbre. On rappelle que la hauteur d'un arbre est longueur du plus long chemin de la racine à une feuille de l'arbre.
Définissez la fonction variables : arbre -> string list
qui calcule la liste des variables apparaissant sur les feuilles de l'arbre.
Ecrivez une fonction somme_fichier : string -> int
. L'entier somme_fichier nom_fichier
renvoyé par la fonction est la somme des lignes de nom_fichier
qui contiennent exactement un entier. Les autres lignes sont ignorées.
Par exemple, si toto.txt
est le fichier
30
il est 8 : 30
20
`
somme_fichier "toto.txt"
renverra 50
sqrt 2. +. 3. ** 2.
List.fold_left (++) x0 [x1;...;xn]
renvoie (...(x0++x1)++...)++xn
.
List.fold_left (^) "" ["hello"; " "; "world"; "!"]
List.hd [1;2;3]
List.tl [1;2;3]
let r = ref 0
while !r <> 10 do r := !r + 1; print_int !r done
int_of_string "23"
int_of_string "23 : 30"
let premiere_ligne fichier =
let ic = open_in fichier in
let res = input_line ic in
close_in ic;
res