Introduction aux Langages de Programmation

publicité
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
Téléchargement