Coservatoire Natioal des Arts et Métiers 292 rue Sait-Marti 75141 PARIS Cedex 03 0 Équipe pédagogique «Statistique et Bioiformatique» Corrigé de l exame du 4 février 2016 TITRE DE L ENSEIGNEMENT : Iitiatio à la programmatio (BNF102) Nature de l eseigemet : Cours Cycle : B Idice : B Nombre de pages : 5 Nom du resposable : Pr. Jea-Fraçois ZAGURY Aée uiversitaire : 2015/2016 1 ère sessio Documets autorisés : aucu * * * Les deux premières questios sot otées sur 7 poits, la derière sur 6 poits. Problème N o 1 Le triagle de Pascal, du om de so iveteur 1, est u algorithme igéieux qui permet de détermier les coefficiets du biôme, jusqu à ue certaie valeur, sas avoir à les calculer. Les coefficiets du biôme pour la puissace sot les coefficiets du polyôme résultat du développemet de l expressio (a + b). Aisi, pour = 4 : 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 O a bie : (a + b) 4 = a 4 + 4a 3 b + 6a 2 b 2 + 4ab 3 + b 4 O démotre par récurrece que les coefficiets de ce polyôme sot, pour chaque valeur de (l exposat du biôme) et pour chaque valeur de (l exposat de b pour la coloe du triagle), selo le système de otatio choisi : = C La formule mathématique qui doe le résultat directemet est doc : or : (a + b) = =0 a b 1. E fait Pascal avait des précurseurs persas, comme al-karaji (953-1029) ou Omar Khayyam au XI e siècle, marocai, comme Ib al-baa au XIII e siècle, chiois, comme Jia Xia au XI e siècle et d autres Europées comme Peter Apia et Michael Stifel e Allemage, Tartaglia e Italie et Fraçois Viète au Poitou. Mais Blaise Pascal fut le premier à publier u exposé complet des 19 propriétés remarquables de ce triagle.
2 = 1 + 1 1 Parmi les propriétés remarquables de ce tableau triagulaire de ombres o ote les suivates : = C = 1 = C 0 = 1 0 d où il résulte que le premier et le derier coefficiet de chaque lige du triagle serot égaux à 1. O e déduit l algorithme de costructio du triagle de Pascal : 1 Algo : P a s c a l 2 Doées : ; ; pour (a + b) 3 Soit : T t a b l e a u c a r r é de +1 l i g e s 4 pour i a l l a t de 0 à f a i r e 5 T[ i, 0 ] 1 ; ; p r e m i è r e c o l o e à 1 6 f i pour 7 pour i a l l a t de 1 à f a i r e 8 pour j a l l a t de 1 à i 9 T[ i, j ] T[ i 1, j 1] + T [ i 1, j ] 10 f i pour 11 f i pour O vous doe les procédures utilitaires suivates, que vous devrez utiliser pour écrire vos programmes : pour costruire u tableau carré, réalisé comme u vecteur de liges, chacue costituée d u vecteur de valeurs égales à 0 : 1 ( defie ( fabriquer tableau carre ) 2 ( l e t ( ( le tableau (mae vector #f) ) ) 3 (do ( ( i 0 (+ i 1 ) ) ) 4 ((= i ) le tableau ) 5 ( vector set! le tableau i (mae vector 0 ) ) ) ) ) pour accéder à ue lige de ce tableau : 1 ( defie ( e x t r a i r e l i g e tableau um lige ) 2 ( vector ref tableau um lige ) ) pour accéder à ue case de ce tableau : 1 ( defie ( valeur case tableau um lige um col ) 2 ( vector ref ( e x t r a i r e l i g e tableau um lige ) um col ) ) pour placer ue valeur das ue case du tableau : 1 ( defie ( a f f e c t e c a s e! tableau um lige um col val ) 2 ( vector set! ( e x t r a i r e l i g e tableau um lige ) um col val ) )
3 pour afficher le coteu du tableau, à l exclusio des valeurs égales à 0 : 1 ( defie ( a f f i c h e tableau ) 2 ( l e t ( ( ( vector legth tableau ) ) ) 3 (do ( ( i 0 (+ i 1 ) ) ) 4 ((= i ) ) 5 (do ( ( j 0 (+ j 1 ) ) ) 6 ((= j ) 7 ( ewlie ) ) 8 ( l e t ( ( v ( valeur case tableau i j ) ) ) 9 ( i f ( ot ( zero? v ) ) 10 ( display v ) ) 11 ( display #\ space ) ) ) ) ) ) Répose : Il vous est demadé d écrire le programme Scheme qui affichera le triagle de Pascal, pour ue certaie valeur de. 1 ( defie ( p a s c a l ) 2 ( l e t ( (T ( fabriquer tableau carre (+ 1 ) ) ) ) 3 (do ( ( i 0 (+ i 1 ) ) ) ; ; i i t i a l i s a t i o de l a 4 ( (> i ) ) ; ; première coloe à 1 5 ( a f f e c t e c a s e! T i 0 1 ) ) 6 (do ( ( i 1 (+ i 1 ) ) ) ; ; o commece à 1 7 ( (> i ) ) ; ; o s a r r ê t e à 8 (do ( ( j 1 (+ j 1 ) ) ) ; ; o a f f e c t e à chaque 9 ( (> j i ) ) ; ; case l a somme des v a l e u r s 10 ( a f f e c t e c a s e! T i j ; ; des c a s e s i 1, j 11 (+ ( valeur case T ( i 1) ( j 1 ) ) ; ; e t i 1, j 1 12 ( valeur case T ( i 1) j ) ) ) ) ) 13 T) ) Problème N o 2 Le programme doit maiteat être mis sous la forme d u module compilable pour produire u fichier biaire exécutable qui sera ivoqué de la faço suivate, à l ivite du shell, si le biaire se omme par exemple pascal et si l o veut par exemple aller jusqu à = 8 pour otre triagle :./pascal 8 O rappelle : que la lige de commade d appel de ce programme est trasmise au programme sous la forme d ue liste, das otre cas cette liste sera doc : (./pascal 8) que la forme géérale de l e-tête d u tel module est : ( module <om du module> (mai <om de l a procédure i i t i a l e > ) )
4 ( defie (<om de l a procédure i i t i a l e > Args ) ( l e t ( ( ( cadr Args ) ) )... Répose : Vous écrirez ce programme compilable ; pour les procédures déjà vues pour la questio précédete vous écrirez sur votre copie que la première lige de chacue, c est-à-dire so prototype précédé de (defie. 1 ( module pascal moo 2 (mai i i t ) ) 3 4 ( defie ( i i t argv ) 5 ( l e t ( (N (strig >umber ( cadr argv ) ) ) ) 6 ( a f f i c h e ( p a s c a l N) ) ) ) 7 8 ( defie ( p a s c a l ) Problème N o 3 Nous disposos désormais du programme suivat : 1 (module p a s c a l 2 (mai i i t ) ) 3 4 ( defie ( i i t argv ) 5 ( l e t ( (N (strig >umber ( cadr argv ) ) ) ) 6 ( a f f i c h e ( p a s c a l N) ) ) ) 7 8 ( defie ( p a s c a l ) 9 ( l e t ( (T ( fabriquer tableau carre (+ 1 ) ) ) ) 10 (do ( ( i 0 (+ i 1 ) ) ) ; ; i i t i a l i s a t i o de l a 11 ( (> i ) ) ; ; première coloe à 1 12 ( a f f e c t e c a s e! T i 0 1 ) ) 13 (do ( ( i 1 (+ i 1 ) ) ) ; ; o commece à 1 14 ( (> i ) ) ; ; o s a r r ê t e à 15 (do ( ( j 1 (+ j 1 ) ) ) 16... ; ; à compléter i c i 17 T) ) 18 19 ( defie ( fabriquer tableau carre ) 20... 21 22 ( defie ( e x t r a i r e l i g e tableau um lige ) 23... 24 25 ( defie ( a f f e c t e c a s e! tableau um lige um col val ) 26... 27 28 ( defie ( valeur case tableau um lige um col ) 29...
5 30 31 ( defie ( a f f i c h e tableau ) 32... Il vous est demadé de le diviser e deux modules : utile, qui comportera les ciq derières procédures du listig ci-dessus et qui exportera les procédures écessaires à pascal ; pascal, qui comportera les procédures iit et pascal, et qui importera ce qu exporte utile. O rappelle que la sytaxe pour exporter, par exemple, la procédure affiche est : 1 (module u t i l e 2 ( export ( a f f i c h e tableau ) ) 3... Répose : Fichier pascal-multi.scm : 1 (module p a s c a l 2 (mai i i t ) 3 ( import u t i l e ) ) 4 5 ( defie ( i i t argv ) 6 ( l e t ( (N (strig >umber ( cadr argv ) ) ) ) 7 ( a f f i c h e ( p a s c a l N) ) ) ) 8 9 ( defie ( p a s c a l ) 10 ( l e t ( (T ( fabriquer tableau carre (+ 1 ) ) ) ) Fichier utilitaires.scm : 1 (module u t i l e 2 ( export ( fabriquer tableau carre ) 3 ( a f f e c t e c a s e! tableau um lige um col val ) 4 ( valeur case tableau um lige um col ) 5 ( a f f i c h e tableau ) ) ) 6 7 ( defie ( fabriquer tableau carre ) Il faut e outre fourir au compilateur le fichier.afile suivat : 1 ( ( p a s c a l pascal multi. scm ) 2 ( u t i l e u t i l i t a i r e s. scm ) )