Vous êtes sur la page 1sur 7
MPSIi 2022-2023 INFORMATIQUE DE TRONC COMMUN - DEVOIR SURVEILLE N*L = LUNDI 14 Novemre 2022 - Durée: 1450 — La qualité et la précision de la syntaxe (mots-clés, deux points, régles d'indexation, régles ‘indentation ...) ainsi que Tefficacité des programmes constituerant des éléments importants pour l'appréciation des copies. Les calculatrices et les smartphones sont interdits. Lesujetcomprend: . quelques questions de syntaxe, regroupées dans VExercice 0 + un exercice de restitution des connaissances sur les algorithmes du programme officiel (Exercice 1) « un exercice de programmation sur le theme de la Numération (Exercice 2) «tn exercice de restitution des connaissances sur les tris (Exercice 3) - un exercice de programmation sur les listes (Exercice 4) - Un probleme, sur le theme des Carrés Magiques & chaque fonction (ou série d’instructions) devra tenir sur une seule page et étre soulignée ou encadrée Exerciced - Les questions sont indépendantes entre elles. 1. (@) Ecrire Pinstruction permettant d'importer le module math selon V'aliasm (b) Ectire alors l'expression permettant de déterminer une valeur approchée de sin (2+ V3)") 2. Ecrire une expression booléenne permettant de savoir sun entiern est divisible ou non par un entier ee N* 3. Eerire sans justification les successions d’entiers générées ci-dessous & aide de litérateur range (on pourra regrouper les réponses dans un tableau) (@) range(S) —(b)_range(1,8) (©) range(2,20,3) (@)_range(14,2,3) _(e)_range(10,0,-2) Exercice1 - Les questions sont indépendantes entre eles. 1. Recherche naive d'un élément dans une liste. (@) Ecrire une fonction rech_naive(x,L) + prenant en arguments tn objet x et une liste L + retournant True si x figure dans L, False sinon, cette valeur 6tant déterminée de maniére naive Mest interdit d’utiliser in et demandé d'écrire une boucle vhile (b) n désignant le nombre d'éléments de L, donner sans justification la complexité de la fonction précédente (2) dans le meilleur cas (@identifier) 2) dans le pire cas (@identifier) (3) dans le cas général 2. Déterminer si une liste de nombre est triée ou non. (a) Ecrire une fonction est_triee(L) : + prenant en argument une liste L de nombres (entiers ou flottants) sTetournant True si Lest triée, False sinon Mest demandé d'utiliser une boucle while (©) n désignant le nombre d'éléments de L, donner sans justification la complexité de la fonction précédente dans le cas général. 3. Méthode dexponentiation rapide (version itérative). (@) Ecrire une fonction expo_rapide_it(x,n) : - prenant en arguments un nombre x et un entier naturel n + retournant la valeur de x*, cette valeur étant calculée par la méthode d'exponentiation rapide, ici sous sa forme itérative, utilisant une boucle white et a priori trois variables, désignées ci-dessous par expo, y et r (©) Faire tourner 'algorithme la main dans le cas olin = 19: = reporter le résultat des différentes étapes dans un tableau du type ci-dessous : avant entrée dans la boucle || aprésTétape I | aprésTétape 2 y ‘expo = + indiquer explicitement ce qui provoque l'arrét de la boucle while, puis justifierle résultat final retourné. (©) Donner sans justification la complexité de cet algorithme. 4. Détermination des deux plus grands éléments. (@ Ecrire une fonction double_max(L) : + prenant en argument une liste L de nombres (entiers ou flottants) deux & deux distincts, comportant au moins deux éléments (ne pas restituer le pré-programme permettant, a Vaide de instruction assert, dafficher un message d’erreur dans le cas ois 'utilisateur entrerait une liste ne satisfaisant pas ces conditions) retournant le couple formé du plus grand élément de L et du plus grand élément suivant Par exemple, lexécution de double_max([6,1,7,3,8,4,5]) doit provoquer le retour du couple (8,7) Ce couple sera déterminé en un seul parcours de faisant évoluer deux variables notées par ex. max0 et max1 (b) ndésignant le nombre d’éléments de L, donner sans justification la complexité des fonctions précédentes. Exercice2 - Numération 1. Ectire une fonction chi ffres(ii,b) : + Prenant en arguments un entier Ne N* et un entier b¢ [2, +00] + Tetournant la liste des chiffres de 'écriture de W en base b Convention concernant Vordre des chiffres : Vexécution, par exemple, de chit tres (2023, 10), doit provaquer le retour de (3,2,0,2) 2. Application 1. Ens‘inspirant dela fonction précédente, mais sans I'uiliser directement, 6crire une fonction somme_chiffres(il,b) + Prenant en arguments un entier We N* et un entier b€ [2, +00] + Tetournant la somme des chifltes de I'écriture de en base b 3. Application 2. On dit qu'un entier est un nombre d’Amstrong s'il est com de ses chiffres (en base 10). Par exemple, 153 est un nombre d’Amstrong, car 1? +53 +37 ‘entre 100 et 999 et s'il est égal ala somme des cubes +125+27= 153, (@ Ecrire une fonction est_anstrong(n) : + prenant en argument un entier n€ N* + retournant True sin est un nombre d’Amstrong, False sinon Mest permis diutiliser chiffres (b) Ecrire a présent une fonction Amstrong (N) + prenant en argument un entier WEN" + retournant la liste, 6ventuellement vide, de tous les nombres d’Amstrong inférieurs ou égaux a W est permis d'utiliser est_anstrong Exercice3 - Restitution des connaissances - Listes - Tris Dans cet exercice, on considére que l'utilisateur fournira toujours des arguments respectant les éventuelles conditions im- posées, et on n’écrira donc aucune instruction assert 1. Tr parssélection. (@) Ectire une fonction tri_selection(L) : + prenant en argument une liste non vide L composée d'entiers « triant la liste L selon la méthode dite du tri par sélection, sans rien retourner ala fin (b) Dans cette question, L désigne la liste (4,2,6,1,3,5] Ecrire 1'évolution de L au fur et & mesure qu'on lui applique cet algorithme (©) Dans cette question, on revient au cas général. Donner sans justification : + les caractéristiques de ce tri -n désignant le nombre d’éléments de L, la complexité de ce tri 2, Triabulles. (a) Ecrire une fonction tri_bulles(L) : + prenant en argument une liste non vide L composée d’entiers « triant la liste L selon la méthode dite du tri a bulles, sans rien retourner ala fin. (b) Dans cette question, L désigne la liste [4,2,6,1,3,5] Ecrire lévolution de L au fur et a mesure qu'on lui applique cet algorithme (©) Dans cette question, on revient au cas général. Donner sans justification : «les caractéristiques de ce tri +n désignant le nombre d’éléments de L, la complexité de ce tri 3. TH par comptage. (a) Ecrire une fonction tri_comptage(L,™) : . prenant en argument un entier positif et une liste L composée d’entiers tous situés dans [0,] + retournant une liste correspondant ala liste L triée, cette liste étant déterminée selon la méthode dite du tri par comptage (b) Citer la caractéristique de ce tri distinguant celui-ci des deux autres tris précédents. Exercice4 - Eléments dominants d'une. liste Onappelle élément dominant dune liste. tout élément de L dont le nombre d'gccurrences est maximal Une liste non vide admet toujours un élément dominant, mais celui-ci n’est pas nécessairement unique. Parexemple: lalisteLi=(5,1,5,4,5,7,5,3,5) admet un seul élément dominant: 5 lalisteL2=[1,4,4,5,7,2,3,5] admet deux éléments dominants :4 et 1, Ecrire une fonction pge (L) + prenant en argument une liste L de nombres (flottants) + Tetournant la valeur de son plus grand élément 2. Bcrire une fonction codage_oce(L) + Prenant en argument une liste L de nombres (flottants) + Fetournant la liste, notée ici occ, de méme longueur que L, définie par: l= [rome doccurrences de L{i] dans L sii est e plus petit indice j tel que L(j] =L(3] sinon Par exemple: codage_occ(L1) doit retourner (5, 1,0,1,0,1,0,1,0] codage_oce(L2) doit retourner (1,2,0,2,1,1,1,0] 3. Ecrire enfin une fonction dominant (L) + prenant en argument une liste L de nombres (flottants) + Fetournant la liste des éléments dominants distincts de L Parexemple: dominants(L1) doit retourner [5] doninants(L2) doit retoumer [4,5] (On pourra utiliser les fonctions précédentes. 4, Indépendamment, écrire une fontion spécifique dominant s_triee(L) + prenant en argument une liste L de nombres (flottants) triée -etournant également la liste des éléments dominants distincts de L PROBLEME - Carrés Magiques (On fixe unentier n€ N° pour tout le probleme. > On appelle tableau carré d'ordre n toute liste composée de n éléments, ces éléments étant eux-mémes des listes @.n éléments, composées d'entiers naturels, > Exemple de référence ((46,3,2,13) (5, 10,11,8], (9,6,7,12) , (4,16, 14, 1]] estun tableau carré d'ordre 4 wl 3]2 | 5 [1o/n] 8 9[6{7 |i 4 [spat Ilse représente comme ceci: > Rappels & précisions concernant Vindexation dans la représentation d'un tableau carré d’ordre n comme ci-dessus + les lignes sont numérotées de 0 (ligne du haut) an-t (ligne du bas) - les colonnes sont numérotées de (colonne la plus a gauche) an-1 (colonne la plus a droite) + pour tous i,j € [0,n-1], élément deT situé sur la ligne et la colonne j sobtient via T(] [3] > Diagonale principale & diagonale secondaire d’un tableau carré:: dans le tableau de référence ci-dessus: + la diagonale principale du tableau est composée des entiers 16, 10,7 et 1 - la diagonale secondaire du tableau est composée des entiers 4, 6,11 et13 > Carrés magiques & semi-magiques : éant donné un tableau carré dordre n: + ondit queT est un carré semi-magique si les sommes des nombres sur chaque ligne, et sur chaque colonne, sont identiques + ondit queT est un carré magique si les sommes des nombres sur chaque ligne, sur chaque colonne, ainsi que sur chacune des deux diagonales, sont identiques > Tableau complet : étant donné un tableauT carré d’ordre n, on dit queT est un tableau complet s'il est exactement composé de tous les entiers compris entre | et n> Notre tableau de référence est @ la fois un carré magique d’ordre4 (les sommes sont toutes égales &34) et un tableau complet Partiel - Magie & Complétude d’un tableau 1. Dans cette question, T désigne un tableau carré. Former une expression de valeur égale au nombre de lignes deT 2. (a) Ecrire une fonction sonme_1igne(T,i) : - prenant en arguments un tableau carréT (de nb. de lignes n inconnu) et un entier 4 (supposé dans [0,n-1]) - retournant la somme des nombres situés sur la i-iame ligne de T (©) Ecrire une fonction somme_colonne(T, 5) : prenant en arguments un tableau carréT (de nb. de lignes n inconnu) et un entier j (supposé dans [0,n-1]) -retournant la somme des nombres situés sur la j-iéme colonne de T 3. (a) Eerire une fonction sonme_diag_principale(T) : « prenant en argument un tableau carréT (de nombre de lignes n inconnu) - retournant la somme des nombres situés sur la diagonale principale de T () ferire une fonction somme_diag_secondaire(T) : - prenant en argument un tableau carré T (de nombre de lignes n inconnu) -retournant la somme des nombres situés sur la diagonale secondaire de T 4. Ecrire a présent une fonction est_magique(T) : « prenant en argument un tableau carré T (de nombre de lignes n inconnu) -retournant True siT est un carré magique, False sinon Programmation libre. Il est bien sir permis d'utiliser les fonctions précédentes. 5. Cette question est indépendantes des questions 2 4. Ecrire une fonction est_conplet (1) + prenant en argument un tableau carréT (de nombre de lignes n inconnu) -Tetournant True si Test complet, False sinon La programmation est libre, mais ilest interdit d'utliser des instructions du type x in L» Dans Vidéal, on tachera de mettre en forme les idées suivantes ~ eréer une liste G composée den? booléens (représentant [1,n7]) tous égaux aFalse (pour exprimer que pour instant, on na rencontré aucun entier compris entre 1 et n?) - parcourirT (double boucle), afecter« les bonnes cases» deG aTrue (pour « cocher» les entiers de [1,n7] rencontrés) - reparcourir @ afin de déterminer la réponse au probldme posé Partie2 - Construction d'un carré semi-magique complet d’ordre impair Les techniques permettant de construire des carrés magiques sont multiples. Lobjectifde cette partie est 'implémenter la méthode mise au point en 1698 par Simon De La Loubére, qui permet dobte- nir un carré semi-magique complet d’ordre impair. Nous exposons le principe de cette méthode dans le cas oli n= 5, en nous appuyant sur un exemple > construction de la I*série de nombres: + placer 'entier 1 dans une case quelconque du carré (choisie au hasard) + placer ensuite 2, 3, 4,5 successivement en se déplagant @ chaque fois « diagonalement en direction du nord-est» lorsqu’on arrive au bord, on « ressort par le coté opposé» (comme dans Pac-Man!) 2 Exemple: > construction de la 28me série de nombres: « placer Ventier 6 dans la case située juste en-dessous de celle contenant 5 (cette case est libre) (« ressortir par le haut » si est sur la derniére ligne) « placer ensuite7, 8, 9, 10 successivement en se déplagant comme dans la premiére série 2 z 3 2 ai 8 & T 7 I Exemple: [5 7 6 3 6 3 @ a 3 > les #, et Ssérie de nombres se construisent de la méme facon On admet que le carré ainsi obtenu est semi-magique. 1. Achever la construction du tableau précédent (dans un unique tableau, reporter en noir les nombres déja placés & utiliser une couleur par nouvelle série de nombres) Verifier mentalement que le carré obtenu est semi-magique (tester quelques colonnes et quelques lignes). 2. Eerire une fonction zeros (n) : + prenant en argument un entier n (supposé impair) sretournant un tableau carré d’ordre n dont tous les coefficients sont égaux & 0 3. (@) Ecrire une instruction permettant d'importer le module random selon lalias x La fonction randint du module randon prend en arguments deux entiers relatifs et b et retourne un entier choist ‘au hasard dans {a,b] (a etb inclus) Mlustration : o> helptr-candinty eto on method randine in sodite reno: o> roranatott2.5) 5 oom rorandiott2.5) ase roranatntt2.5) o> roranaintt2.5) \ | i i so roranatoet2,s 2 |, ) Ecrire une fonction initiatisation(n) : + Prenant en argument un entier n (supposé impait) + fetournant un couple d’entiers choisis au hasard dans [0,n-1] On utilisera bien sr randint 4, ferire une fonction case_nord_est(n, i,j) : + Prenant en arguments un entier n (supposé impair) et deux entiers i,j € [0,n-1] + retournant le couple des coordonnées de la case située ~ aunord-est de la case située en position (i, j) dans un tableau carré d’ordre n « si on ne sort pas» -sinon ... vous de trouver! Lutilisation de’, pourra permettre déviter les discussions de cas. 5. Ecrire une fonction case_dessous(n,i,) : + prenant en arguments un entier n (supposé impair) et deux entiers i, j € [0,n-1] -retournant le couple des coordonnées de la case située : ~ juste en-dessous de la case située en position (i,j) dans un tableau carré d’ordre n « si onne sort pas» -sinon ... 8 vous de trouver! . ‘Méme recommandation. 6. Ecrire enfin une fonction DeLaLoubere(n) : - prenant en argument un entier n (supposé impait) -retournant un carré semi-magique obtenu comme exposé en début de partie. Hest bien sar permis d'utiliser les fonctions précédentes. (Quelques exemples de syntaxe afin de récupérer les coordonnées d'un couple retourné par une fonction : Dans Vexemple ci-dessous, la fonction £ renvoie un couple de valeurs, et on expose plusieurs fagons de stocker les deux Taian Te oe FIN DU PROBLEME Fin Du Devorr

Vous aimerez peut-être aussi