Université Paris 6
Licence d'informatique
Module de Programmation
Année 2000-2001


Travaux dirigés n° 3





Exercice 1 (Types somme)

On souhaite définir les opérations de manipulation d'entiers signés. On définit le type entier_signe par :
type entier_signe = Pos of int | Neg of int ;;

1. Écrire une fonction creer_signe, qui prend un argument n de type int et rend la valeur Pos(n) si (n >= 0) et Neg(-n) dans le cas contraire.
2. On souhaite que les constructeurs Pos et Neg ne soient appliqués qu'à des entiers positifs ou nuls. Écrire une fonction correct qui vérifie cette condition. Une valeur v, telle que correct(v) = true, est dite correcte.
3. Écrire les fonctions plus_signe, moins_signe et mult_signe qui prennent un couple d'arguments de type entier_signe et, si ces arguments sont corrects, effectuent les opérations indiquées dans leur nom. (Indication: la construction (let rec ... and ...) permet de définir des fonctions mutuellement récursives)


Exercice 2 (Évaluation des tableaux)

Évaluez les expressions ci-dessous. On supposera qu'à chaque question correspond une nouvelle session Caml interactive.


1.
let t1 = init_vect 4 (function i -> i);;
t1.(1) <- 5;;
let t2 = make_vect 2 0;;
t1 = t2;;

let m = make_matrix 3 4 0;;
m.(2).(1) <- 5;;
m;;
m.(1) <- [| 1;1;1 |];;
let n = init_vect 3 (function i -> init_vect 4 (function j -> i + j));;

2.
let t3 = [|1;2;3|];;
t3.(2) <- 2;;
t3;;
let t4 = [|3;4|];;
let t5 = t4;;
t4.(1) <- 2;;
t5;;

Exercice 3 (Vecteurs)

On se propose de définir des fonctions de calcul sur les polynômes à une variable et à coefficients entiers. Pour cela, on représentera un polynôme
P(X) = Si=0n ai.Xi
par un vecteur p de taille n+1 tel que p.(i)= ai.


1. Écrire une fonction d'évaluation d'un polynôme en un point. Pour cela, vous remarquerez que:
Si=0n ai.Xi = a0 + X.(Si=1n ai.Xi-1)

2. Écrire une fonction de multiplication d'un polynôme par une constante.
3. Écrire une fonction calculant la somme de deux polynômes.
4. Écrire une fonction calculant la difference de deux polynômes.
5. Écrire une fonction permettant d'afficher un polynôme.


Exercice 4 (Tableaux)

Dans un match de football, chaque équipe joue un match à domicile, un match chez l'adversaire. Chaque match gagné vaut deux points, chaque match nul un point et chaque match perdu zero point. Le gagnant est celui qui totalise le plus grand nombre de points. On ne traitera pas ici le cas où deux équipes sont ex-aequo.

Le tableau suivant récapitule des résultats du championnat. Les lignes horizontales marquent les résultats à domicile, les lignes verticales les résultats à l'extérieur. Un match gagné sera marqué g, un match perdu p et un match nul n.
  Auxerre Bastia Bordeaux Lens Marseille
Auxerre     p p p
Bastia g        
Bordeaux p     g  
Lens     g    
Marseille   n      

1. Proposez une structure de données permettant de représenter les équipes ainsi que les résultats du championnat.
2. Écrire une fonction qui met à jour les résultats d'une série de matchs. Vous écrirez d'abord une fonction ajout_match qui permet d'ajouter les résultats d'un match puis une fonction ajout_list_de_match permettant d'ajouter les résultats d'une liste de matchs.
3. Écrire une fonction qui effectue une correction des résultats (en cas de contestation).
4. Écrire une fonction qui imprime les résultats acquis depuis le championnat.
5. Écrire une fonction qui calcule le nombre de matchs gagnés par une équipe.
6. Écrire une fonction qui donne le classement des équipes et l'affiche. Vous regrouperez les équipes ex-aequo.


Exercice 5 (Listes)

On souhaite calculer la liste des entiers premiers plus petits que n par la méthode du crible d'Eratosthene. Pour cela, vous définirez et donnerez le type des fonctions suivantes:
1. la fonction enlever_multiples enlève les éléments d'une liste d'entiers l multiples d'un entier n. Vous proposerez deux versions différentes, dont une utilisant la fonction filter de la librairie standard.
2. la fonction intervalle calcule la liste des entiers naturels compris entre n et m. Vous définirez alors la fonction nat2 rendant la liste des entiers de 2 à m.
3. la fonction crible calcule les premiers nombres premiers plus petits que n.


Ce document a été traduit de LATEX par HEVEA.