UPMF Grenoble 2 – L1 MIASHS INF F2 – Programmation fonctionnelle TM SCHEME n°2 : Premières fonctions 1. Conversion de températures Écrire une fonction permettant de convertir une température exprimée en degrés Celsius en une température équivalente en degrés Fahrenheit, sachant que : 9 F = C+ 32 5 Écrire une fonction permettant de faire la conversion inverse. 2. Correction de fonctions Les définitions de fonction suivantes présentent toutes un défaut. Les critiquer, en fournir les spécifications et les corriger. (define (volumeSphere r) (* 4/3 pi) (* r (* r r))) (define (f x y z) y) (define (successeur x) (x + 1)) (define (carre) (* x x)) (define (aireTriangle triangle) (* 0.5 (* base hauteur))) (define (sommeDeCarres (carre x) (carre y)) (+ (carre x) (carre y))) 3. Exercices sur les chaînes 3.1 Conjugaison au futur Écrire une fonction qui, étant donné l'infinitif d'un verbe régulier du premier groupe, fournit sa conjugaison au futur de l'indicatif. Par exemple, pour le verbe chanter, le résultat est l'affichage des chaînes je chanterai, tu chanteras, il ou elle chantera, nous chanterons, etc. La tester en lisant l'infinitif au clavier. 3.2 Des figues ? On se propose maintenant d'écrire des Fonctions d'Intérêt Général (des FIG, d'où le pitoyable calembour du titre de cet exercice). Le but de cet exercice est de produire un fichier contenant un ensemble de définitions de fonction qui pourront par la suite être utilisées dans divers exercices. Pour pouvoir définir certaines de ces fonctions, il est nécessaire d'utiliser DrScheme en mode Advanced Student (menu Language/Choose Language). Écrire une fonction lireChaine permettant lire au clavier une chaîne de caractères ne contenant pas d'espaces sans qu'il soit nécessaire de la délimiter par des ". L'utilisation de la fonction prédéfinie symbol->string peut être utile. Sachant que la fonction prédéfinie string-length permet de connaître la longueur d'une chaîne de caractères, écrire les fonctions premier, dernier, debut et fin, permettant respectivement d’obtenir à partir d’une chaîne, son premier caractère, son dernier caractère, la sous-chaîne composée des caractères de la chaîne à l’exception du dernier et la sous-chaîne composée des caractères de la chaîne à l’exception du premier. Écrire une fonction carChaine permettant d’ajouter un caractère au début d’une chaîne premier argument ((carChaine #\B "onjour") renvoie "Bonjour", par exemple). Ecrire une fonction chaineCar permettant d’ajouter un caractère en fin de chaîne ((chaineCar "Bonjour" #\s) renvoie "Bonjours", par exemple). Sauvegarder toutes ces définitions dans un fichier appelé chaines.ss. 3.3 Retour au présent Reprendre l'exercice 3.1 pour la conjugaison au présent de l'indicatif. Afin de pouvoir utiliser les définitions obtenues en 3.2, on peut simplement utiliser la fonction prédéfinie load, qui prend en paramètre une chaîne ayant pour valeur le nom complet d'un fichier source Scheme et en évalue les expressions. 3.4 Nom, Prénom, Profession ? Écrire un programme demandant à l'utilisateur de taper un nom, puis un prénom, puis une profession, et affichant à l'écran une phrase de la forme "<prénom> <nom> est <profession>. Ses initiales sont <initiales>". 4. Travail sur les durées … s'il reste du temps 4.1 Affichage Jours-Heures-Minutes-Secondes Reprendre l'exemple de conversion d'un nombre de secondes à afficher en jours, heures, minutes et secondes correspondant : définir 3 fonctions permettant de calculer respectivement le nombre de jours, heures ou minutes entiers compris dans une durée exprimée en secondes, définir 4 fonctions sans retour permettant respectivement d'afficher une durée exprimée en secondes aux formats : - "<nbjours> jours, <nbheures> heures, <nbmin> minutes et <nbsec> secondes", - "<nbheures> heures, <nbmin> minutes et <nbsec> secondes", - "<nbmin> minutes et <nbsec> secondes", - "<nbsec> secondes". terminer le programme par une saisie d'un nombre de secondes au clavier et l'affichage en jours, heures, minutes et secondes à l'écran. 4.2 Conversion en secondes Définir une fonction permettant de transformer une durée exprimée en jours, heures, minutes et secondes en un nombre équivalent de secondes. 4.3 Comparaison de durées Définir une fonction renvoyant vrai si et seulement si, de 2 durées exprimées en jours, heures, minutes et secondes, la première est inférieure à la deuxième. Écrire sa définition sous 2 formes, l'une utilisant la fonction obtenue en 4.2, et l'autre ne l'utilisant pas.