Université M’Hamed Bougara de Boumerdes 2019-2020
Faculté des sciences - Département d’informatique
Promotion : Licence 3 année
Module : Paradigme de programmation
Série 1 : Concepts de base
Question de cours :
Qu'est-ce qu'un paradigme de programmation ?
Quel sont les différents classes de paradigme ?
Existe-elle une relation entre les paradigmes de programmation et les langages de programmation ?
Qu’est-ce qu’un paradigme fonctionnel ?
Exercice 1 : Saisir les lignes suivantes et noter les résultats.
5 ;; let b = ‘’les L3’’ ;;
5. ;; a^b ;; ceil(1.5) ;;
‘a’ ;; 1=2 ;; 1- 2 ;;
1- 2- 3 ;;
’’ bonjour ‘’ ;; let l1=[] ;; 1- -2 ;;
True ;; let l2=[1. ;7. ;2.5] ;; 1>2 – 1 ;;
(10,’a’) ;; let n =(1,2.) ;; ‘’hello world’’.[6] ;;
[1 ;2 ;7 ;5 ;7] ;; let b = true ;; ‘’hello world’’.[11] <- ‘s’ ;;
1.1e+2 ;; floor(1.6) ;; [Link] ‘a’ ;;
cos 3.14 ;; int_of_float(5.1) ;; (((()))) ;;
let x =5 ;; char_of_int(5) ;; ((((*1*)))) ;;
let y = 10 ;; float_of_int(5) ;; ((*((()*))
let a = ‘’bonjour’’ ;; int_of_char(‘5’) ;;
Exercice 02: Quelles sont les expressions correctes ? Pour les expressions correctes, donner leurs
types et valeurs. Pour les autres, expliquer pourquoi il y’a erreur.
Let x = 1 in x ;; Let x = 1 in let x = x in x ;;
Let x = x in let y = x in y ;; Let a’ = 1 in a’ +1 ;;
Let x = 1 and y = x in y ;; Let’a=1 in ‘a+1 ;;
Let x = 1 and x = 2 in x ;; Let a’b’c=1 in a’b’c ;;
Let x x = x+1 in x 2 ;; Let (+) x y z = x+y+z in 5 + 67 ;;
Let rec x x = x +x in x 2 ;; Let (++) x = x +1 in ++x ;;
Let (-) x y = y – x in 1- 2- 3 ;; Let (++) f g x = f (g x) in
Let rec (-) x y = y – x in 1- 2- 3 ;; Let f x = x +1 in let g x = x *2 in (f++g) 1 ;;
Exercice 03 :Pour chacun des types suivants donner un exemple de fonction :
Int ->int->intint->int->bool
int->float->string int->float->bool
'a -> 'a -> 'a -> 'a 'a -> ('a -> 'a) -> 'a
('a -> 'b) list -> 'a -> 'b list (int ->bool) list ->int ->bool list
(int*bool) list ->bool('a*'a -> 'b) -> 'a -> 'b
Exercice 04 : Quelles sont les valeurs des expressions suivantes :
Let x = 1 in let x = x +1 in x ;; Let f x = x +y in
Let x = 1 in let f y = x in let x = 2 in f 0 ;; Let f x =let y = 3 in f y in f 5 ;;
Let f x = x-1 in let f x = f (x -1) in f 2 ;; Let rec factorial i = if i = 0 then 1 else
1*factorial (i-1) in factorial 5 ;;
Let y = 2 in
Exercice 05 : Ecrire les fonctions suivantes et noter le type à chaque fois
a- Une fonction qui prend deux entiers et retourne leur somme ;
b- Une fonction qui calcul la somme de trois nombres flottants ;
c- Une fonction qui prend trois arguments et retourne la liste qui les contient ;
d- Une fonction qui prend deux chaînes de caractères et retourne leur concaténation ;
e- Une fonction qui prend un couple d’entiers et retourne leur somme ;
f- Une fonction qui prend deux entiers et retourne leur min ;
g- Une fonction qui prend trois entier et retourne leur moyenne.
Exercice 6 : Ecrire une fonction qui prend en argument deux bornes n et m et une fonction et calcule
sum n m f = ∑i=nmf(i)
Exercice 7 :Ecrire en Ocaml une fonction qui calcule le pgcd en utilisant cet algorithme. Ecrire la
fonction sans utiliser l’affectation.
gcd (n,m) =
while ~(m =n)
If n > m
n <- n – m
else
m <- m –n
return
Exercice 8 : Ecrire une programme carre qui prend en entré une liste des entiers et donne en sortie la
liste des carrés des entiers.
Exercice 9 : Généraliser l'exercice précédent, en donnant une fonction app qui s'applique à une
fonction arbitraire, donnée comme argument, à chaque élément d'une liste. Par exemple : app (fun x ->
x*x) [1 ;2 ;3] évalue à [1 ;4 ;9].
Exercice 10 : Ecrire une programme somme qui prend en entré une liste des entiers et donne en sortie
la somme des entiers.
Exercice 11 : En utilisant la fonction maxx de l'exercice 3, écrire une programme maxlist qui prend en
entré une liste des entiers et donne en sortie le maximum entre 0 et les entiers dans la liste.
Exercice 12 : Généraliser les deux exercices précédents, en donnant une fonction itera qui s'applique à
une fonction binaire f, une liste [e1 ;e2 ;...] et une argument x d'égal type que les éléments de la liste,
et donne comme résultat l'itérations de f aux éléments de la liste plus x. C'est-à-dire : itera f [e1 ;e2 ; ...
en] x évalue à f e1 (f e2 ... (f en x)...) Exemple : iteraadd [4 ;2 ;5] 0 évalue à 11 itera max [4 ;2 ;5] 0
évalue à 5
Exercice 13 : Ecrire une fonction ordered qui prend une liste des nombres entiers en entré et rend en
sortie true si les entiers sont en ordre croissant sinon false.