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 ?