• Aucun résultat trouvé

Partiel d'Informatique ScientifiqueUn Paris-Brest

N/A
N/A
Protected

Academic year: 2022

Partager "Partiel d'Informatique ScientifiqueUn Paris-Brest"

Copied!
3
0
0

Texte intégral

(1)

IUT ORSAY Page 1 Sujet Partiel Horaires Trains Mesures physiques

Nom : ____________________________________ Date: _____________________________________

Prénom : _________________________________ Ordinateur : ___________ Groupe : _______

Partiel d'Informatique Scientifique Un Paris-Brest

Tout document écrit, clé USB autorisés.

Tout autre système électronique portable interdit.

Vous devez stocker les modules Python et fichiers annexes dans le réper­

toire Partiel sur le « bureau » de l'utilisateur info. Les modules devront contenir les en-têtes habituels, entre autre votre nom ; le code devra être documenté/commenté et testé, les modules outils devront avoir leur partie de tests à la fin du module.

La notation tiendra compte du respect strict des consignes sur le travail demandé, de la qualité des chaînes de documentation et des commentaires, de la pertinence des tests.

Attention à la syntaxe, aux calculs d'indices… si vous avez des doutes, pensez à tester dans la zone de l'interpréteur interactif. Dans les formules, attention aux unités.

Construisez vos tests, à la fin du module, au fur et à mesure que vous écrivez le code des fonctions à tester.

Si vous n'arrivez pas à terminer une fonction, faites-lui retourner une valeur fixe du même type que celui qu'elle doit retourner, et passez à la suite du partiel.

1. Introductions

On définit la vitesse de parcours entre une origine et une destination comme le rap­

port de la distance entre ces points par le temps de parcours :

v =

ΔΔdt .

Lorsque des coordonnées géographiques se présentent sous la forme de latitude et longitude sur la surface du globe, le calcul de la distance entre les deux points est moins trivial que dans le plan. Si l'on considère une altitude moyenne R de 6378 Km par rapport au centre de la terre, on peut utiliser la formule suivante pour calculer la distance d entre une origine O et une destination D :

Les angles étant bien sûr exprimés en radians.

Nous allons utiliser cette formule pour calculer des vitesses de trains entre diffé­

rentes stations (c'est une approximation… les trains ne sont pas des oiseaux). Pour cela, le module parisbrest.py vous est fourni (vous pouvez l'ouvrir). Il contient1 :

Une liste trajet1 composée de tuples contenant, pour chaque étape du trajet, deux chaînes : nom de station (gare), heure de passage.

>>> from parisbrest import trajet1

>>> print(trajet1)

[('Paris-Montparnasse', '7h05'), ('Rennes', '9h08'), ('St Brieuc', '9h57'), ('Guingamp', '10h15'), ('Morlaix', '10h44'), ('Brest', '11h20')]

>>> print(trajet1[2]) ('St Brieuc', '9h57')

1 Il a été constitué à partir d'horaires de trains trouvés sur www.horaires-des-trains.com, et de coordonnées de villes trouvées sur Wikipedia.

d= R ( π

2 −arcsin (sin(latD )×sin (latO)+cos (longD−longO)×cos (latD)×cos(latO)))

(2)

IUT ORSAY Page 2 Sujet Partiel Horaires Trains Mesures physiques

Un dictionnaire horaires qui, pour divers identificateurs de trains (chaîne), fait corres­

pondre le trajet correspondant, c'est à dire la liste de tuples avec nom de station et heure de passage. Le train "TGV8603" correspond au trajet1.

Un dictionnaire coordonnees qui, pour chaque nom de station, fait correspondre un tuple contenant sa latitude et sa longitude sous forme de nombres flottants correspon­

dants aux angles exprimés en degrés.

Exemple :

>>> from parisbrest import coordonnees

>>> print (coordonnees['Brest']) (48.390834, -4.485556)

Quatre variables latParis, longParis, latBrest, longBrest qui contiennent les lati­

tudes et longitudes de Paris et de Brest (pour faire facilement les tests).

Dans les scripts, on utilisera les variables et fonctions de ce module de données simple­

ment avec un import global : from parisbrest import * print(trajet1)

2. Module outils

Créer un module Python calculs_m.py qui contiendra les fonctions suivantes :

hstring2hfloat(p_heurestr) qui convertit un horaire p_heurestr fourni dans un format texte avec heures et minutes (ex. "12h15") en une heure en nombre flottant (ex. 12.25). Cette fonction sera utilisée sur les horaires Note : Si vous bloquez sur cette fonction, afin de pouvoir faire la suite, vous pouvez utiliser le calcul (faux) sui­

vant :

return float(p_heurestr.replace('h','.'))

hfloat2hstring(p_heurefloat) qui réalise l'opération inverse en retournant une chaîne correspondant à une heure en nombre flottant. Note : Si vous bloquez sur cette fonction, afin de pouvoir faire la suite, vous pouvez utiliser la représentation (fausse) suivante :

return str(p_heurefloat).replace('.','h')[:5]

distance_geographique(p_latOrig, p_longOrig, p_latDst, p_longDst) qui calcule et retourne la distance en Km entre deux coordonnées terrestres. Les lati­

