Licence Culture Humaniste et Scientifique, 2013–2014 Universités Bordeaux 3 & 1 Contrôle continu informatique — Durée : 2h Répondre aux questions dans un seul fichier python, qu’on appellera prenom-nom.py. Un fichier modèle est fourni. Il est demandé : – de le récupérer ici http://www.labri.fr/~zeitoun/enseignement/13-14/CHS/Skel.py, – de le sauvegarder sous le nom prenom-nom.py, – de le compléter suivant les exercices ci-dessous. Le fichier fourni contient : – la première ligne de chaque fonction à écrire, mais le corps de chaque fonction ne contient qu’une instruction return (sauf celle de l’exercice 5.2 qui contient plus), qu’il faut modifier. – des lignes d’affichage, permettant de tester les fonctions une fois écrites. Pour pouvoir vérifier les programmes, les résultats de ces tests sont fournis page suivante. Exercice 1 Écrire une fonction f1 qui prend en argument 2 entiers a et b, et renvoie la valeur ab − a − b. On rappelle les opérateurs // et % : a // b retourne le quotient de la division entière de a par b et a % b le reste de cette division. Exercice 2 Écrire une fonction f2 qui prend en argument 3 entiers a, b et c, et renvoie la valeur a + b si c est pair, et a − b si c est impair. On rappelle les opérateurs suivants sur les listes (tous ne vous seront pas forcément nécessaires) : ◦ ◦ ◦ ◦ len(L) renvoie la longueur de la liste L, L[i] est le (i + 1)ème élément de la liste L (le premier élément étant L[0]), L[-i] est l’élément L[len(L)-i] (par exemple, L[-1] est le dernier élément de la liste), L1 + L2 est la liste formée des éléments de L1, suivis de ceux de L2. Par exemple, [1,2] + [3] s’évalue en la liste [1,2,3], ◦ L[i:] est la liste L privée de ses i premiers éléments. Par exemple, si L vaut [1,2,3], L[1:] est la liste [2, 3]. Exercice 3 Écrire une fonction longueur_paire qui prend en argument une liste L, et qui renvoie True si cette liste est de longueur paire et False sinon. Exercice 4 1. Écrire une fonction demi qui prend en argument un entier n > 0, et renvoie la partie entière de n/2. Par exemple, si n vaut 6 ou 7, cette fonction doit renvoyer 3. 2. Écrire une fonction reste_et_parite qui prend en argument un entier n, et qui renvoie la liste [n/2, 0] si n est pair, et la liste [E(n/2), 1] si n est impair, où E(n/2) désigne la partie entière de n/2, calculée à la question 1. 3. Écrire une fonction decomposition_base_2 qui prend en argument un entier n, et renvoie la liste de sa décomposition en base 2. Par exemple, decomposition_base_2(13) doit renvoyer la liste [1, 1, 0, 1]. 1 Exercice 5 1. Écrire une fonction non récursive double_liste qui prend en argument une liste d’entiers L et renvoie la liste où chaque entier est doublé. Ainsi, double_liste[1,2,3,4,5] doit renvoyer [2,4,6,8,10]. 2. Écrire une fonction double_liste_rec faisant la même chose, de façon récursive. Exercice 6 1. Écrire une fonction non récursive renverse_liste qui prend en argument une liste d’entiers L et renvoie la liste renversée. Par exemple, renverse_liste[1,2,3,4,5] doit renvoyer [5,4,3,2,1]. 2. Écrire une fonction renverse_liste_rec faisant la même chose, de façon récursive. Exercice 7 1. Écrire une fonction completer qui prend en argument 2 listes de chiffres entre 0 et 9, et qui renvoie ces 2 listes, la plus courte ayant été complétée par des 0 à gauche pour avoir 2 listes de même longueur. Par exemple, completer([1,2], [3,4,5]) doit renvoyer [0,1,2], [3,4,5]. 2. En utilisant la fonction précédente, écrire une fonction addition qui prend en argument 2 listes de chiffres entre 0 et 9, et qui renvoie la liste représentant l’addition des deux nombres dont la suite des chiffres est donnée par les arguments. Par exemple, avec les arguments [1,2,3] et [2,0], qui représentent les entiers 123 et 20, elle doit renvoyer [1,4,3] qui représente 143 = 123 + 20. Résultats attendus avec le fichier fourni. f1 (3 ,8) = 13 f2 (2 ,3 ,4) = 5 f2 (3 ,4 ,5) = -1 demi (6) = 3 demi (7) = 3 reste_et_parite (6) = [3 , 0] reste_et_parite (7) = [3 , 1] d e c o m p o s i t i on _ b a s e _ 2 (13) = [1 , 0 , 1 , 1] d e c o m p o s i t i on _ b a s e _ 2 (15) = [1 , 1 , 1 , 1] double_liste ([1 ,2 ,3 ,4 ,5]) = [2 , 4 , 6 , 8 , 10] double_liste_rec ([1 ,2 ,3 ,4 ,5]) = [2 , 4 , 6 , 8 , 10] renverse_liste ([1 ,2 ,3 ,4 ,5]) = [5 , 4 , 3 , 2 , 1] re nv er se_ li st e_r ec ([1 ,2 ,3 ,4 ,5]) = [5 , 4 , 3 , 2 , 1] completer ([1 ,2 ,3] , [2 ,0]) = ([1 , 4 , 3] , [0 ,2 ,0]) addition ([1 ,2 ,3] , [2 ,0]) = [1 , 4 , 3] 2