Examen Langage de Script pour l`ID

publicité
 Examen Langage de Script pour l'ID Durée: 2h. Documents autorisés, à l'exception des livres.
Exercice 1: Suivi d'animaux sauvages en montagne
Dans cet exercice, vous participez à l'amélioration du suivi d'animaux sauvages en montagne (par
exemple des ours dans les pyrénées). Diérents types de suivis sont réalisés. Certains animaux sont
équipés d'un émetteur qui permet un relevé précis de leur localisation sur le territoire. Ce sont des
repérages télémétriques, obtenus de manière journalière. Le format de ce chier (telemetrie.txt)
est le suivant:
[12/02/2012]
mireille: 42.924252,-0.500794
pony: 42.801447,0.08194
[13/02/2012]
mireille: 42.928,-0.500799
pony: 42.801447,0.08194
Chaque ligne donne les informations sur l'identité de l'animal, puis sa localisation (latitude, longitude). Donnez tout d'abord les fonctions Python permettant de :
•
savoir si le chier est valide. Le chier est
valide si les dates sont incrémentées de manière
correcte chaque jour, et les coordonnées géographiques se situent bien dans l'intervalle,
+42.5/+43.5 pour la latitude et 1/+1 pour la longitude.
•
savoir si un animal (d'indentité donnée en paramètre) est en
hibernation, c'est-à-dire si sa
localisation est strictement identique depuis au moins 3 jours.
Un autre type de suivi est eectué, sur la base des observations directes de personnes (traces,
etc.). Les informations de ce type sont dans un chier
observations.txt
sous la forme suivante:
observation num. : 435
date: 13/02/2012
lieu: Borce
indices: traces de griffes
An de vérier si ces observations sont conformes aux relevés télémétriques, une première
étape consistera à considérer si les lieux coincident. Vous disposez d'une fonction
localisation(lieu)
qui renvoie un tuple correspondant à la latitude et à la longitude du lieu dit.
Par exemple
localisation(Borce) donne 42.885524,-0.552864.
•
Ecrire la fonction Python qui, pour un numéro d'observation, renvoie le nom du ou des
animaux qui peuvent expliquer cette observation.
Un animal explique une observation
si à la date de l'observation il se situait selon le relevé télémétrique à proximité du lieu
d'observation.
La fonction devra renvoyer aucun animal correspondant si aucun animal
n'explique l'observation.
Exercice 2: Le compte est bon
Ici, on va implanter une partie d'un algorithme permettant de répondre au problème du compte
est bon.
N
Rappelons d'abord les règles de ce jeu: Le but du jeu est alors d'obtenir un nombre
à partir d'un ensemble de nombres
élémentaires
+, ×, /, −.
{n0 , . . . , nm },
en utilisant les 4 opérations arithmétiques
Si on peut obtenir ce nombre, on dit alors que le compte est bon. On
peut se servir une fois au plus des nombres de l'ensemble. Une solution n'est valide que si tous les
résultats intermédiaires sont positifs, et que les divisions sont exactes.
Exemple:
Reconstituer le nombre 999 à partir de l'ensemble de nombres
{2, 4, 6, 8, 10, 25}.
Solution:
• 6 + 10 = 16
• 16 × 2 = 32
• 4 × 8 = 32
• 32 × 32 = 1024
• 1024 − 25 = 999
Le principe de l'algorithme consiste à générer toutes les solutions possibles à partir de tous les
sous-ensembles de l'ensemble des entiers positifs en entrée du programme.
Important:
Dans la suite, on représentera les ensembles des comptes obtenus à partir d'un
ensemble d'entiers positifs par un arbre binaire de recherche c'est-à-dire vériant que pour chacun
des n÷uds, la racine est plus grande (resp.
(resp.
petite) que tous les noeuds du sous-arbre gauche
droit), et que les sous-arbres gauche et droit sont eux-mêmes de recherche.
Les arbres
binaires de recherche ayant été vus en TD4 (premier exercice du TD), vous pourrez supposer
comme connues toutes les fonctions d'ajout, de recherche et de retrait d'un entier dans un arbre
binaire de recherche, et donc les utiliser sans associer le code python sur votre feuille d'examen.
Dans cette partie de l'algorithme, on se propose d'écrire une fonction récursive qui à partir de 2
ensembles d'entiers
EA
et
EB ,
construit l'ensemble des entiers que l'on peut obtenir en ajoutant,
multipliant, soustrayant (quand c'est possible) et divisant (quand c'est possible) un élément du
1er ensemble avec un élément du second. Puisque cette fonction requiert le parcours récursif des
deux arbres, on se propose de procéder comme suit:
a et b engendre
a/b (si autorisé);
1. Écrire une fonction python qui étant donnés 2 entiers
recherche contenant
a + b, a × b, a − b
(si autorisé), et
l'arbre binaire de
2. Écrire une fonction python récursive qui étant donnés un ensemble d'entiers positifs
rappelle représenté par un arbre binaire de recherche) et un entier
x,
EA
(je
calcule l'ensemble de
toutes les valeurs que l'on peut obtenir en ajoutant, multipliant, soustrayant (quand c'est
possible) et divisant (quand c'est possible) un élément de l'ensemble avec
x.
3. Enn, écrire une fonction python récursive qui à partir de 2 ensembles d'entiers positifs
EB
EA et
renvoie l'ensemble de tous les comptes intermédiaires obtenus en ajoutant, multipliant,
soustrayant (quand c'est possible) et divisant (quand c'est possible) un élément de
un élément de
EB .
2
EA
avec
Téléchargement