Download Python exam 2020-2021 and more Exams Computer science in PDF only on Docsity! AnnĂ©e universitaire 2017-2018 Devoir surveillĂ© NumĂ©ro 1 MatiĂšre Nombre de pages nombre dâheures Classes Informatique 2 1 h 2iĂšme Cycle prĂ©paratoire NB : Si un candidat est amenĂ© Ă repĂ©rer ce qui peut lui sembler ĂȘtre une erreur dâĂ©noncĂ©, il le signalera sur sa copie et devra poursuivre sa composition en expliquant les raisons des initiatives quâil a Ă©tĂ© amenĂ© Ă prendre. Les parties 1 et 2 sont totalement indĂ©pendantes. Partie 1- Programmation OrientĂ©e Objet (10 points) Lâobjectif de cette partie est dâimplĂ©menter en Python, une classe Point3D permettant de reprĂ©senter un point Ă 3 dimen- sions en coordonnĂ©es cartĂ©siennes : chaque instance de cette classe contiendra 3 attributs de type float x, y et z. La classe doit offrir une interface permettant de lâinstancier et dâappliquer des opĂ©rations simples sur ses instances. Donner lâimplĂ©mentation Python de cette classe en respectant les consignes suivantes : (1.1)2 points Le constructeur reçoit 3 arguments tous optionnels : 3 floats xm, ym et zm reprĂ©sentant les coordonnĂ©es du point dans un systĂšme de coordonnĂ©es cartĂ©sien et prenant par dĂ©faut des valeurs nulles. (1.2)1 point La mĂ©thode magique __repr__ permettant de retourner un str contenant une reprĂ©sentation for- melle de self (voir dĂ©monstration ci-dessous). (1.3)2 points La mĂ©thode magique __abs__ permettant de calculer la norme euclidienne de self. La norme euclidienne dâun point de coordonnĂ©es cartĂ©siennes M = (xM , yM , zM ) est un float donnĂ© par : âMâ2 = â x2 M + y2M + z2M (1.4)2 points La mĂ©thode magique __sub__ qui prend deux paramĂštres (self et other : other supposĂ©e instance de Point3D) et qui retourne un Point3D contenant la diffĂ©rence terme Ă terme de self et other. La diffĂ©rence entre deux points 3D M = (xM , yM , zM ) et N = (xN , yN , zN ) est donnĂ©e par : M âN = (xM â xN , yM â yN , zM â zN ) (1.5)11/2 points Une mĂ©thode dist2 qui prend deux paramĂštres (self et other : other supposĂ© de type Point3D) et qui retourne un rĂ©el positif contenant la distance euclidienne entre self et other, donnĂ©e par : âselfâ otherâ2 (1.6)11/2 points Rappelons que la fonction native sorted permet de construire une liste triĂ©e Ă partir dâun itĂ©rable : >>> sorted([1,-17, 18, -30, 4]) [-30, -17, 1, 4, 18] Le paramĂštre optionnel key permet de spĂ©cifier une fonction indiquant le critĂšre de tri : >>> sorted([1+3j, 3-5j, 9+10j], key=lambda z: z.imag) # CritĂšre du tri = partie imaginaire [(3-5j), (1+3j), (9+10j)] Ăcrire une mĂ©thode plus_proches_voisins qui prend 3 paramĂštres (supposĂ©s valides) : â self : le point courant. â pts : un itĂ©rable contenant des instances de la classe Point3D. â n : un int strictement positif. La mĂ©thode doit retourner les n points de lâitĂ©rable pts les plus proches de self (en considĂ©rant la distance euclidienne comme mesure de proximitĂ©).