DS 2

Transcription

DS 2
PTSI2 – 2016/2017 – Info
Lycée La Martinière-Monplaisir – Lyon
DS 2.
Jeudi 15 décembre, de 8h40 à 9h35.
CONSIGNES
H Vous n’utiliserez pas de fonctions prédéfinies en python du type sum, min, max, del, remove.
H Lors de l’écriture d’une fonction, vous n’utiliserez qu’un seul return.
H Lorsque l’exercice demande des hypothèses particulières sur l’un des arguments d’une fonction (par
exemple, que n doit être un entier positif), on ne fera pas de test pour vérifier cette hypothèse dans
la fonction (on fera donc confiance à l’utilisateur pour n’utiliser la fonction qu’avec des arguments
convenables !).
Exercice 1. Construire en python la liste a telle que :
— le premier élément est l’entier 0
— le deuxième élément est l’entier égal à 0 − 1
— le troisième élément est l’entier égal à 0 − 1 + 2
— le quatrième élément est l’entier égal à 0 − 1 + 2 − 3
— etc...
— le dernier élément est l’entier égal à 0 − 1 + 2 − 3 + ... + 100
On proposera une solution utilisant la méthode append.
Exercice 2. Soit a une liste de nombre entiers triée par ordre croissant. On cherche à savoir si un entier x0 est
dans a.
1◦ ) Écrire en pseudo-code l’algorithme de recherche par dichotomie.
2◦ ) Proposer un invariant (que l’on ne justifiera pas) et un variant de boucle (que l’on justifiera).
Exercice 3. On travaille dans cet exercice sur des listes d’entiers. Les programmes qui suivent seront écrits en
python.
1◦ ) Écrire une fonction mini d’argument une liste a renvoyant le minimum de la liste a.
On écrira deux commentaires bien placés permettant de justifier un invariant de boucle (il n’est pas
demandé d’explication supplémentaire).
2◦ ) Écrire une fonction liste_allegee d’arguments un entier x et une liste a qui renvoie une nouvelle liste,
constituée des éléments de a sans les occurrences de x.
Par exemple, si a = [3, 5, 4, 3, 3, 5] alors liste_allegee(3, a) est la liste [5, 4, 5].
◦
3 ) Écrire, en utilisant les deux fonctions précédentes, une fonction mini2 d’argument une liste a qui renvoie
le second plus petit élément de a.
Exercice 4. Les programmes de cet exercice seront écrits en python et on veillera à arrêter la recherche dès
qu’on est en mesure de répondre.
Dans cet exercice, on n’utilisera pas de syntaxe du type elt in a pour savoir si elt est dans a
(que a soit une chaîne ou une liste).
1◦ ) On considère une chaîne de caractère s, dont les éléments sont uniquement des chiffres (entiers entre 0 et
9).
Écrire une fonction apparition_chiffre, d’arguments la chaîne s et un entier i entre 0 et 9, qui renvoie
True ou False selon que i apparaît dans s ou non.
Par exemple, apparition_chiffre(’1984’, 3) renvoie False, apparition_chiffre(’1984’, 8) renvoie True.
◦
2 ) Un entier n ∈ N∗ est dit riche si tous les chiffres apparaissent au moins une fois lorsqu’on écrit n2 et n3
sous forme décimale.
Par exemple, 128 est riche car 1282 = 16384 et 1283 = 2097152 : on constate que tous les entiers de 0 à 9
apparaissent au moins une fois.
Écrire une fonction est_riche, d’argument un entier n, qui renvoie True ou False selon que n est un
entier riche ou non.
1
Exercice 5. Dans cet exercice, on utilisera entre autres les méthodes strip et split, qui s’appliquent à une
chaîne de caractères. Les programmes seront écrits en python.
1◦ ) Le 24 décembre approche et le Père Noël doit prévoir ses achats de jouets à l’aide du catalogue de son
magasin habituel.
Il dispose d’un fichier catalogue.csv, qui contient, dans la première colonne, le nom des jouets disponibles
au magasin, et dans la deuxième colonne, le prix correspondant en euros, qui sera supposé entier.
Les trois premières lignes de ce fichier sont :
’Poupée Corolle\t29\n’
’Fusée en bois\t14\n’
et
’Monopoly\t20\n’
a) Avec python, ouvrir le fichier catalogue.csv. Écrire l’instruction permettant de stocker toutes les
lignes du fichier dans une liste les_lignes_catalogue. Fermer le fichier.
b) Créer une liste les_jouets qui contient les noms des jouets disponibles au magasin, ainsi qu’une
liste les_prix des prix correspondants, stockés sous forme d’entiers, le tout en respectant l’ordre
dans lequel les jouets apparaissent dans le catalogue.
Dans notre exemple, on a :
les_jouets = [’Poupée Corolle’, ’Fusée en bois’, ’Monopoly’, ...]
et les_prix = [29, 14, 20, ...].
c) Écrire une fonction recherche_jouet, d’argument une chaîne de caractère jouet (supposé présente
dans le catalogue, ne pas tester), et qui renvoie l’indice du jouet dans la liste les_jouets.
On veillera à arrêter la recherche de l’indice dès qu’on l’a trouvé.
d) Écrire l’instruction qui permet d’afficher le prix du jouet ’Figurine Spiderman’.
◦
2 ) Le Père Noël dispose également d’un fichier demandes.csv, qui contient les demandes des enfants. On
suppose que chaque enfant n’a demandé qu’un seul cadeau, qui se trouve bien dans le catalogue.
Par exemple, les trois premières lignes de ce fichier sont :
’Zoé\tLeneuf\tMonopoly\n’
’Jim\tDupont\tVélo\n’ et ’Basile\tMallet\tZoo Playmobil\n’
a) Avec python, ouvrir le fichier demandes.csv. Écrire l’instruction permettant de stocker toutes les
lignes du fichier dans une liste les_souhaits. Fermer le fichier.
b) Créer un nouveau fichier demandes_avec_prix.csv, identique à demandes.csv mais avec une colonne
supplémentaire, contenant pour chaque enfant le prix du cadeau demandé. Par exemple, la première
ligne sera :
’Zoé\tLeneuf\tMonopoly\t20\n’
Calculer dans le même algorithme le montant total des achats à effectuer par le Père Noël, et afficher
ce montant.
2