L1 - UE Programmation Fonctionnelle
Transcription
L1 - UE Programmation Fonctionnelle
L1 - UE Programmation Fonctionnelle Année universitaire 2012-2013 TP évalué du 20/12/2012 Feuille 1/1 D’une durée de 2h, ce TP noté est à rendre à la fin de la séance. Sont autorisés : les transparents du cours, les notes manuscrites de l'UE, les supports de TD et de TP, les programmes réalisés (en TD et en TP) la connexion à l'ENT pour soumettre le projet Sont Interdit: La navigation sur Internet, Les autres documents électroniques Chaque binôme devra envoyer les 2 fichiers (linux.txt et caml.ml) par email à l’adresse suivante : [email protected] . L’objet de l’email devant être : « TP noté ocaml NOM_BINOME1 et NOM_BINOME2 » Partie 1 : Commandes Linux (<40min) Important : En plus d’exécuter les commandes dans un terminal, vous devez les recopier dans un fichier texte nommé « linux.txt » (pensez à numéroter les commandes). Pour obtenir la totalité des points il est recommandé de réaliser une unique commande par question 1. Créez dans votre répertoire personnel un dossier nommé exam. 2. Déplacez –vous dans le répertoire exam créé à la question précédente. 3. Donnez la commande permettant de trouver l’adresse absolue du répertoire dans lequel vous vous trouvez. 4. Créez quatre fichiers vides nommés exemple1.txt, exemple2.txt, exemple2bis.txt, demo.txt 5. Créez deux répertoires (dans le répertoire exam) nommés samples et save 6. A partir du répertoire exam, déplacez tous les fichiers « exemple » (ie : exemple1.txt, exemple2.txt, exemple2bis.txt) et mettez-les dans le répertoire samples 7. A partir du répertoire exam affichez le contenu du dossier samples 8. Toujours à partir du répertoire exam faites une copie du fichier exemple1.txt que vous nommerez exemple1.sav et que vous stockerez dans le répertoire save 9. Combinez ls et wc afin d’indiquer le nombre de fichiers contenus dans votre dossier personnel et ce quel que soit le répertoire dans lequel vous êtes 10. En redirigeant les sorties créez un fichier manuel_date qui contient le manuel de la commande qui permet d’obtenir la date. 11. Essayiez d’afficher les lignes contenant le mot bonjour dans le fichier fichier_inconnu (fichier qui n’existe pas) et enregistrez l’erreur obtenue dans un fichier error.txt 12. Lancez le programme emacs au premier plan (foreground ) puis faites le passer à l’arrière-plan (background) (pour cette question plusieurs commandes sont nécessaires). Partie 2 : Programmation Fonctionnelle OCaml Introduction : Créez un nouveau fichier « caml.ml ». Attention à bien respecter le type des fonctions demandées s’il est précisé. Les types et fonctions simples 13. Définissez un type familleArbre comme étant de manière exclusive un Feuillu ou un Conifere. 14. Définissez un type foret qui se compose d’un entier représentant le nombre d’arbre, d’un réel représentant la surface de la forêt et d’un type qui caractérise de quelle famille d’arbres se compose la forêt. 15. Créez une forêt f1 de conifères avec 2800 arbres qui s’entendent sur une surface de 3210,9 m² et une forêt f2 de feuillus avec 2350 arbres et une surface de 3045.2m² 16. Ecrivez la fonction densite qui prend une forêt en argument et qui retourne la densité d’arbres (surface divisée par le nombre d’arbres) Le type de la fonction doit être : val densite : foret -> float = <fun> Les listes 17. Créez une liste l1 composée des réels : 1.25 2.35 -3.55 4.66 -5.88 18. Créez la fonction oppose qui change le signe des éléments d’une liste de réels 19. Créez la fonction somme récursive terminale qui pour une liste de réels, retourne la somme des éléments qui la compose, on impose à cette fonction de déclencher une erreur si la liste est vide. Les arbres 20. Déclarez un type arbre ternaire (générique) 21. Créez un arbre ternaire a1 composé avec au minimum 5 entiers et un arbre ternaire a2 avec au minimum 3 réels. 22. Créez la fonction récursive nbPair qui compte le nombre d’éléments pairs contenus dans un arbre ternaire composé d’entiers. 23. Créez la fonction récursive convertir qui transforme un arbre ternaire d’entiers en un arbre ternaire composé de réels. 24. Créez un arbre ternaire qui se compose de 2 éléments du type foret (cf. questions 15) LE BONUS Le code de César (1er siècle av. J.-C.) est une des premières fonctions de cryptage des messages. Son fonctionnement est simple, on choisit un chiffre i entre 1 et 26 puis à chaque lettre du message va être associée la ieme lettre qui le suit dans l’alphabet. Exemple avec i = 3 : A-->D, B-->E et Z -->C 25. Créez une liste l2 qui contient les caractères suivants : I, N, F, O. 26. Créez une fonction code qui prend en paramètre une liste de caractères et un entier puis qui retourne la liste codée des caractères. Vous pouvez utiliser les fonctions int_to_char() et char_to_int() mais notez que : A <-> 65, B <-> 66 … Z <-> 90