tudes et longitudes des coordonnées fournies comme paramètres sont exprimées en degrés. Utilisez la formule donnée en introduction (les fonctions nécessaires aux calculs sont disponibles dans le module math) ; attention aux conversions lors des calculs.

stations_trajet(p_trajet) qui prend en paramètre une liste de tuples corres­

pondant à un trajet (comme trajet1 par exemple), construit et retourne la liste des stations par lesquelles passe ce trajet.

heures_trajet(p_trajet) qui prend en paramètre une liste de tuples correspon­

dant à un trajet (comme trajet1 par exemple), construit et retourne la liste des heures de passage du train pour chaque étape du trajet ; heures exprimées sous forme de nombres flottants !

distance_stations(p_station1, p_station2) qui prend en paramètre deux noms de stations, récupère les latitudes et longitudes de ces stations dans le dic­

tionnaire de données coordonnees, et retourne le calcul de la distance entre ces deux points calculée en appelant la fonction distance_geographique().

Exemples d'utilisation de ces fonctions :

>>> from calculs_m import *

(3)

IUT ORSAY Page 3 Sujet Partiel Horaires Trains Mesures physiques

>>> from parisbrest import *

>>> distance_geographique(latParis,longParis,latBrest,longBrest) 503.10865201559744

>>> hfloat2hstring(12.75) '12h45'

>>> hstring2hfloat("12h45") 12.75

>>> stations_trajet(trajet1)

['Paris-Montparnasse', 'Rennes', 'St Brieuc', 'Guingamp', 'Morlaix', 'Brest']

>>> heures_trajet(trajet1)

[7.08333333, 9.1333333, 9.95, 10.25, 10.7333333, 11.3333333]

>>> distance_stations("Paris-Montparnasse", "Brest") 503.10865201559744

3. Module principal

Nous disposons maintenant d'outils de base nous permettant de réaliser les traite­

ments sur les vitesses.

Créer un module Python vitesses.py, qui importe les fonctions et données des mo­

dules parisbrest et calculs_m.

Définir les fonctions suivantes :

vitesses_etapes(p_trajet) qui prend en paramètre une liste de tuples corres­

pondant à un trajet (comme trajet1 par exemple), construit et retourne la liste des vitesses entre les différentes étapes. Attention au niveau des boucles, pour N étapes, il y a N-1 vitesses ; à chaque itération on a besoin d'une station et de la sui­

vante.

vitesse_trajet(p_trajet) qui prend en paramètre une liste de tuples correspon­

dant à un trajet (comme trajet1 par exemple), calcule et retourne la vitesse de parcours entre le départ du trajet (première station) et l'arrivée (dernière station).

moyenne_vitesses(p_trajet) qui prend en paramètre une liste de tuples corres­

pondant à un trajet (comme trajet1 par exemple), calcule les vitesses entre les étapes et retourne la moyenne de ces vitesse.

plus_rapide(p_horaires) qui prend en paramètre un dictionnaire donnant pour chaque nom de train son trajet (comme horaires par exemple), et retourne le nom du train le plus rapide sur les trajets de p_horaires ainsi que sa vitesse.

Exemples de calculs

>>> vitesses_etapes(trajet1)

[149.2156576, 112.447896, 96.30364548, 103.178513, 88.17654354]

>>> vitesse_trajet(trajet1) 118.378506

>>> plus_rapide(horaires)

('TGV????', 1??.?????) # Volontairement brouillé

Écrire dans le programme principal du module vitesses les différentes instructions permettant de répondre aux questions suivantes (et y répondre dans le programme via des print()) :

Quel temps (heures, minutes) met le train le plus rapide ?

Sur le trajet1, la moyenne des vitesses entre les étapes est-elle la même que la vitesse moyenne départ/arrivée ?

Quels trains puis-je utiliser pour passer par la station de « Lamballe » ?

Quel est le train qui parcours le plus de stations (qui a le plus d'arrêts), combien a-t- il de stations ? Quel temps met-il pour faire le parcours complet ?

Références

Documents relatifs

Avant de devenir adulte, la grenouille se transforme : la queue du têtard se développe, puis les pattes postérieures et enfin les pattes

Liste avec allocation dynamique par enregistrement et organisati Liste avec allocation dynamique par enregistrement et organisation on chaî cha în n ée simple é e simple (ou

[r]

« Exercice d’utilisation du poste de travail et de l’explorateur » Le dernier exercice consiste à enregistrer la fiche dans différents formats : TXT, RTF et DOC (ou format

Le sujet est (en principe) trop long pour le temps imparti, il est donc conseill´e de traiter en priorit´e les questions que l’on sait faire en en indiquant clairement la r´ef´erence

Le fichier joint contient les donn´ ees permettant de tracer le spectre d’´ emission du soleil (i.e.. En utilisant la fonction indice max(liste) d´

On peut dire (aux exceptions près) que tout poisson ne présentant pas d'odeur suspecte, dont l'œil est brillant, saillant, la pupille très noire, les branchies fraîches et rosés,

Les militants anti-nucléaires de l’Eure et de Seine-maritime réunis le 27 octobre vous invitent à les rejoindre pour manifester votre opposition au passage du "train d’enfer"