Vous êtes sur la page 1sur 9

Devoir Informatique

Le 06/01/10 BCPST1, Lyce Corneille Vous devrez rendre 3 copies : Une copie pour les exercices 1 et 4 Une copie pour les exercices 2 et 5 Une copie pour les exercices 3 et 6
Exercice 1 (4 points) On considre la suite ( )n0 dfinie par

1) Ecrire un programme demandant n lutilisateur et renvoyant la valeur de un. 2) Afficher le contenu des variables de votre programme chaque tape pour n = 3. 3) Combien doprations (additions, multiplications, affectations) votre programme fait-il au total ? 4) Modifier votre programme de manire ce quil calcule la somme des n premiers termes de cette suite. Exercice 2 (3 points) Les nombres 46 et 96 possdent la proprit suivante : leur produit ne change pas si lon permute leurs chiffres. En effet : 46*96= 64*69=4416. 1) Ecrire une fonction decomposer qui, tant donn n permet de renvoyer en paramtres les chiffres a et b qui composent n (a chiffre des dizaines et b celui des units) 2) Ecrire la fonction [p] = produit (n,m), qui partant de deux nombres entiers n et m permet de calculer les 2 produits dcrits au dbut de lexercice puis renvoie dans le boolen p la valeur vraie si le nombre vrifie la proprit et la valeur faux sinon. 3) Ecrire un programme affichant tous les couples de nombres de deux chiffres qui vrifient cette proprit. Exercice 3 (3 points) La commande zeros(n,m) permet de crer un tableau de taille (n,m) dont tous les coefficients valent 0. On considre la fonction suivante : function[p]=Mystere(n) p=zeros(n+1,n+1); p(1,1)=1 ; for i=2 :n+1 do p(i,1)=1 ; for j=2 :i do p(i,j)=p(i-1,j-1)+p(i-1,j) ; end end endfunction 1) Ecrire le tableau p obtenu si lon calcule Mystere(4). 2) Que fait la fonction mystre ? 3) Ecrire un programme demandant un entier n lutilisateur et renvoyant la valeur de

Exercice 4 (3 points) On pose pour tout n 0, Sn = On peut montrer que la suite (Sn)n0 tend vers e. 1) Ecrire une fonction [f] = factorielle (k) qui calcule k ! 2) Ecrire un programme permettant de faire afficher le plus petit entier n tel que Sn > 2,7 Exercice 5 (4 points) Soit n un entier non nul et T un tableau une ligne de taille n. On dit que T est un drangement, si T est form en utilisant exactement une fois chaque entier de 1 n de tel sorte que lentier i ne soit pas en position i. 1) Ecrire une fonction [bool]=derangement(T) qui teste si un tableau est un drangement, si cest le cas bool reoit la valeur vraie. 2) Soit T un drangement, on veut construire un tableau P (de mme taille que T) de la faon suivante : si lentier j apparait la position i dans le tableau T alors on met la valeur i la position j du tableau P. Exemple : si T = [5 3 1 2 4] alors P = [3 4 2 5 1]

Ecrire alors la fonction Indice qui construit ce tableau P partir de la donne du tableau T. Exercice 6 (3 points) On lance 30 fois deux ds, chaque fois, on ne conserve que le grand des deux scores obtenus. 1) On veut savoir le nombre de fois o le rsultat est 5. Ecrire un programme simulant cette exprience. Votre programme devra : Choisir un nombre alatoire entre 1 et 6 puis un deuxime. Calculer le plus grand des deux. Rptez cette opration 30 fois et stocker les rsultats dans un tableau. Comptez le nombre de fois o le nombre 5 est dans ce tableau. 2) Adapter le programme prcdent pour calculer la frquence de chaque entier i compris entre 1 et 6. Les frquences seront stockes dans un tableau F de taille 6 (1 ligne et 6 colonnes). 3) Ecrire une fonction tri-selection(F) qui permet de trier le tableau F en utilisant lalgorithme de tri par slection du minimum, dont le principe est le suivant : Cela consiste raliser un premier parcours complet pour rechercher le minimum parmi les n lments d'un tableau, puis un deuxime pour rechercher le minimum parmi les n - 1 lments restants et ainsi de suite. A chaque tour, il faut comparer l'lment de dpart, appel lment courant, tous ses successeurs et effectuer un change d'emplacement lorsque l'lment courant est suprieur l'lment utilis dans la comparaison. Par exemple, pour trier le tableau on obtiendra successivement : 6 2 8 1 5 4 1 2 8 6 5 4 1 2 8 6 5 4 1 2 4 6 5 8 1 2 4 5 6 8 1 2 4 5 6 8 1 2 4 5 6 8 car le minimum est 1 car le minimum est 2 car le minimum est 4 car le minimum est 5 car le minimum est 6

Correction du devoir dInformatique du 06/01/10


