INF112 : Introduction à la programmation
fonctionnelle
Fiche de TP (N°1)
Exercice 1 :
1 Écrire une fonction en Haskell permettant de déterminer le PGCD de 2 entiers positifs pris
en paramètre.
𝑎 𝑜𝑢 𝑏 𝑠𝑖 𝑎 = 𝑏
𝑝𝑔𝑐𝑑(𝑎, 𝑏) = ,𝑝𝑔𝑐𝑑(𝑎 − 𝑏, 𝑏) 𝑜𝑢 𝑏 𝑠𝑖 𝑎 > 𝑏
𝑝𝑔𝑐𝑑(𝑎, 𝑏 − 𝑎) 𝑜𝑢 𝑏 𝑠𝑖 𝑎 < 𝑏
2 Ecrire une fonction en Haskell permettant de déterminer le PPCM de 2 entiers positifs pris
en paramètre.
3 Écrire une fonction qui calcule la somme des n premiers entiers impairs positifs.
4 Écrire une fonction qui calcule le reste et le quotient de la division entière de deux
entiers.
5 Écrire deux fonctions myMin et myMax qui prennent chacune deux arguments et
renvoient respectivement le minimum et le maximum des deux arguments.
6 À partir de ces fonctions, codez une fonction qui donne le minimum ou le maximum de 4
nombres.
7 En utilisant myMin et myMax, codez une fonction bornerDans qui prend trois
arguments et renvoie le troisième argument s’il est dans l’intervalle formé par les deux
premiers, ou renvoie la borne de l’intervalle la plus proche. Exemples :
bornerDans 5 7 6 = 6 -- dans l'intervalle
bornerDans 5 7 4 = 5 -- trop petit
bornerDans 5 7 9 = 7 -- trop grand
8 Écrivez la fonction sommeChiffres qui calcule la somme des chiffres décimaux d’un entier
naturel n. (Par exemple, pour n = 124 le résultat doit être 1 + 2 + 4 = 7.)
9 Écrire une fonction en Haskell permettant de déterminer si un entier positif pris en paramètre
est premier ou non.
10 Écrivez une fonction qui, étant donné deux points A et B, calcule la distance [AB].
11 Écrivez une fonction qui permet de résoudre la suite suivante :
𝒖6 = −2
4
𝒖𝒏 = 3 + 4 ∗ 𝒖𝒏=>
12 Écrivez les fonctions qui effectuent les sommes suivantes :
> (=>)EFG >
∑@AB6 𝑖 , ∑@AB6 𝑖C , ∑@DB>
D
, ∑@DB>
D
et ∑@DB>
DH
Exercice 2 :
Une équation de second est défini par : aX + bX2 + C. Ou a,b,c sont des coefficient réels. Le but
de cet exercice est de résoudre ce style d’équation.
1- En sachant que les solutions d’une telle équation peuvent être soit un singleton (cas ou delta
est égal à zéro) ou soit un couple (cas ou delta est supérieur à zéro) ; créer un type de donné
nommé Resultat ou le constructeur est soit un singleton soit un couple.
2 – En faisant usage du type Resultat donné la signature de la fonction snddegres
3 – Écrire la fonction complète snddegres qui permet de résoudre une équation de degrés deux
Exercice 3 :
On souhaite écrire un ensemble de fonction qui manipule les jours de la semaine.
1 – créer le type Jours
2 – Écrire une fonction qui prend un jour et dit si c’est le week-end ou un jour de travail.
3 - Écrire une fonction qui pour un jour de la semaine renvoi le numéro correspondant
Exemple : lundi a pour numéro correspondant 1
Dimanche = 7
Exercice 4 :
Soit la signature suivante
exo :: (Integer, Integer) → (Integer, Integer) → Integer
on souhaite récrire la même signature mais en utilisant la syntaxe suivante
exo :: Couple → Couple → Integer
1- écrire la ligne de code nécessaire pour ce renommage.
2 - En utilisant donc la nouvelle signature écrire la fonction qui calcule le produit scalaire de
deux vecteurs. (a, b) (c, d) = (a*c) + (b*d)