Devoir surveillé d'informatique UE INF121 durée : 2h00 Répondez sur le sujet. Ne vous ez pas à la taille des pointillés : la taille des pointillés ne correspond pas forcément à la taille de la réponse. Les appareils électroniques sont interdits à l'exception d'une montre. Aucun document n'est autorisé à l'exception d'une feuille A4 recto-verso manuscrite portant votre nom. Le barème et le temps à passer sur chaque question sont donnés à titre indicatif. Les questions sont indépendantes et peuvent être traitées séparément. Vous avez le droit d'utiliser les fonctions des questions précédentes même si vous ne les avez pas écrites. N'oubliez pas d'indiquer votre nom, votre prénom et votre groupe. Avant de commencer à répondre, prenez 10 minutes pour lire le sujet et repérez les quetions faciles Nom :............................................................................................. Prénom :......................................................................................... Groupe :.......................................................................................... 4 pt Exercice 1 : Algorithme de l'exponentiation rapide (15min) Vous connaissez l'algorithme standard de calcul de x n : Algorithme standard : x 0 = 1 x i+1 = x x i Il existe un algorithme plus ecace pour calculer x n. Le but de cet exercice est de dénir la fonction puis qui implante cet algorithme. Prol puis : Z N Z Sémantique : puis (x, n) est la nème puissance de x. 1
L'algorithme ecace choisit à chaque étape du calcul de x n l'équation à appliquer parmi les 4 équations suivantes selon la parité de n. Algorithme ecace : (1) x 0 = 1 (2) x 1 = x (3) x 2i = (x...... ) i quand i > 0 (4) x 2i+1 = x (x...... ) i quand i > 0 1 pt Q1. (5 min, 1 pt) Donnez les étapes du calcul de 2 8 et de 2 14 avec l'algorithme ecace en indiquant sur chaque êche l'équation utilisée. On ne demande pas de faire le calcul nal. 2 8(=2 4) (3) (...........).. (=2.. )...... (...........)...................................................................... Combien d'étapes prend le calcul avec l'algorithme ecace?.. étapes Combien d'étapes aurait pris ce calcul avec l'algorithme standard?.. étapes 2 14(=...........)...... (.... ).. (=................... )....................................................................................................................................................................................................................................................................................................................................................... Combien d'étapes prend le calcul avec l'algorithme ecace?.. étapes Combien d'étapes aurait pris ce calcul avec l'algorithme standard?.... étapes 1 pt Q2. (5 min, 1 pt) Complétez la réalisation de la fonction puis. Dénition de la fonction par des équations (1) puis (x, 0) =.. (2) puis (x, 1) =.. (3) puis (x, i) =.................................. quand................................... (4) puis (x, i) =....................................................... quand................................... 2
let (puis : int * int -> int) = 2 pt Q3. Preuve de terminaison (5 min, 2 pt) Complétez la preuve de terminaison de la fonction puis. Faîtes uniquement la preuve pour l'équation (3). On ne demande pas de traiter l'équation (4) car la preuve est similaire. TERMINAISON Preuve de terminaison : (i) Les arguments de la fonction............... sont............................................... la fonction.............................................................................................. (ii) Justions que la mesure choisie retourne des valeurs dans.... : Mesure (....... ) =...... puisque les arguments de la fonction............... sont............... la fonction........., ils sont donc de type.................., et donc............. (iii) Montrons que la mesure...................................... à.............. appel.............. : Pour (ii), on considère uniquement les équations qui comportent des.............................: Pour l'équation.................. (3) on doit montrer : 3
(3) appel initial { }} { puis (x, i) = appel............ { }} {.......................... quand............................................ Mesure (...... )? > Mesure (............. ) quand............................................ def =.....? > def =...... quand............................................ Ainsi Mesure (...... ) > Mesure (............. ) quand............................................ En eet,......................................................................................................................................................................................................................................................... 4
5.5 pt Exercice 2 : Ordonner trois entiers à l'aide d'une fonction récursive (26min) Cet exercice montre que la récursivité permet d'ordonner un triplet (x, y, z) d'entiers sans qu'il soit nécessaire de détailler tous les cas possibles dans une immense suite de if...then...else... imbriqués. 1.5 pt Q4. (5 min, 1.5 pt) Complétez la dénition de la fonction trier Prol trier :............................................ Sémantique : trier (x, y, z) est le triplet des entiers x, y, z ordonnés dans l'ordre croissant. Exemple trier (3, 1, 2) = (1, 2, 3) Algorithme : Pour ordonner le triplet (x, y, z) on compare y avec l'un de ses voisins (x ou z) ; on ordonne y et un voisin si nécessaire et on appelle récursivement trier pour vérier que le triplet est trié ou bien faire d'autres réarrangements. Dénition récursive de la fonction par des équations 1) trier (x, y, z) = (..,..,.. ) quand..................... 2) trier (x, y, z) = trier (................. ) quand............ 3) trier (x, y, z) = trier (................. ) quand........... let (trier :... ) =.5 pt Q5. Trace d'exécution (2 min,.5 pt) Donnez la suite des appels récursifs engendrés par trier (3, 2, 1) en indiquant pour chaque appel l'équation utilisée... trier (3, 2, 1) trier....................................................................... 1 (1, 2, 3) 5
.5 pt Q6. Couple ordonné, couple inversé (4 min,.5 pt) Complétez la dénition de la fonction nbinv. Un couple (x, y) est une inversion si x > y ; par exemple, (3, 1) et (5, 2) sont des inversions. Les couples bien ordonnés (par exemple (1, 3) et (2, 5)) ne sont pas des inversions. Prol nbinv :............. {0, 1} Sémantique : nbinv (x, y) compte le nombre d'inversion dans le couple d'entiers (x, y). Autrement dit, nbinv (x, y) vaut.. si x > y et.. sinon Exemple nbinv........... = 0 nbinv........... = 1 let (nbinv :...) =... ;; 1 pt Q7. Décompte des inversions (5 min, 1 pt) Complétez la dénition de la fonction nbinv3. Prol nbinv3 :...................... {0, 1, 2, 3} Sémantique : nbinv3 (x, y, z) compte le nombre d'inversion dans le triplet d'entiers (x, y, z). C'est à dire le nombre de couples inversés parmi (x, y), (x, z), (y, z). Exemple nbinv3............... = 0 nbinv3............... = 3 nbinv3 (3, 1, 2) =.. nbinv3 (2, 1, 3) =.. let (nbinv3 :...) =...... ;; 6
2 pt Q8. Preuve de terminaison (10 min, 2 pt) Lorsque le triplet (x, y, z) est bien ordonné alors x y z et alors il ne contient plus aucune inversion. Complétez la preuve de terminaison de la fonction trier en prenant pour mesure le nombre d'inversions. TERMINAISON Preuve de terminaison : (i) Les arguments de la fonction............... sont............................................... la fonction.............................................................................................. (ii) Justions que la mesure choisie retourne des valeurs dans.... : Mesure (............) =.............................. {0, 1, 2, 3}... N d'après le prol de la fonction.............. (iii) Montrons que la mesure...................................... à.............. appel.............. : Pour (ii), on considère uniquement les équations qui comportent des.............................: Pour l'équation récursive (2) on doit montrer : Équation (2) appel initial { }} { trier (x, y, z) = appel récursif { }} {.......................... quand........... Mesure (............)? > Mesure (............) quand........... = =........................................................................................? >........................................................................................ quand........... ce qui se simplie en nbinv (....... ) =.....? > nbinv (....... ) quand........... ok > =..... donc on a bien Mesure (............) > Mesure (............) quand........... On ne demande pas la preuve de la terminaison de l'équation (3) qui est similaire. 7
Exercice 3 : La meilleure combinaison au poker (72min) 13 pt L'objectif de ce problème est d'écrire un programme qui détermine automatiquement la meilleure combinaison de carte à partir des deux cartes données au joueur en début de partie et de trois cartes posées sur la table. 3.1 Commençons par dénir le type des cartes On dénit un ensemble Famille et un ensemble Valeur où le symbole Valet correspond au valet, Dame à la dame et Roi au roi, on vous laisse libre de choisir comment réprésenter les cartes de 1 à 10 DÉFINITION MATHÉMATIQUE D'ENSEMBLES déf Famille = {,,, } déf Valeur = {2, 3,..., 10, Valet, Dame, Roi, As} 1 pt Q9. (4 min, 1 pt) Complétez les dénitions de type et d'ensembles ci-dessous, sachant qu'une carte est un couple qui indique la valeur et la famille de la carte. Attention à l'ordre dans lequel vous donnez les éléments du type valeur car on veut que 2 < 3 <... < 10 < Valet < Dame < Roi < As DÉFINITION INFORMATIQUE D'UN TYPE type famille =.. type valeur =.. DÉFINITION MATHÉMATIQUE D'UN ENSEMBLE déf Carte = {(v, f) v.............., f............... } =................................ DÉFINITION INFORMATIQUE D'UN TYPE type carte =... ;;.5 pt Q10. (2 min,.5 pt) Complétez la dénition de la fonction valeur-carte Prol valeur-carte :................................. Sémantique : valeur-carte (c) est la valeur de la carte c 8
Exemple valeur-carte (Roi, ) = Roi let... = ;;... 1 pt Q11. (5 min, 1 pt) Complétez la dénition de la fonction valeur-vers-chaine Prol valeur-vers-chaine : Valeur Chaîne Sémantique : valeur-vers-chaine (v) est la chaîne de caractères correspondant à la valeur v Exemples 1. valeur-vers-chaine (Roi) = "roi" 2. valeur-vers-chaine (...... ) = "as" 3. valeur-vers-chaine (.......... ) = "2" let (valeur-vers-chaine :...) = 9
3.2 Les règles du poker Au début de la partie, chaque joueur reçoit deux cartes (qu'on appelle sa main). On étale ensuite trois cartes face visible sur la table et chaque joueur essaie de constituer la meilleure combinaison de cartes à partir de ses 2 cartes connues de lui-seul et des 3 cartes de la table connues de tous les autres joueurs. Ensuite commencent les enchères, le blu, le goudron et les plumes ; à partir de ce moment-là il s'agit moins d'informatique que de psychologie et de western. 3.3 Les annonces du poker Pour avoir des chances d'emporter le tour le joueur doit trouver la meilleure annonce parmi les annonces suivantes 1 que l'on donne dans l'ordre décroissant : de la plus forte (le carré) à la plus faible (5 cartes orphelines, c'est-à-dire 5 cartes de valeurs diérentes) un carré : 4 cartes de même valeur un full : 5 cartes formant un brelan et une paire une double paire : 4 cartes formant deux paires un brelan : 3 cartes de même valeur une paire : 2 cartes de même valeur je me couche : 4 ou 5 cartes orphelines (ça ne vaut rien... inutile de bluer, mieux vaut passer le tour) La famille des cartes ne joue aucun rôle dans le poker. Par contre la valeur des cartes compte et permet d'ordonner deux combinaisons similaires : un carré d'as est plus fort qu'un carré de rois, qui est plus fort qu'un carré de dames,....75 pt Q12. Représentation des annonces (4 min,.75 pt) Complétez la dénition du type caml annonce qui permet de représenter les annonces du poker. On rappelle que la famille des cartes ne jouent aucun rôle au poker. DÉFINITION INFORMATIQUE D'UN TYPE type annonce = Carré of valeur Brelan of.. Paire of.. DoublePaire of.. Full of.. Jemcouche ;; 3.4 Recherche de la meilleure combinaisons de cartes Pour trouver la meilleure combinaison de 5 cartes, chaque joueur commence par construire la meilleure combinaison des deux cartes de sa main à l'aide de la fonction combiner de la question Q14. Ensuite on améliore cette combinaison à deux cartes en ajoutant une carte de la table, grâce à la fonction améliorer de la question Q15. On obtient ainsi une combinaison de 3 cartes qu'on améliore de la même manière en ajoutant la seconde carte de la table, puis en ajoutant la dernière carte de la table. On obtient nalement la meilleure combinaison de 5 cartes. Ces combinaisons peuvent contenir des cartes orphelines, il faut les éliminer de la combinaison an d'en faire une annonce. Dans ce problème on distingue donc deux types : le type annonce qui ne contient pas de carte orpheline. Les annonces sont le résultat de la recherche de la meilleure combinaison. 1 Dans ce problème on ne considère pas les suites mais vous pourrez vous amuser à le faire chez vous. 10
le type combinaison qui est utilisé pendant les étapes de recherche de la meilleure combinaison. Tant qu'on n'a pas pris en compte toutes les cartes de la table, les combinaisons conservent les cartes orphelines car celles-ci pourraient se combiner avec une prochaine carte de la table. 3.5 Représentation des combinaisons de cartes On représente les combinaison possibles à l'aide de diérents constructeurs : P(v) représente une paire, B(v) représente un brelan, C(v) un carré où v représente la valeur des cartes (on oublie la famille qui n'a pas d'importance) O2(o 1, o 2 ) représente deux cartes orphelines et O3(o 1, o 2, o 3 ) trois orphelines. Les valeurs o 1, o 2 et o 3 sont donc diérentes. F(v 1, v 2 ) représente un full (trois cartes de valeur v 1 et deux cartes de valeur v 2 ) Dp(v 1, v 2 ) représente une double paire (deux cartes de valeur v 1, deux cartes de valeur v 2 ). Bo(v, o) représente un brelan de v et une carte orpheline de valeur o. Po(v, o) représente une paire de v et une carte orpheline de valeur o. Poo(v, o 1, o 2 ) représente une paire de v et deux cartes orphelines de valeurs o 1 et o 2 diérentes. Nul représente le cas de 4 ou 5 cartes orphelines ; il est inutile de préciser leurs valeurs puisque cela ne vaut rien. 1 pt Q13. (6 min, 1 pt) Complétez la dénition du type combinaison. DÉFINITION INFORMATIQUE D'UN TYPE type combinaison = (* combinaison de 2 cartes *) P of valeur O2 of valeur * valeur (* combinaisons de 3 cartes *) B of... Po of... O3 of... (* combinaisons de 4 cartes *) C of valeur Dp of valeur * valeur Bo of... Poo of... (* combinaisons de 5 cartes *) F of... (* combinaisons de 4 ou 5 orphelines *) Nul ;; 11
1 pt Q14. (5 min, 1 pt) Complétez la dénition de la fonction combiner qui construit la main, c'est-à-dire la combinaison de départ à partir des deux cartes données au joueur. Prol combiner : Carte Carte Combinaison Sémantique : combiner (c 1, c 2 ) est la meilleure combinaison que l'on peut réaliser avec les cartes c 1 et c 2. C'est soit une paire, soit deux orphelines. Exemples 1. combiner (........, ), (........, )) = P(Roi) 2. combiner (Valet, ), (Dame, )) =......................................... let (combiner : carte * carte -> combinaison) =............ ;; 2 pt Q15. (15 min, 2 pt) Complétez la fonction suivante qui tente d'améliorer une combinaison en utilisant une carte supplémentaire de la table. An de ne pas oublier de cas, procéder de manière méthodique en considérant d'abord qu'on ajoute la carte à des combinaisons à deux cartes, puis à des combinaisons à trois cartes, etc. Prol améliorer : Combinaison Carte Combinaison Sémantique : améliorer (comb, carte) est la meilleure combinaison que l'on peut réaliser avec la combinaison comb et la carte c. Exemples 1. améliorer (P(Roi), (Roi, )) = B(Roi) 2. améliorer (P(Roi), (Dame, )) = Po(Roi, Dame) 3. améliorer (C(Roi), (Dame, )) = C(Roi) on ne peut pas améliorer un carré! 4. améliorer (O2(Valet, Dame), (Roi, )) = O3(Valet, Dame, Roi) 12
let (améliorer : combinaison * carte -> combinaison) = function (comb,carte) -> let.. = valeur-carte (...) in match... with (* améliorer une combinaison à deux cartes *) P(v1) O2(o1,o2) (* améliorer une combinaison à trois cartes *) B(v1) Po(v1,o) O3(o1,o2,o3) (* améliorer une combinaison à quatre cartes *) Bo(v1,o) Poo(v1,o1,o2) Dp(v1,v2) ;; 13
1.5 pt Q16. (5 min, 1.5 pt) Complétez les dénitions de types et la dénition de la fonction meilleure-combinaison. Pensez à utiliser les fonctions précédentes. DÉFINITION MATHÉMATIQUE D'ENSEMBLES déf Main = {(c 1, c 2 ) c 1, c 2 Carte} déf Table = {(c 1, c 2, c 3 ) c 1, c 2, c 3 Carte} DÉFINITION INFORMATIQUE D'UN TYPE type main =... ;; type table =... ;; Prol meilleure-combinaison : Main Table Combinaison Sémantique : meilleure-combinaison (m, t) est la meilleure combinaison de 4 cartes parmi les 2 cartes de la main m et les 3 cartes de la table t Exemple meilleure-combinaison ( ( (Roi, ), (Valet, ) ), ( (Roi, ), (Roi, ), (Roi, ) ) ) = C(Roi) Algorithme de la table. : On améliore la combinaison de départ à deux cartes en ajoutant une par une les cartes 14
let (meilleure-combinaison :... -> combinaison) = function (m,t) 3.6 Les annonces Avant d'abattre ses cartes et de montrer la combinaison qu'il a réalisée chaque joueur retire les cartes orphelines. Ce que le joueur annonce n'est donc pas de type combinaison mais de type annonce. L'intérêt du type annonce est qu'il interdit de mentionner les cartes orphelines et permet uniquement de représenter des combinaisons de cartes qui correspondent à des annocnes de poker : Carré, Full, Double Paire, Brelan, Paire, ou bien Je me couche..25 pt Q17. (1 min,.25 pt) Pour indiquer qu'on se couche, on a choisi le symbole Jemcouche. Pourquoi ne peut-on pas utiliser le symbole Nul du type combinaison dans le type annonce pour indiquer qu'on se couche?........................................................................................................................................................................................................ 1 pt Q18. Annonce d'une combinaison (8 min, 1 pt) Complétez la fonction annonce qui traduit la combinaison d'un joueur sous la forme d'une annonce : (1) en éliminant les cartes orphelines (2) en indiquant que le joueur se couche s'il n'a pas réussi à obtenir une combinaison correspondant aux annonces autorisées dans ce problème. (3) en ordonnant les double paires de manière à annoncer la paire la plus forte d'abord. À ce propos, on rappelle que les opérateurs de comparaison <,, =,, > sont de type T T Bool ce qui signie qu'ils sont valables pour tous les types, y compris le type valeur. Vous avez donc le droit de les utiliser pour comparer des valeurs de cartes. Prol annoncer :...................................................... Sémantique : Exemples 1. annoncer (Nul) = Jemcouche d'après (2) 2. annoncer (Po(Valet, Dame)) =................................ d'après...... 3. annoncer (O3(v 1, v 2, v 3 )) =........................... d'après...... 15
4. annoncer (Dp(Valet, Roi) =................................(Roi, Valet) d'après...... let (annoncer :...) = function P(v)...... ;; 16
Q19. Comparaison des annonces (10 min, 1.5 pt) Complétez la dénition du prédicat sup. 1.5 pt Prol sup : Annonce Annonce......... Sémantique : sup (a 1, a 2 ) indique si l'annonce a 1 est strictement supérieure à l'annonce a 2 Exemples 1. sup (................................(Roi, Dame),................................(Roi, Valet)) =......... 2. sup (................................(Dame, Valet),................................(Roi, Valet)) =......... 1 let (sup : annonce * annonce ->... ) = 2 function 3 Carré(v1), Carré(v2) 4 5 6 7 8 9 10 11 12 13 14 15 17
16 17 18 1.5 pt Q20. Le gagnant du tour (7 min, 1.5 pt) Complétez la dénition de la fonction gagnant. ( ) ( ) Prol gagnant : Chaîne Main Chaîne Main Table Chaîne Sémantique : gagnant ( ( ) ( ) j 1, m 1, j2, m 2, t ) est le nom du joueur (soit j1, soit j 2 ) qui a obtenu la meilleure annonce à partir des cartes de sa main et des cartes de la table ; la fonction retourne "exaequo" si les annonces sont équivalentes. let (gagnant :......) = function...... ;; 18