BCPST1, Lyce Corneille

Exercice 1 1) n=input('Entrez la valeur de n'); u=-1 , v=1 for i= 2:n do w=4*v-u ,u=v , v=w , end disp(w) 2) Pour n=5 on obtient i w u -1 2 5 1 3 19 5 4 71 19 5 265 71

v 1 5 19 71 265

Remarque: on peut amliorer le programme pour viter les rptitions de couples, puisque (n,m) = (m,n). On obtient alors le programme : for n=10:99 do for m=10:n do // quivalent une matrice triangulaire suprieure) // ou bien for m=n:99 do (matrice triangulaire infrieure) On obtient 109 couples dont 9 (sur la diagonale) de la forme (11,11), (22,22),, (99,99) et 100 sont de la forme (m,n) avec m n Exercice 3 1) Mystere(4).donne la matrice suivante :

3) Soit N le nombre doprations dans le programme ci-dessus. N = (n-1)*le nombre doprations dans la boucle for + n-1 (pour i= 2 :n) + 3 = 5(n-1)+(n-1)+3 = 6n-3 Donc le nombre doprations est de lordre de n. 4) s=0 ; n=input('Entrez la valeur de n'); u=-1 ; v=1 ; for i= 2:n do w=4*v-u; s=s+w; u=v; v=w; end disp(s) Exercice 2 1) function [a,b] = decomposer (n) b=modulo(n,10) ; a= int(n/10); endfunction 2) function [p] = produit (n,m) [a,b] = decomposer(n) ; [c,d]=decomposer(m) ; x=n*m ; y= (10*b+a)*(10*d+c) ; if x==y then p=%t; else p=%f; end endfunction 3) for n=10:99 do for m=10:99 do if produit(n,m)==%t then disp('vrifient la proprit', m, ' et ', n), end end end

2) La fonction Mystre permet dtablir le triangle de Pascal dordre 5, fournissant les coefficients du binme de Newton. 3) =

Do le programme : n=input('Entrez la valeur de n'); x=1 ; for i=1 :n do x= x*(n+i)/i ; end disp(x) Exercice 4 1) function [f] = factorielle (k) f=1 ; for i=1 :k do f=f*i ; end endfunction 3/2

T=zeros(1,30) ; F=zeros(1,6); 2) s=1 ; k=0 ; while s<= 2.7 do k=k+1; s=s+1/factorielle(k); end disp( k,'le plus petit entier n tel que Sn > 2,7 est ') ; Remarque: On trouve n=4 Exercice 5 1) function [bool]=derangement(T) bool=%t ; s=0; n= length(T); for i=1 :n do if (i<1 | i>n ) | (T(i)==i) then bool = %f; end s=s+T(i); // pour tester la non rptition de valeurs end if s<>n*(n+1)/2 then bool = %f; end endfunction 2) function [P]= Indice (T) n=length(T) ; P=zeros(1,n); if derangement(T) == %f then disp('ce tableau n''est pas un drangement'); else for i=1 :n do j=T(i) ; P(j) = i; end end endfunction Exercice 6 1) T=zeros(1,30) ; s=0 ; for k=1:30 do n=ceil(6*rand()); m=ceil(6*rand()); if n>m then T(k)=n ; else T(k)=m ; end if T(k)==5 then s=s+1; end end disp(' fois',s,' Le 5 apparat '); 2) On transforme le programme prcdent pour calculer les frquences des entiers 1..6: 4/2
Correction du devoir dInformatique du 06/01/10

for k=1:30 do n=ceil(6*rand()); m=ceil(6*rand()); if n>m then T(k)=n ; else T(k)=m ; end for i=1:6 do if T(k)==i then F(i) = F(i)+1/30; end end end disp(F) 3) function[e] = etendue(F) m=F(1); M=F(1); for i=2: length(F) do if F(i) < m then m= F(i); end if F(i) > M then M= F(i); end end e= M-m; endfunction

BCPST1, Lyce Corneille Devoir surveill dinformatique n2

Veuillez rendre 3 copies : - une copie pour les exercices 1 et 4 - une copie pour les exercices 2 et 5 - une copie pour les exercices 3 et 6

Exercice 1 : Conversions de temps (2,5 pts) 1) Ecrire une fonction [minutes] = convertir1(h,m) qui, tant donn un temps exprim en heures/minutes le convertit en minutes. Par exemple 5h18min doit devenir 318min 2) Ecrire une fonction [h,m] = convertir2(t) qui tant donn un temps t en minutes le convertit en heures/minutes. Par exemple, 215min doit devenir 3h35. 3) En dduire un programme add( h1,m1,h2,m2) qui, tant donns deux temps exprims sous la forme heures/minutes, calcule la somme des ces temps. On donnera le rsultat sous la forme heures/minutes. Par exemple, si l'on entre 2h16min et 3h51min, le programme devra retourner et afficher 6h07min.

