BCPST 1 5 juin 2021
Devoir surveillé 2 - Informatique
Dans l’écriture de vos programmes en Python, respectez la ponctuation et l’indentation.
Expliquez ce que font vos programmes, notamment en commentant votre code. Enfin, n’hésitez pas à donner des noms explicites à vos fonctions et vos variables.
L’utilisation de tout matériel électronique est interdite.
Ce sujet contient quatre pages, quatre exercices et un problème indépendants.
Durée : 3h.
Exercice 1 — Boule de gomme On considère la fonction suivante.
def fonction_mystere(chaine):
""" Mystère et carabistouilles."""
V = ['a', 'e', 'i', 'o', 'u']
resultat = ""
for c in chaine:
voy = False i = -1
while (i < 4) and (not voy):
i = i + 1 if c == V[i]:
voy = True if voy:
resultat = resultat + V[i - 1]
else:
resultat = resultat + c return resultat
1. (a) Que renvoie l’instruction suivante ?
fonction_mystere("la voiture")
(b) Que fait la fonction fonction_mystere dans le cas général ?
2. Modifier la fonctionfonction_mysterede telle sorte que la chaine de caractères soit renvoyée à l’envers, avec les mêmes transformations.
3. Modifier la fonction précédente de telle sorte que la chaine de caractères soit encore renvoyée à l’envers mais que ses voyelles soient modifiées ainsi : le a devient o et le o devienta, le e devient i et le i deviente, et le u et le y restent inchangés.
Par exemple, l’instruction
fonction_mystere("la voiture") devra alors renvoyer "iruteav ol".
Lycée Pierre-Gilles de Gennes 1 Adriane Kaïchouh
BCPST 1 5 juin 2021 Exercice 2 — Barbara au photomaton®
Barbara souhaite renouveler son passeport. Pour cela, elle a besoin d’une photo d’iden- tité et se rend donc dans une cabine photographique. Le but de cet exercice est de simu- ler ladite cabine photographique pour faire à Barbara de magnifiques photos d’identité !
Figure 1 – Barbara, avant et après son passage dans la cabine photographique Une image sera représentée comme un tableau, chaque case du tableau codant la couleur d’un pixel de l’image.On supposera dans cet exercice que toutes les images sont carrées et possèdent un nombre de pixels qui est une puissance de 4.
1. Pour effectuer la transformation de la cabine photographique sur une image, on divise l’image en petits paquets carrés de quatre pixels. Pour chaque paquet carré, on utilise le pixel en haut à gauche pour la première image réduite (en haut à gauche), le pixel en haut à droite pour la deuxième image réduite (en haut en droite), et ainsi de suite, comme indiqué sur le schéma ci-dessous.
c d
a b a b
c d
e f g h
e f
g h
Figure 2 – La transformation de la cabine photographique
Lycée Pierre-Gilles de Gennes 2 Adriane Kaïchouh
BCPST 1 5 juin 2021 Écrire une fonction qui prend en argument une image (sous forme de tableau) et qui renvoie l’image (toujours sous forme de tableau) après un passage dans la cabine photographique.
2. (a) Écrire une fonction qui prend en arguments deux tableaux, et qui renvoie True si les deux tableaux sont égaux, False sinon.
(b) Écrire un programme qui détermine au bout de combien de transformations de la cabine photographique une image revient à son état initial.
Exercice 3 — Et vice et versa
1. Écrire un programme qui représente graphiquement la fonction f :x 7−→x+ex sur l’intervalle [−3; 3].On prendra mille points pour le tracé.
On admet que la fonctionf[−3;3] est bijective de[−3; 3] sur son image.
2. Tracer alors, en Python, la courbe de sa fonction réciproque.
Exercice 4 — Libérés, délivrés Soit n un entier naturel non nul.
La prison centrale de Sikinia est composée de n cellules numérotées de 1 à n, toutes occupées par un prisonnier.
Chaque porte peut être dans deux états : soit ouverte, soit fermée, et l’on passe d’un état à l’autre en pivotant le bouton de la porte d’un demi-tour dans le sens horaire (depuis l’extérieur !). Ainsi, si l’on effectue un nombre impair de demi-tours, la porte est ouverte, et si l’on effectue un nombre pair de demi-tours, la porte est fermée.
Bien entendu, au début de notre histoire, les portes de toutes les cellules sont fermées.
Pour fêter le trentième anniversaire de la république de Sikinia, la présidente décide d’organiser une journée portes ouvertes à la prison. Elle donne alors à la direction de la prison l’instruction de tourner successivement d’un demi-tour les boutons :
• de toutes les portes ;
• puis d’une porte sur deux à partir de la deuxième porte ;
• puis d’une porte sur trois à partir de la troisième porte ;
• et ainsi de suite jusqu’à la dernière porte.
À l’issue de ces opérations, tous les prisonniers dont la cellule est ouverte seront libérés.
1. Comment modéliser la prison (c’est-à-dire lesncellules) et l’état de chaque porte ? 2. Écrire une fonction qui prend en arguments la prison (dans un certain état) et
une porte, et qui tourne d’un demi-tour le bouton de la porte.
3. Écrire alors une fonction qui prend en argument l’entier n et qui renvoie la liste des numéros des cellules dont les prisonniers seront libérés.
Lycée Pierre-Gilles de Gennes 3 Adriane Kaïchouh
BCPST 1 5 juin 2021 Problème — Sans parti pris nous avons pris la partie
Dans ce problème, on souhaite manipuler informatiquement des parties finies de N. Elles pourront être représentées de deux manières différentes.
• La première représentation d’une partie finieA de Nest définie comme suit.
? SiA=∅, alors la première représentation de A est la liste vide[].
? Sinon, on notem le plus grand élément deA. La première représentation de A est alors la liste [c0, ..., cm], où pour tout k ∈J0;mK,
ck =1A(k) =
(1 sik ∈A 0 sik 6∈A.
• La seconde représentation d’une partie finie A de N est la liste des éléments de A, ordonnés dans l’ordre croissant.
Par exemple, l’ensemble{5; 4; 9; 2}={2; 4; 5; 9}a pour première représentation la liste [0, 0, 1, 0, 1, 1, 0, 0, 0, 1] et pour seconde représentation la liste [2, 4, 5, 9].
1. Écrire une fonction qui prend en argument la première représentation d’une partie finie A de N et qui renvoie le cardinal de la partieA.
2. Écrire une fonction qui prend en arguments les premières représentations de deux parties finies A etB deN, et qui renvoie la première représentation de
(a) leur intersection A∩B; (b) leur union A∪B.
3. (a) Écrire une fonction conversion1vers2 qui prend en argument la première représentation d’une partie finie A de N et qui renvoie la seconde représen- tation de A.
(b) Écrire une fonction conversion2vers1 qui prend en argument la seconde représentation d’une partie finie de Net qui renvoie la première.
4. À partir des fonctions des questions 2 et 3, écrire une fonction qui prend en arguments les secondes représentations de deux parties finies AetB deN, et qui renvoie la seconde représentation de
(a) leur intersection A∩B; (b) leur union A∪B.
5. (a) Écrire une fonction qui prend en arguments une liste L, un indice i et un élémentx, qui insère l’élémentx à la positionidans la listeL(sans changer l’ordre des autres éléments) et qui renvoie la liste ainsi obtenue.
(b) Reprendre alors la question 4 sans passer par la première représentation.
6. Écrire une fonction qui prend en argument une liste d’entiers naturels (non né- cessairement classés dans l’ordre croissant et pouvant contenir des doublons) et qui renvoie
(a) la première représentation de l’ensemble des éléments de la liste ; (b) sa seconde représentation (sans passer par la première représentation).
Lycée Pierre-Gilles de Gennes 4 Adriane Kaïchouh