Le texte de votre second partiel

Transcription

Le texte de votre second partiel
Introduction aux
Langages de Programmation
28 septembre 2011
plog(N,Ls) :- plog(N,[],Ls).
plog(0,Rs,Rs).
plog(N,Bs,Rs) :- M is N - 1,
plog(M,[N|Bs],Rs).
Table 1 – prédicat plog
A.
PROLOG
1. Vous trouverez dans la table 1 le prédicat plog et
vous détaillerez ce que fait Prolog et ce qu’il renvoie
lors de l’exécution des requêtes suivantes :
(define (hup n p)
(if (< n p)
(/ 1 (hupp n p 1))
(hupp n p 1)))
(define (hupp n p l)
(if (= n 0) l
(hupp (- n 1) p (* p l))))
(define (dac l)
(if (pair? l)
(dacc l 1 0)
0))
(define (dacc l n r)
(if (pair? l)
(dacc (cdr l) (+ n 1)
(+ r (hup n (car l))))
r))
?- plog(2,Ls).
?- plog(4,[0,1,2,3,4]).
?- plog(5,[1,2,3,4]).
2. Écrivez maintenant un prédicat Prolog qui fait la
somme de tous les éléments de la liste, supposés
numériques, de son premier argument.
?- soml([0,1,2,3,4],N).
N = 10
Yes.
int cal (int m, int n) {
if (m == 0) {
return n + 1;
}
else {
if (n == 0) {
return cal (m - 1, 1);
}
else {
return cal (m - 1, cal (m, n - 1));
}
}
}
Table 3 – Lisp, fonctions
public static int toto (int[] tab, int n) {
int i, a;
i = 0;
a = tab[0];
while (i < n) {
if (tab[i] > a) {
a = tab[i];
}
i = i + 1;
}
return a;
}
Table 4 – méthode java
C.
1. Faites tourner la fonction bil avec les arguments que
vous trouverez dans la table 5.
2. Soit l une liste de listes de nombres, et soit un
nombre, x, écrire une fonction Python qui compte
ne nombre de fois que x apparaît dans l.
Table 2 – fonction cal en C
B.
LISP
1. Faites tourner la fonction dac (table 3) avec comme
argument la liste ’(5 4 3 2 1).
2. Soient l, une liste de listes de nombres, et x, un
nombre, écrire une fonction Lisp qui enleve la première occurence (présence) de x dans l.
>(getout 7 ’(9 8 6 7 2 3 7 71 8))
= (9 8 6 2 3 7 71 8)
Python
print nbfois( 7, [9,8,6,7,2,3,7,71,8])
2
D.
C
1. Faites tourner la fonction cal du tableau 2 avec les
valeurs (0,1), (0,2), (0,3), (0,4), (0,5), (0,6),
(1,1), (1,2), (1,3), (1,4), (1,5), (1,6),
(2,1), (2,2), (2,3), (2,4), (2,5), (2,6),
(3,1), (3,2), (3,3), (3,4), (3,5) et (3,6). Ce sera plus
facile si vous mémorisez les résultats, n’est-ce pas ?
2. Écrivez une fonction qui prend un argument entier, x, et renvoie le plus grand entier, p, tel que la
def video (a,b):
if a < b:
return a
else:
return video (a - b, b)
def bil (n):
if n > 0:
return bill(n,0)
else:
return 0
def bill (n, a):
if n > 0:
if video(n,3)==0 :
return bill (n-1, n * n * n + a)
if video(n,3)==2 :
return bill (n-1, n * n + a)
if video(n,3)==1 :
return bill (n-1, n + a)
else:
return a
print bil(4)
print bil(5)
print bil(9)
Table 5 – Python
#!/bin/sh
case $# in
0) echo "usage: $0 nombres"
;;
1) echo $1
;;
*)
cand=$1
for i
do
if test $i -gt $cand
then
cand=$i
fi
done
echo $cand
;;
esac
Table 6 – petit shellscript
c. Récursif terminal
Programmez de façon récursive terminale ou itérative
cette suite.
d. Listes
somme de tous les entiers inférieurs ou égaux à p Programmez de façon cette suite en mettant les valeurs
soit inférieure à x. Exemple :
au fur et à mesure dans une liste et en utilisant les valeurs
de la liste pour calculer les suivantes.
plgdp(12) = 4
puisque 0 + 1 + 2 + 3 + 4 = 10
F. Shell
3. Écrivez une fonction qui renvoie la moyenne des
n éléments d’un tableau d’entiers t (t et n seront
fournis comme arguments à cette fonction qui renvoie un nombre entier).
E.
Fonction élégante
Dans cette partie vous choisirez le langage de programmation à utiliser parmi les langages enseignés, Lisp ? Python, C, Java, Prolog ou Shell. Si une liste doit être utilisée, le mot peut, à votre convenance, être remplacé par
tableau.
Soit la suite numérique suivante :
f (0) = 1
f (1) = 1
f (2) = 2
f (n − 1) × f (n − 2)
f (n) =
f (n − 3)
a. Calcul
Donnez les dix premières valeurs de cette liste.
b. Récursif
Programmez de façon récursive cette suite.
1. Écrire un script permettant d’afficher tous les fichiers présents dans le répertoire donné en argument.
2. Écrire un script permettant de savoir si un fichier
dont le nom est donné en paramètre existe dans le
répertoire donné en argument.
3. Écrire un script récursif permettant de savoir si un
fichier dont le nom est donné en paramètre existe
dans l’un des sous-. . . répertoires du répertoire donné
en argument.
G.
Projets
Donnez le nom de votre binôme (celui, celle qui a travaillé
avec vous) et l’énoncé de votre projet.
De quelle partie de ce projet êtes-vous fier, que pouvezdire pour expliquer ce qu’elle fait et comment vous l’avez
programmée ?