Exercice 2 : Suites (1,5 pts) On considre la suite (un)n 2 dfinie par un+1 = un2 - 2, u2 = 3 1) Ecrire une fonction suite(n), qui calcule un pour n 2 2) Ecrire une fonction prod(n) de manire ce qu'elle renvoie :

3) Ecrire un programme qui renvoie le plus petit entier n tel que un >

Exercice 3 : Chanes (2,5 pts) Dans cet exercice, on ne considre que des chanes de caractres o figurent les lettres de l'alphabet et des espaces (pas de ponctuation). Mfiant, je dcide d'envoyer des messages cods. Pour coder mon message j'utilise le procd suivant : j'inverse le sens des caractres du message, puis j'change les espaces et les E (ou e). 1) Ecrire une fonction inverse(c) qui, tant donne une chane de caractres renvoie la chane inverse. 2) Ecrire une fonction echange(c) qui, tant donne une chane de caractres change les E (ou e) et les espaces dans la chane. 3) En dduire une fonction code(c) qui, tant donn un message, donne le message cod. 4) Je vous envoie le message cod LUFITUA BESIE FIL. Quel tait le contenu initial du message ? 5) Ecrire une fonction decode(m) qui, tant donn un message cod retrouve le contenu du message initial.

Exercice 4 : Tableaux (3,5 pts) On considre la fonction suivante : function[L]=Mystere(T) L=T n = length(T) for k = 1 : (n - 1) do if L(n - k + 1) < L(n k) then a := L(n - k), L(n k) = L(n - k + 1), L(n - k + 1) = a end endfunction 1) Que renvoie cette fonction si l'on entre le tableau : [4,3,2,1,6]. On dtaillera les tapes du calcul. 2) Que fait la fonction Mystere ? 3) A l'aide de la fonction Mystere, crire une fonction tri(T) qui tant donn un tableau d'entiers renvoie le tableau tri dans l'ordre croissant. 4) Etablir un lien entre votre programme et un algorithme de tri tudi cette anne. 5) Ecrire une fonction qui tant donn un tableau tri et un nombre, renvoie la position de ce nombre dans le tableau s'il y figure et un message d'erreur sinon.

5/2

Exercice 5 : Urnes (7,5 pts) Soit n 2. Une urne contient n boules indiscernables, n-2 sont noires, 2 sont blanches. On y effectue des tirages successifs (tirage dune boule chaque fois) 1) Dans cette question, on suppose que les tirages s'effectuent sans remise. a) Quelle est initialement la probabilit de tirer une boule blanche ? une boule noire ? Et aprs le tirage dune boule noire, quelles sont chacune des deux probabilits ? b) Ecrire une fonction [N1,B1]=tirage(N,B) simulant le tirage alatoire dune boule dans lurne. Lurne contenant (avant ce tirage) N boules noires et B boules blanches; ensuite, en fonction du rsultat du tirage les quantits de boules sont mises jour dans N1 et B1. c) Dans cette question, on effectue k tirages successifs (k n) dont les rsultats sont stocks dans un tableau t de n lignes et 2 colonnes qui doit tre construit ainsi: me me La i ligne (reprsentant le contenu de lurne aprs le i tirage) est forme : - en premire colonne par le nombre de boules noires, - en seconde colonne par le nombre de boules blanches. Ecrire une fonction [t]= historique(k) qui permet de construire le tableau t. d) Ecrire une fonction [r] =rang_premiere_blanche(k) qui calcule le rang d'apparition de la premire boule blanche, et qui renvoie 0 sil ny a pas de boule blanche aprs k tirages. e) Ecrire un programme qui calcule le rang d'apparition de la deuxime boule blanche, et qui renvoie 0 si elle napparat pas au bout de k tirages. 2) Dans cette question, on suppose que les tirages s'effectuent avec remise, et que leur nombre maximum est gal 500. Lurne contenant n-2 boules noires et 2 boules blanches.

Ecrire un programme qui calcule la frquence d'apparition des boules blanches, compare cette frquence avec la probabilit d'obtenir une boule blanche, et affiche ensuite le rsultat de cette comparaison lcran.
Exercice 6 : Matrices (2,5 pts) On rappelle que la commande inv(A) calcule l'inverse d'une matrice carre A lorsque celle-ci est inversible, que la commande rank(A) donne son rang et que la fonction det(A) calcule son dterminant. On dit qu'une matrice carre A est productive lorsque I - A est inversible et tous les coefficients de sont strictement positifs. 1) Ecrire une fonction test1(M), qui teste si la matrice carre M est inversible. 2) Ecrire une fonction test2(M), qui teste si les coefficients de M sont strictement positifs. 3) En dduire un programme qui teste si une matrice est productive et affiche le rsultat lcran.

