Feuille exos 1
Transcription
Feuille exos 1
L2 Informatique - 2016–2017 —— Algorithmes et Programmation 2 —— TD : Modules —— Exercice 1 Le module complex1 Dans les sessions des premières questions de cet exercice, on suppose que le module complex1 (vu en cours) a été importé avec la commande import complex1 as cplx. Voici la documentation de ce module qui permet de travailler avec des nombres complexes : >>> help(cplx) Help on module Complex.src.complex1 in Complex.src: NAME Complex.src.complex1 - :mod:`complex1` module : version 1 of a (simple) module for compl DESCRIPTION :author: `FIL - IEEA - Univ. Lille1.fr <http://portail.fil.univ-lille1.fr>`_ :date: 2015, september. Last revised : 2016, september Complex numbers are represented with dictionaries .. seealso:: :mod:`complex2` FUNCTIONS add(z1, z2) return the sum of the two complex numbers z1 and z2 :param z1: a complex number :type z1: complex :param z2: a complex number :type z2: complex :return: z1 + z2 :rtype: complex :UC: none :Example: >>> z = add(create(1, 2), create(3, 4)) >>> get_real_part (z) 4 >>> get_imag_part (z) 6 are_equals(z1, z2) return True if complex numbers z1 and z2 are equals False otherwise :param z1: a complex number :type z1: complex :param z2: a complex number :type z2: complex :return: True if z1 = z2, False otherwise :rtype: bool 1 :UC: none :Example: >>> z1 = create(1, >>> z2 = create(1, >>> z3 = create(1, >>> are_equals(z1, True >>> are_equals(z1, False 2) 2) -1) z2) z3) create(x, y) create a complex number with real part x and imaginary part y :param x: the real part of the complex number to create :type x: int or float :param y: the imaginary part of the complex number to create :type y: int or float :return: the complex number x + iy :rtype: complex :UC: none :Example: >>> z = create(1, 2) >>> get_real_part(z) 1 >>> get_imag_part(z) 2 from_real_number(x) create the complex number x + i0 from real number x :param x: a real number :type x: int or float :return: the complex number x + 0i :rtype: complex :UC: none :Example: >>> z = from_real_number (1) >>> get_real_part(z) 1 >>> get_imag_part(z) 0 get_imag_part(z) return the imaginary part of complex number z :param z: a complex number :type z: complex :return: the imaginary part of z :rtype: int or float :UC: none :Example: >>> z = create(1, 2) >>> get_imag_part(z) 2 get_real_part(z) return the real part of complex number z 2 :param z: a complex number :type z: complex :return: the real part of z :rtype: int or float :UC: none :Example: >>> z = create(1, 2) >>> get_real_part(z) 1 modulus(z) return the modulus of complex number z, ie :math:`\sqrt{x^2 + y^2}` if $z=x+yi$ :param z: a complex number :type z: complex :return: his modulus :rtype: float :UC: none :Example: >>> modulus(create(0, 0)) 0.0 >>> modulus(create(3, 4)) 5.0 mult(z1, z2) return the product of the two complex numbers z1 and z2 :param z1: a complex number :type z1: complex :param z2: a complex number :type z2: complex :return: z1 * z2 :rtype: complex :UC: none :Example: >>> z = mult(create(1, 2), create(3, 4)) >>> get_real_part(z) -5 >>> get_imag_part(z) 10 print(z, end=’\n’) print the complex number z with algebraic form `x + yi` where x = real part of z and y = imaginary part :param z: complex number to print :type z: complex :param end: [optional] separator (default is ’\\n’) :type end: string :return: None :UC: none FILE /home/eric/Enseignement/Licence/AP2/Modules/Complex/src/complex1.py Question 1 Quels sont les constructeurs et sélecteurs définis dans ce module ? 3 Question 2 La lecture de cette documentation laisse-t-elle entrevoir de quelle façon les nombres complexes sont implantés ? Du point de vue de l’utilisateur du module, cette connaissance est-elle importante ? Question 3 Indiquez comment créer les trois nombres complexes z1 = 1 + 2i et z2 = 3 + 4i et z3 = z1 + z2, puis imprimer le nombre z3 . Question 4 Comment imprimer le nombre z3 sous la forme z3 = ... + ... i ? Dans les sessions des questions qui suivent, le module complex1 a été importé avec la commande from complex1 import * Question 5 Réécrivez les instructions des questions 3 et 4 dans ce contexte. Exercice 2 Les cartes Dans cet exercice on souhaite réaliser un module pour représenter les cartes à jouer du jeu de bataille. Ce module sera nommé card. Un jeu de bataille est constitué de 32 cartes, chacune d’elles étant caractérisée par — une valeur qui est un élément de l’ensemble {7, 8, 9, 10, J, Q, K, A} (J pour jack, Q pour queen, K pour king et A pour ace) ; vous pourrez supposer que cet ensemble de valeurs est défini par la constante VALUES = ["7", "8", "9", "10", "Jack", "Queen", "King", "Ace"] ; — une couleur qui est un élément de l’ensemble {♣, ♦, ♥, ♠, } ; vous pourrez supposer que cet ensemble de couleurs est défini dans le module par la constante COLORS = ["club", "diamond", "heart", "spade"]. Question 1 En supposant déjà réalisés dans ce module — le constructeur create qui à partir d’une valeur et d’une couleur valides renvoie une carte de cette valeur et de cette couleur ; — et les sélecteurs get_color et get_value renvoyant respectivement la couleur et la valeur d’une carte, couleur et valeur étant l’une des chaînes de caractères des constantes COLORS et VALUES >>> c = card.create(’Ace’, ’heart’) >>> card.get_color(c) ’heart’ >>> card.get_value(c) ’Ace’ réalisez dans ce module les fonctions suivantes : — une fonction random_card (sans paramètre) de création aléatoire d’une carte ; — un prédicat are_equals qui renvoie True si les deux cartes passées en paramètres sont égales (même couleur et même valeur) et False sinon ; — une fonction to_string de conversion d’une carte en une représentation sous forme de chaîne de caractères. >>> card.to_string(c) ’Ace of heart’ Question 2 En utilisant le module card, réalisez une fonction deck sans paramètre qui renvoie un jeu complet des 32 cartes. Question 3 Proposez des réalisations du constructeur create et des sélecteurs get_color et get_value. 4