Академический Документы
Профессиональный Документы
Культура Документы
Exercice 01 :
(a) Écrire une fonction Ocaml qui prend en arguments les coefficients a, b et c d'une équation du
second degré (ax2+ bx + c = 0) et retourne le nombre de solutions réelles de cette équation.
(b) On considère un nombre rationnel comme une pair (num, den) de deux nombres entiers,
représentant une fraction. 1- Ecrire une fonction norm qui normalise une fraction, c'est-à-dire norm
réduit une fraction telle que numérateur et dénominateur n'ont pas de facteurs en commun. Par
exemple norm (4, 6) évalue à (2,3). (Utiliser une fonction pgcd).
2- Définir deux fonctions somme et produit qui calculent, respectivement, la somme et le produit de
deux fractions. On demande que le résultat soit une fraction normalisée.
Exercice 02 : Ecrire les fonctions suivantes et noter le type à chaque fois :
1. On définit la fonction de Fibonnaci par fib (0) = 1, fib (1) = 1, et fib (n) = fib (n-1)+fib (n-2)
Ecrire une fonction récursive qui définit cette fonction.
2. Ecrire une fonction qui calcule les coefficients du binome par la méthode recursive simple :
Cpn = Cpn-1 + Cp-1n-1
3. On veut compter le nombre de chiffres d’un nombre entier positif en base 10. Exemples : 34 à
2 chiffres, et 3 à 1 chiffre. Ce calcul peut utiliser la propriété suivante: Nbchiffres(n) =1 si n
<9, Nbchiffres(n) = 1 + nbchiffres(n/10) sinon
4. Ecrire une fonction qui prend en argument deux bornes n et m et une fonction f et
calcule sum n m f = ∑i=nmf(i). Proposer un exemple pour l’évaluation.
Exercice 03: Trouver une fonction pour chacun des types suivants :
(intint)int (intint) intint 'a -> ('a -> 'a) -> 'a
('a*'a -> 'b) -> 'a -> 'b 'a -> 'a -> 'a -> 'a
Exercice 04: Vérifier le respect des règles de portée sur les expressions suivantes. Pour les
expressions correctes données leurs types et valeurs. Pour les autres, expliquer pourquoi il y a erreur.
1. Ecrire une fonction récursive qui prend en entrée deux listes représentant deux vecteurs et
retourne le produit scalaire.
2. une fonction récursive qui prend une liste et retourne l’inverse de cette liste.
3. Ecrire une fonction récursive qui effectue la somme de deux listes élément par élément.
4. Une fonction qui prend une liste contenant des paires d’entiers et retourne la liste contenant
les pairs ou la les deux composantes de la paire ont la même valeur.
5. Ecrire une fonction carre qui prend en entré une liste des entiers et donne en sortie la liste des
carrés des entiers.
6. Généraliser la question 6 en donnant une fonction app qui s'applique à une fonction arbitraire,
donnée comme argument, à chaque élément d'une liste. Par exemple : app (fun x -> x*x) [1 ;
2 ;3] évalue à [1 ;4 ;9]
Exercice 06: (noter les types)
1- En utilisant la fonction max prédéfinie, écrire un programme maxlist qui prend en entré une liste
des entiers et donne en sortie le maximum entre 0 et les entiers dans la liste.
2- Généraliser les deux exercices précédents, en donnant une fonction itera qui s'applique à une
fonction binaire f, une liste [e1 ;e2 ;...] et un argument x d'égal type que les éléments de la
liste, et donne comme résultat l'itérations de f aux éléments de la liste plus x. C'est-à-dire :
itera f [e1 ;e2 ; ... en] x évalue à f e1 (f e2 ... (f en x)...)
Exercice 07: Soit la fonction d’Ackermann définie récursivement sur les entiers comme suit :
1. Ecrire une fonction récursive permettant de calculer le nombre de zéros dans une liste
d’entiers.
2. Ecrire une fonction récursive eliminerZero qui prend en argument une liste d’entiers et
retourne cette liste sans les éléments nuls (les zéros)
3. Ecrire une fonction qui prend en entrée une liste de listes d’entiers et qui donne en
sortie cette liste après avoir éliminé tout les zéros dans chacune des listes contenue
dans la grande liste. Cette fonction appelle la fonction eliminerZero.