Devoir Surveillé numéro 2 - CPGE du Lycée Montesquieu

Devoir Surveillé numéro 2
Corrigé
Mercredi 22 Janvier 2014
13h-16h
1 Questions rapides
1 Donner l’écriture en binaire de 87456.
Corrigé 10101010110100000
2 Donner l’écriture en binaire de 35.125.
Corrigé 100100.001
3 Donner l’écriture en binaire de 0.2. Expliquer pourquoi en Python, l’opération 10.20.20.20.20.2
ne donne pas 0.
Corrigé 0.2s’écrit 0.001100110011001100110011001100110011... En informatique par la représentation
classique, cette représentation est tronquée. Donc on ne peut pas représenter exactement 0.2sur ordinateur.
4 En Python, comment accède-t-on à la 3è lettre d’une chaîne de caractères ?
Corrigé Si sest la chaîne, on écrit s[2].
5 En Python, comment demande-t-on à l’utilisateur d’entrer une chaine de caractères ?
Corrigé via l’instruction input.
6 En Python, comment effectue-t-on la concaténation de deux chaînes de caractères ?
Corrigé L’opérateur + fonctionne.
7 Quel opérateur en Python permet d’obtenir le reste de la division euclidienne ?
Corrigé %
8 Quel opérateur en Python permet d’obtenir le quotient de la division euclidienne?
Corrigé //
9 Quelle instruction en Python permet d’obtenir la liste des entiers divisibles par 3 compris entre 5 et
111 compris ?
Corrigé On peut écrire range(6:112). Il faut aller jusqu’à 112 car 111 est divisible par trois et doit donc
être inclu.
10 Comment accède-t-on en Python à l’avant dernier élément d’une liste (sans utiliser l’instruction len) ?
Corrigé Si Lest la liste, on tape L[-2].
2 Nombres d’Armstrong
On appelle nombre d’Armstrong un nombre qui est égal à la somme des cubes de ses chiffres. Par exemple,
153 = 1 + 53+ 33est un nombre d’Armstrong.
1 Ecrire en Python une fonction unite qui prend en argument un nombre entier net renvoie le chiffre
des unités de n.
Corrigé
1def unite (n) :
2return n%10
2 Quel est le rôle de la fonction suivante et quel nom devrait-on lui donner ?
MPSi Devoir Surveillé numéro 2
1def fo n ct i o n ( n) :
2 a=n//10
3return( unite ( a ))
Corrigé Cette fonction renvoie le chiffre des dizaines. On devrait, pour avoir quelque chose d’intelligible
l’appeler dizaine.
3 Ecrire en Python une fonction centaine qui prend en argument un nombre entier net renvoie le chiffre
des centaines de n.
Corrigé On peut s’inspirer de la fonction précédente :
1def centaine (n) :
2 a=n//100
3return( unite ( a ))
4 Ecrire en Python une fonction Armstrong qui prend en argument un entier minférieur à 999 et renvoie
tous les nombres de Armstrong strictements inférieurs à m.
Corrigé
1def Armstrong (m) :
2 nombres = [ ]
3for iin range (m) :
4i f unite ( i )3+ di za i ne ( i )3+ centaine ( i )∗∗3== i :
5 nombres . append ( i )
6return nombres
3 Parties d’un ensemble
On considère l’ensemble Nndes entiers de 0àn. On cherche à représenter les sous-ensembles de Nn. Dans
tout cet exercice, nest un entier fixé : on pourra donc utiliser la variable ncomme une variable globale
sans se poser trop de questions.
PCSI : Vous pouvez écrire les algorithmes en pseudo-code ou en Python, à condition d’être cohérent et
de ne pas changer en cours de route.
MPSI : Vous n’utiliserez le Python que lorsque cela est explicitement demandé. Pour le reste, vous
utiliserez le pseudo-code vu en cours.
3.1 Préambule
1 Ecrire une fonction estdedans qui prend en argument une liste Ld’entiers et un entier aet renvoie
True si Lcontient aet False si Lne contient pas a.
Corrigé
1def es td edan s (L , a ) :
2 es t = False
3for iin L :
4i f i==a :
5 es t=True
6return est
Dans la suite de ce problème vous pourrez utiliser cette fonction comme bon vous semble.
DS no2 Lycée Montesquieu - 2013/2014
MPSi Devoir Surveillé numéro 2
3.2 Représentation par une liste d’entiers
On représente un sous-ensemble de Nnpar une liste Ld’entiers ordonnée. Par exemple le sous-ensemble
{1,2,4,5}est représenté par la liste [1,2,4,5].
2 Que fait la fonction suivante ? Quel nom pourrait-on lui donner ?
1def union (L1 , L2) :
2 L=[]
3for iin range (n+1) :
4i f ( estdedans (L1 , i ) or estdedans (L2 , i )) :
5 L . append ( i )
6return L
Corrigé On renvoie la liste qui contient les éléments qui sont soit dans L1 soit dans L2. C’est donc l’union
des deux ensembles : on devrait appeler cette fonction union.
3 Ecrire un algorithme permettant de réaliser l’intersection de deux sous ensembles.
Corrigé On fait la même chose :
1def i n t e r s e c t i o n ( L1 , L2) :
2 L=[]
3for iin range (n+1) :
4i f ( estdedans (L1 , i ) and estdedans (L2 , i ) ) :
5 L . append ( i )
6return L
4 Ecrire un algorithme permettant de réaliser le complémentaire d’un sous-ensemble.
Corrigé On doit renvoyer les éléments qui ne sont pas dans la liste L:
1def complementaire (L1 ) :
2 L=[]
3for iin range (n+1) :
4i f not ( estdedans ( L1 , i )) :
5 L . append ( i )
6return L
3.3 Représentation binaire
On décide maintenant de représenter les sous-ensembles de Nnpar une liste de 0et de 1. Si Eest un
sous-ensemble de Nn, sa représentation est une liste LEde longueur n+ 1 : l’élément ide LEvaut 1si
iEet 0sinon. Par exemple, le sous-ensemble {1,3,6}de N6est représenté par la liste [0,1,0,1,0,0,1].
5 Quelle est la représentation du sous-ensemble {2,3,4}de N5? Quelle est la représentation de {1,6}de
N7?
Corrigé Pour le premier on a [0,0,1,1,1,0]. Pour le second : [0,1,0,0,0,0,1,0].
6 Écrire un algorithme permettant de réaliser l’union de deux sous-ensembles de Nnpour cette représen-
tation.
Corrigé
1def union (L1 , L2) :
2 L=[]
3for iin range (n+1) :
4i f ( L1 [ i ]==1) or ( L2 [ i ]==1) :
5 L . append ( 1 )
DS no2 Lycée Montesquieu - 2013/2014
MPSi Devoir Surveillé numéro 2
6e l s e :
7 L . append ( 0 )
8return L
7 Écrire un algorithme permettant de réaliser l’intersection de deux sous-ensembles de Nnpour cette
représentation.
Corrigé
1def i n t e r s e c t i o n ( L1 , L2) :
2 L=[]
3for iin range (n+1) :
4 L . append ( L1 [ i ] L2 [ i ] )
5return L
8 Écrire un algorithme permettant de calculer le complémentaire d’un sous-ensemble Ede Nn.
Corrigé
1def complementaire (L1 ) :
2 L=[]
3for iin range (n+1) :
4i f ( L1 [ i ]==1) :
5 L . append ( 0 )
6e l s e :
7 L . append ( 1 )
8return L
3.4 Représentation par des entiers
La représentation précédente doit vous faire penser à la représentation binaire des entiers. On peut effec-
tivement représenter les sous-ensembles par des entiers. Par exemple, le sous ensemble {0}de {0,1}est
représenté par l’entier 1, le sous-ensemble {1}de {0,1}est représenté par l’entier 2et le sous-ensemble
{0,1}de {0,1}est représenté par l’entier 3. On appellera cette représentation la représentation entière.
9 Quelle est la représentation de l’ensemble vide ?
Corrigé On choisit basiquement comme représentation 0pour l’ensemble vide.
10 Quel est le plus petit entier représentant un sous-ensemble de Nn? Quel est le plus grand entier
représentant un sous-ensemble de Nn?
Corrigé Le plus petit entier est évidemment 0. Le plus grand entier en 2n+1 1qui représente l’ensemble
lui-même.
11 Vérifier que le sous-ensemble {1,3,6}de N6est représenté par l’entier 74.
Corrigé La représentation est [0,1,0,1,0,0,1,0]. Le nombre représenté ainsi en binaire est 2+8+64 =
74.
12 Quelle opération peut-on effectuer pour calculer le complémentaire d’un sous-ensemble de Nndans
cette représentation ?
Corrigé Si aest la représentation d’un sous ensemble A, alors la représentation du complémentaire de
Aest 2n+1 1a.
On peut montrer que l’opération d’intersection a une équivalence dans les entiers. Si Xet Ysont deux
sous-ensembles de Nn, de représentations respectives xet y, la représentation entière de XYest donnée
par : n
X
k=0
2k x
2kmod 2 y
2kmod 2
bacreprésente la partie entière de a.
DS no2 Lycée Montesquieu - 2013/2014
MPSi Devoir Surveillé numéro 2
13 Écrire en Python une fonction dont les entrées sont un entier net les représentations entières de deux
sous-ensembles de Nnet qui retourne la représentation entière de leur intersection.
Corrigé
1def i n t e r s e c t i o n ( n , x , y ) :
2 somme = 0
3 puis s = 1
4for kin range (n+1) :
5 somme += pui s s ( ( x// p ui ss )%2)(( y// p uis s )%2)
6 pui s s=p u is s 2
7return somme
4 Etude d’un algorithme
On dispose dans cet exercice d’une fonction echanger qui prend en entrée une liste d’entiers Let deux
indices iet jentre 1et la taille de la liste Let qui échange les contenus des cases iet jde L. On considère
l’algorithme écrit en pseudo langage suivant :
Entrées:L[1 . . . n]tableau d’entiers
Sorties: La liste Lmodifiée
i1
jn
tant que i<jfaire
si L[i] == 0 alors
ii+ 1
sinon
echanger(L, i, j)
jj1
fin
fin
retourner L
1 Présenter l’exécution de cet algorithme sur la liste [0,1,0,1,0,1]
Corrigé On présente l’exécution dans un tableau. Chaque ligne donne la valeur des variables à la fin de
la boucle.
L i j
[0,1,0,1,0,1] 1 6
[0,1,0,1,0,1] 2 6
[0,1,0,1,0,1] 2 5
[0,0,0,1,1,1] 2 4
[0,0,0,1,1,1] 3 4
[0,0,0,1,1,1] 4 4
Tous les 1ont été envoyés à la fin.
2 Démontrer que cet algorithme termine.
Corrigé On peut choisir comme fonction de terminaison f(i, j) = ji. Dans la boucle, on a f(i, j)>0
et si on note inet jnles valeurs successives de iet de j, on a soit in+1 =in+ 1 et jn+1 =jn, soit in+1 =in
et jn+1 =jn1. Dans les deux cas, f(in+1, jn+1)< f(in, jn). L’arrêt est caractérisé par f(i, j) = 0.
3 Que fait ce programme ?
Corrigé Cet algorithme envoie tous les 1à la fin de la liste.
4 (MPSI) Donner des éléments de preuve.
DS no2 Lycée Montesquieu - 2013/2014
MPSi Devoir Surveillé numéro 2
Corrigé Avec des mots, on peut dire que la propriété les éléments d’indice strictement inférieurs à i
sont des zéros, les éléments d’indice strictement supérieur à jsont des uns est toujours vraie à la fin de
la boucle. En effet, on ne change jqu’après avoir écrit un 1dans la case j, et on n’augmente ique lorsque
l’on est certain d’avoir un zéro. Puisque l’algorithme termine, on sait que l’on sort et on ne sort qu’en
ayant vérifié ces propriétés.
5 Proposer une fonction en Python pour la fonction echanger.
Corrigé On peut proposer simplement en Python :
1def echanger (L , i , j ) :
2 L [ i ] , L [ j ]=L [ j ] , L [ i ]
DS no2 Lycée Montesquieu - 2013/2014
1 / 3 100%

Devoir Surveillé numéro 2 - CPGE du Lycée Montesquieu

La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !