Introduction aux Langages de Programmation 24 septembre 2009 A Utiliser Lisp On fera bien attention à afficher toutes les étapes suivies par l’interprète au cours de ces évaluations. 1) Donnez toutes les étapes suivies par LISP lors de l’évaluation des commandes (blag 3), (blag 4), (blag 5) et (blag 6). (defun blag (nb) (if (< nb 3) nb (blag (- nb 2)))) ? (nbgrands ’(7 -5 28 -4 9)) = 2 3. Lesgrands : Écrivez une fonction de deux paramètres, l, une liste de nombres, et x, un nombre, et qui fabrique la liste de tous les nombres de l plus grands que x. ? (lesgrands ’(1 5 36) 2) = (5 36) 4. Racine : Soit un nombre entier positif n, donnez une fonction qui renvoie le nombre entier r qui est le plus petit nombre entier dont le carré soit supérieur ou égal à n. r2 ≥ n et ∀x ∈ N, x < r =⇒ x2 < n ? (racine 8) = 3 En effet, 32 = 9 qui est supérieur à 8. 2) Faire tourner à la main la fonction fol, voir Fig 1, avec comme paramètres 5, puis 6, puis 7, D Python puis 8. Que fait la fonction fol ? 1. Utiliser 3) Faire tourner la fonction qui, voir Fig 2, avec Faire tourner le fichier fol.py, voir Fig 3. comme paramètres 2 et 5, puis 4 et 6, puis 15 et Que font les fonctions folle et fol ? 21. Que fait la fonction qui ? 2. Écrire une fonction qui remplit une liste B Écrire Lisp avec les valeurs de 2i pour toutes les va1. Écrire une fonction LISP qui renvoie T si leurs de i de 0 à n (qui sera le paramètre son paramètre est le cube d’un nombre ende cette fonction). tier (et () sinon). 3. Écrire une fonction qui renvoie 1 si son ? (estcube 8) = T paramètre, entier, est le carré d’un nombre entier et 0 sinon. 2. Donnez une fonction récursive terminale qui fait la multiplication de deux nombres E C par additions successives. 1. Que fait la fonction aie (cf. figure 4) ? On la fera tourner avec, comme paramètres, C Listes en LISP les couples de valeurs, 3 et 4, 3 et 5, 6 et 2, 6 et 3. 1. Nbinversions : Nous dénommons une in2. Fibonacci. version, dans une liste de nombres, quand Écrivez une fonction itérative (pas récurun nombre positif succède à un nombre sive) qui donne la n-ième valeur de la suite négatif, ou le contraire. Vous allez maintede Fibonacci. nant écrire une fonction qui prend en paramètre une liste d’entiers, l, et qui compte 3. Écrire une fonction nbp qui renvoie le nombre le nombre de ses inversions. d’éléments positifs parmi les nb premiers éléments d’un tableau de nombres. La fonc? (nbinv ’(1 -5 36 32 1 -3 -5)) tion commencera par : = 4 2. Nbgrands : Écrivez une fonction qui prend en paramètre une liste l et qui renvoie le nombre de ses éléments qui sont plus grands que la moyenne de tous les éléments. int nbp (int tab[100], int nb) { Par exemple nbp ([2, -5, -6, 4, 7, -9], 4) renverra 2. 4. Écrire une fonction itérative qui calcule la puissance n d’un nombre a. (defun fol (n) (folle n 2 1 1)) 5. Écrire une fonction qui inverse un tableau (defun folle (a b c d) (if (= a 0) de n éléments (le premier devient le derb nier, etc.). n sera bien sûr fourni en argu(folle (- a 1) ment de la fonction. (- (+ b c) d) b c))) Figure 1 – fol de Lisp (defun qui (a b) (if (= a b) a (if (< a b) (qui a (- b a)) (qui (- a b) b)))) Figure 2 – qui en Lisp def folle(a): if (a/2)*2==a: return 0 return 1 def fol (n,p): i=1 while p > 0: if folle(p): i = i * n n = n * n p = p / 2 return i print fol(5,1) print fol(5,2) print fol(5,3) print fol(4,4) Figure 3 – fol.py int aie (int n, int m) { int p; p = 0; while (m > 0) { p = p + n; m = m - 1; } return p; } Figure 4 – Aïe en C