Lycée Jean Bart MPSI 14 novembre 2015 Corrigé du DS d'informatique 14 novembre 2015 Exercice 1 Architecture. 1. La pile bouton est indiquée par la èche : A. 1 B. 3 C. 5 D. 6 2. L'emplacement destiné à accueillir le processeur est plutôt au bout de la èche : A. 2 B. 6 C. 7 D. 8 3. Le disque dur est : A. indiqué par la èche 1 B. indiqué par la èche 3 C. indiqué par la èche 5 D. absent de cette image 4. L'emplacement destiné à accueillir une barette de RAM est plutôt au bout de la èche : A. 4 B. 6 C. 7 D. 8 5. Je suis un composant de l'ordinateur qui exécute les instructions machine des programmes informatiques. Avec la mémoire, je suis l'un des composants qui existent depuis les premiers ordinateurs, et je suis présent dans tous les ordinateurs. Je suis, je suis? A. Le ventilateur B. Le condensateur C. Le processeur D. Le disque dur 6. Je suis un composant de l'ordinateur essentiellement composé de circuits imprimés et de ports de connexion, par le biais desquels j'assure la connexion de tous les composants et périphériques propres à un micro-ordinateur. Je suis, je suis? A. La carte mère B. La carte son C. Le processeur D. Le disque dur 7. Un composant permettant de connecter les diérentes parties fonctionnelles d'un ordinateur entre elles s'appelle : A. Un avion B. Un tramway C. Un bus D. Un paquebot
2 MPSI Devoir d'informatique 14 novembre 2015 Exercice 2 Jouons au Scrabble. Cet exercice a pour thème le jeu de Scrabble (que vous avez étudié en DM). Il porte donc principalement sur les chaînes de caractères ; et rassurez-vous, aucune connaissance relative à ce jeu n'est nécessaire pour traiter les questions de cet exercice. 1. Traitement générique de chaînes de caractères 1-a. (QCM) Considérons les instructions suivantes : Qu'ache le script? A. 1011 B. 21 C. 1110 D. '21' 1-b. (QCM) Parmi les instructions suivantes, laquelle peut permettre d'obtenir le dernier caractère d'une chaîne non vide nommée MOT? A. MOT[ len(mot) ] B. MOT[ len(mot) + 1 ] C. MOT[ len(mot) - 1 ] D. MOT[ n - 1 ] 1-c. (QCM) Considérons les instructions suivantes : Qu'ache le script? A. M MP MPS MPSI (sur plusieurs lignes) B. MPSIMPSIMPSIMPSI C. ISPM D. MPSI 1-d. (QRC) En changeant l'indentation d'une ligne dans le script de la question précédente, son exécution permet d'obtenir une des autres propositions faites ci-dessus. Quelle indentation faut-il modier? Pour quelle ligne? Quel est alors le résultat obtenu? En changeant l'indentation de la ligne 5, c'est-à-dire en alignant le print de la ligne 5 avec le début de la ligne 4, on obtient l'achage proposé dans la réponse A de la question précédente. En eet, la chaîne de caractères RES va être achée à chaque passage dans la boucle, soit à chaque étape de construction de cette chaîne.. C'est-à-dire : quel est l'achage produit par l'exécution de ces lignes de code?
2. Cas particulier du jeu de Scrabble MPSI Devoir d'informatique 14 novembre 2015 3 On cherche à mettre en place des traitements spéciques aux chaînes de caractères dans le but de compter les points au jeu de Scrabble. 2-a. Validité de la saisie Considérons le script suivant : Dans ce script, l'utilisateur sera invité à saisir un mot au clavier (message de la ligne 4). 2-a-i. (QCM) Quel sera le résultat obtenu lors de l'exécution de ce script si l'utilisateur saisit au clavier : 'MPSI'? A. True B. False C. True True True True (sur 4 lignes) D. Test Test Test Test (sur 4 lignes) E. Aucun achage ne sera produit F. Autre réponse 2-a-ii. (QCM) Quel sera le résultat obtenu lors de l'exécution de ce script si l'utilisateur saisit au clavier : 'Info'? A. True False False False (sur 4 lignes) B. False False False (sur 3 lignes) C. Test Test Test (sur 3 lignes) D. Test Test Test Test (sur 4 lignes) E. Aucun achage ne sera produit F. Autre réponse 2-a-iii. (QCM) On souhaite à présent que le script ache eectivement 'True' si l'utilisateur a saisi un mot en majuscules, et 'False' sinon. Quelle(s) éventuelle(s) modication(s) est(sont) à apporter au script précédent? Il sut de désindenter (deux fois) l'instruction de la ligne 11, de telle sorte que la valeur de la variable Test ne soit pas achée à chaque passage dans la boucle (mais seulement une fois que tous les caractères de la chaîne Mot auront été testés). En résumé, on aligne le début de la ligne 11 avec le début de la ligne 8.
4 MPSI Devoir d'informatique 14 novembre 2015 2-a-iv. (QCM) Un cas particulier : en afrikaans, les lettres autorisées sont celles de notre alphabet à l'exception des lettres C, Q, X et Z. Parmi les scripts suivants, lequel permet de déterminer si un mot saisi par l'utilisateur peut être un mot de langue afrikaans ; c'est-à-dire lesquel va acher True si le mot saisi ne contient pas de C, ni de Q, ni de X, ni de Z, et achera False sinon? A. B. C. D.. Qui est l'une des 11 (oui, onze!) langues ocielles de l'afrique du Sud.
MPSI Devoir d'informatique 14 novembre 2015 5 Exercice 3 Binaire Autour du comptage des points. Trois joueurs appelés J1, J2, J3 font une partie de Scrabble. A chaque tour de jeu, ils composent un mot à tour de rôle, ce qui leur donne des points. Ils rassemblent les résultats sous forme de 3 listes L1, L2, L3 contenant chacune les points obtenus à chaque tour. Exemple : après 4 tours de jeu, on pourrait avoir L1=[10, 32, 5, 24] ; L2=[50, 8, 31, 12] ; L3=[12, 65, 5, 13] 1. Que fait l'algorithme suivant? Ce script achera la valeur maximale de la liste L1. 2. On suppose qu'après 8 tours de jeu, les trois personnes entrent dans un ordinateur les listes L1, L2, L3. Ecrire un programme en python calculant les totaux pour chaque joueur et précisant celui qui gagne ; pour simplier le problème, on ne tiendra pas compte des ex-aequo et on supposera donc que les trois joueurs ont des totaux diérents. # Initialisation des variables destinées à recevoir les sommes S1, S2 et S3 des listes L1, L2 et L3 S1 = 0 ; S2 = 0 ; S3 = 0 # Initialisation de la variable destinée à recevoir la somme maximale (parmi S1, S2 et S3) Max = 0 # Initialisation de la variable destinée à recevoir le rang du joueur qui a gagné RgWin = 0 # Calcul de la somme des points de chaque liste. for k in range(8) : S1 = S1 + L1[k] S2 = S2 + L2[k] S3 = S3 + L3[k] # Extraction du maximum Max = S1 RgWin = 1 if (S2 > Max) : Max = S2 RgWin = 2 if (S3 > Max) : Max = S3 RgWin = 3 print('le vainqueur est le joueur J', RgWin,'. Il a obtenu :', Max, 'points.'). Par ailleurs, on ne demande pas de programmer la saisie des listes L1, L2 et L3. On supposera que celles-ci sont déjà construites ; votre algorithme se contentera de calculer les sommes des points de chaque liste, et de déterminer laquelle des trois a le plus grand total.
6 MPSI Devoir d'informatique 14 novembre 2015 3. Les totaux des points obtenus par les trois joueurs ont été donnés en binaire! On a pour J1 : 11110011 ; pour J2 : 01110101 ; pour J3 : 01000010 Calculer le nombre total de points obtenus par l'ensemble des joueurs au cours de la partie. On fera les calculs en binaire (on posera les opérations) et on vériera les calculs en décimal. Eectuons la somme des points en binaire : 1 1 1 1 0 0 1 1 + 0 1 1 1 0 1 0 1 + 0 1 0 0 0 0 1 0 = 1 1 0 1 0 1 0 1 0 En binaire, on a donc : S1 + S2 + S3 = 110101010 Vérication décimale : D'une part : on a : S1 = 1 2 7 + 1 2 6 + 1 2 5 + 1 2 4 + 0 2 3 + 0 2 2 + 1 2 1 + 1 2 0 soit S1 = 128 + 64 + 32 + 16 + 2 + 1 = 243 on a : S2 = 0 2 7 + 1 2 6 + 1 2 5 + 1 2 4 + 0 2 3 + 1 2 2 + 0 2 1 + 1 2 0 soit S2 = 64 + 32 + 16 + 4 + 1 = 117 on a : S3 = 0 2 7 + 1 2 6 + 0 2 5 + 0 2 4 + 0 2 3 + 0 2 2 + 1 2 1 + 0 2 0 soit S3 = 64 + 2 = 66 D'où : S1 + S2 + S3 = 243 + 117 + 66 = 426 D'autre part l'entier ayant pour écriture décimale 110101010 vaut : 1 2 8 +1 2 7 +0 2 6 +1 2 5 +0 2 4 +1 2 3 +0 2 2 +1 2 1 +0 2 0 = 256+128+32+8+2 = 426. Ouf! 4. Réaliser le produit des nombres binaires correspondants aux points obtenus par J1 et J3 (on posera l'opération). Vérier le résultat du calcul en décimal. Eectuons la somme des points en binaire : 1 1 1 1 0 0 1 1 0 1 0 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 = 1 1 1 1 1 0 1 0 1 0 0 1 1 0 Vérication décimale : d'une part 66 243 = 16038. Et d'autre part, l'entier ayant pour écriture décimale 11111010100110 vaut : 1 2 13 + 1 2 12 + 1 2 11 + 1 2 10 + 1 2 9 + 1 2 7 + 1 2 5 + 1 2 2 + 1 2 1 = 8192 + 4096 + 2048 + 1024 + 512 + 128 + 32 + 4 + 2 = 16038 (re-ouf!).
MPSI Devoir d'informatique 14 novembre 2015 7 Exercice 4 Sommes de termes d'une suite récurrente. réelle dénie par son premier terme u 0 = 2 et la relation de récurrence : n N, u n+1 = u 2 n + u n 2 1. Ecrire un script prenant un entier n N en entrée et renvoyant n u k (il faut bien mettre en évidence l'indentation). l 1 # Initialisation de la somme, et du terme de la suite l 2 Somme = 0 ; Terme = 2 n # Calcul de la somme l 3 k=0 l 4 for k in range(n+1) : l 5 Somme = Somme + Terme l 6 Terme = Terme * Terme + Terme - 2 l 7 print('la somme des termes vaut', Somme) u k Dans cet exercice, (u n ) n N désigne la suite 2. Déterminer la complexité T (n) de ce script, ie. exprimer le nombre d'opérations élémentaires utilisées en fonction de n ; on appelle opération élémentaire une addition, une division, une multiplication, une aectation. Dans le script de la question précédente : la ligne 2 coûte 2 opérations élémentaires (2 aectations) ; Coût de la boucle (pour un passage) : la ligne 4 coûte 1 opération (1 aectation) la ligne 5 coûte 2 opérations (1 aectation et une somme) la ligne 6 coûte 4 opérations (1 aectation, une multiplication, deux additions) Chaque passage dans la boucle coûte donc 7 opérations élémentaires. Comme elle est parcourue (n + 1) fois, le coût total de cette boucle est 7n + 7 opérations élémentaires. Au nal, le programme nécessite 7n + 9 opérations élémentaires. Sa complexité algorithmique est donc T (n) = 7n + 9. k=0
8 MPSI Devoir d'informatique 14 novembre 2015 Exercice 5 Représentations binaires de listes. Pour un entier naturel non nul n, on note N n l'intervalle d'entiers [ 0, n ]. On peut représenter les sous-ensembles de N n par une liste de 0 et de 1. Explicitement, si E est un sous-ensemble de N n, sa représentation est une liste L E de longueur n + 1 : l'élément i de L E vaut 1 si i E et 0 sinon. Par exemple, le sous-ensemble {1, 3, 6} de N 6 est représenté par la liste [0,1,0,1,0,0,1]. 1. Quelle est la représentation du sous-ensemble {2, 3, 4} de N 5? Et quelle est la représentation de {1, 6} de N 6? En tant que sous-ensemble de N 5, la partie {2, 3, 4} est représentée par la liste [0,0,1,1,1,0]. En tant que sous-ensemble de N 6, la partie {1, 6} est représentée par la liste [0,1,0,0,0,0,1]. 2. On suppose donnés deux sous-ensembles E1 et E2 de N n. On note respectivement L1 et L2 les représentations binaires de E1 et E2. Ecrire un algorithme construisant la représentation binaire de l'union E1 E2. # Initialisation de la liste représentant l'union LU = [] for k in range(n+1) : LU = LU + [ L1[k] + L2[k] - L1[k] * L2[k] ] 3. Mêmes notations que dans 2). Ecrire un algorithme construisant la représentation binaire de E1 E2. # Initialisation de la liste représentant l'intersection LI = [] for k in range(n+1) : LI = LI + [ L1[k] * L2[k] ] 4. Mêmes notations que dans 2). Ecrire un algorithme construisant la représentation binaire du complémentaire de E1 dans N n. # Initialisation de la liste représentant le complémentaire LC = [] for k in range(n+1) : LC = LC + [ 1 - L1[k] ]. Toute ressemblance avec une propriété relative aux fonctions indicatrices ne serait bien entendu que pure coïncidence.. Toute ressemblance avec une propriété relative aux fonctions indicatrices ne serait bien entendu que pure re-coïncidence.. Toute ressemblance avec une propriété relative aux fonctions indicatrices ne serait bien entendu que pure re-re-coïncidence.