6/2

BCPST1, Lyce Corneille Devoir surveill dinformatique n2 (corrig)


Exercice 1 : Conversions de temps 1) function [minutes] = convertir1(h,m) minutes=60*h+m endfunction 2) function [h,m] = convertir2(t) h=int(t/60) ; m=modulo(t,60) ; endfunction 3) function add(h1,m1,h2,m2) [h3,m]=convertir2(m1+m2) ; h=h1+h2+h3 ; affichage = 'heure = ' + string(h) + ' h ' + string(m) + ' min'; disp(affichage) endfunction

2) function [d]=echange(c) d=''; for i=1:length(c) do if part(c,i)== ' ' then d=d+'E'; else if (part(c,i)== 'E') | (part(c,i)== 'e') then d=d+' '; else d=d+part(c,i); end end end endfunction 3) function [d]=code(c) d=echange(inverse(c)); endfunction 4) Le message initial tait : LIFE IS BEAUTIFUL 5) function [d]=decode(m) d=code(m) ; endfunction

Exercice 2 : Suites 1) function[s]= suite(n) u=3; for i=2 :n do u=u*u-2 ; end endfunction 2) function[p]= produit(n) p=3; for i=2 :n do p=p*suite(i) ; end endfunction 3) n=2 ; while suite(n) <= 10^6 do n=n+1 ; end disp(n, le plus petit entier n tel que Un > 10^6 est )

Exercice 4 : Tableaux 1) Pour k=1, T=[4,3,2,1,6]. Pour k=2, T=[4,3,1,2,6]. Pour k=3, T=[4,1,3,2,6]. Pour k=4, T=[1,4,3,2,6].

2) La fonction Mystere fait passer la plus petite valeur du tableau la premire position. 3) function [T]=tri(T) k=length(T) ; for i=1 : k-1 do T=Mystere (T); end endfunction 4) Ce programme utilise lalgorithme du tri bulle. 5) function position_nombre(n,T) k=length(T) ; i=1 ;

Exercice 3 : Chanes 1) function [d]=inverse(c) d=''; for i=1:length(c) do d=part(c,i)+d; end endfunction

7/2

while (i<=k) & (T(i)<>n) do i=i+1 ; end if i>k then disp(Erreur le nombre nest pas dans le tableau !) ; else disp(i, La position du nombre est : ) end endfunction Exercice 5 : Urnes 1) a) La probabilit de tirer une boule blanche est . La probabilit de tirer une boule noire est Aprs le tirage dune boule noire : la probabilit de tirer une boule blanche est est b) La probabilit de tirer une boule blanche est La probabilit de tirer une boule noire est Do la fonction : function [N1,B1]=tirage(N,B) N1=N; B1=B; t=ceil((N+B)*rand()) ; if (t>=1) & (t<=N) then N1 = N-1 ; else B1 = B-1 end endfunction c) function [t]= historique(k) t=zeros(n,2) ; t(1,1)=n-2; t(1,2)=2; N=n-2, B=2 ; for i=2 :k do [N1,B1]=tirage(N,B) ; t(i,1)=N1, t(i,2)=B1; N=N1; B=B1; end d) function [r] =rang_premiere_blanche(t,k) r=1 ; while (r<=k) & (t(r,2)==2) do r=r+1 ; end if r==k+1 then r=0; end endfunction . . La probabilit de tirer une boule noire

e) function [r] =rang_deuxieme_blanche(k) r= rang_premiere_blanche(k) ; if r<>0 then while (r<=k) & (t(r,2)==1) do r=r+1; end if r=k+1 then r=0; end end endfunction 2) La probabilit de tirer une boule blanche est La probabilit de tirer une boule noire est Programme; nb_blanches=0; for k=1 :500 do t=ceil(n*rand()) ; if t<=2 then nb_blanches=nb_blanches+1; end end frequence=nb_blanches/n; if frequence > 2/n then disp(frequence - 2/n,'La frquence des boules blanches est suprieure ... la probabilit de tirer une boule blanche de : ') ; else disp(2/n - frequence,'La frquence des boules blanches est infrieure ... la probabilit de tirer une boule blanche de : ') end .

Exercice 6 : Matrices 1) function [inversible]=test1(M) if det(M) <> 0 then inversible =%t ; else inversible = %f ; end endfunction 2) function [positive] = test2(M) positive =%t ; n=sqrt(length(M)); i=1; while (positive == %t) & (i<=n) do j=1; while (positive == %T) & (j<=n) do if M(i,j)<=0 then positive=%f; end j=j+1;

8/2

end i=i+1; end endfunction 3) function [productive] = test_productive(M) n=sqrt(length(M)); I=eye(n,n); P=I-M; productive=%f; if test1(P)==%t then P=inv(P); if test2(P)==%t then productive=%t; end end endfunction

9/2