Université Paris 6 Licence d'informatique | Module de Programmation Année 2000-2001 |
---|
Contrôle continu - 30 novembre 2000
Les seuls documents autorisés sont les documents manuscrits et
les documents distribués en cours, TDs et TPs. La durée de l'épreuve
est de 2h.
Exercice 1 (12 points)
Vous pouvez utiliser toutes les fonctions vues en cours ou
appartenant aux bibliothèques décrites dans le manuel de référence
de Caml. Vous pouvez utiliser autant de fonctions intermédiaires que
vous le souhaitez.
L'état du rayon « légumes » d'un supermarché est tenu à jour
par l'ordinateur central d'après les informations fournies par les
caisses.
Chaque légume est représenté par son nom, la quantité présente en
rayon, le seuil à partir duquel il faut réapprovisionner le rayon, ainsi
que son prix. La quantité peut être soit un nombre de pièces (par
exemple pour les céleris), soit un nombre de kilos (par exemple pour
les carottes). Selon les saisons les légumes varient et sont plus ou
moins nombreux.
1. (Types)
Définissez le type légume. Pour cela vous pouvez définir
tous les types intermédiaires que vous souhaitez. Indiquez la
représentation des tomates, à 5,50 francs le kilo, avec 20 kilos en
rayon et un seuil de commande de 5 kilos.
2. (Quantités)
-
Écrire une fonction
vérifie_quantité
qui vérifie pour un
légume que la quantité de légume présente en rayon et le seuil à
partir duquel il faut réapprovisionner sont exprimer dans la même
unité (pièce ou kilo).
- Écrire une fonction
inférieur_quantités
qui compare deux
quantités de même nature q1 et q2 et rend true si q1 <
q2 et échoue sinon.
- Écrire une fonction
différence_entre_quantités
qui
calcule la différence de deux quantités de même nature q1 et q2
et échoue sinon.
3. (Panier)
Une ménagère achète des légumes pour son pot au feu: quelques
carottes, des pommes de terre, une botte de poireaux, un oignon, un
bouquet d'herbes. Par quelle structure de données représentez-vous
le panier de cette ménagère?
4. (Prix)
-
Écrire une fonction
info_légume
qui fournit les
informations concernant un légume de nom n dans le rayon
r.
- Écrire une fonction
prix_légume
qui trouve le prix d'un
légume de nom n dans le rayon r.
- Compte tenu de la description du rayon r, écrire une
fonction
prix_pannier
qui évalue le prix à payer à la caisse
pour un panier de légumes p.
5. (Mise à jour)
-
Écrire une fonction
mise_à_jour_légume
qui retire une
quantité q d'un légume de nom n du rayon.
- Écrire une fonction
mise_à_jour_pannier
qui met le stock à
jour après passage en caisse d'un panier de légumes.
6. (Commande)
Écrire une fonction légumes_à_commander
qui compose la
commande après mise à jour du stock du rayon r.
Exercice 2 (8 points)
Typer les expressions suivantes:
let f = function x -> function y -> let z = x * y in x + z;;
let rec p = function x -> function n ->
if n = 0 then 1 else (p x (n-1))*x;;
let h = p (f 4 2);;
let filter = function f -> function p -> function x ->
if p x then f x else x;;
sachant que hd et tl ont pour types hd: 'a
list -> 'a et tl: 'a list -> 'a list.
Ce document a été traduit de LATEX par
HEVEA.