IUT ORSAY Page 1 2016-2017
Mesures physiques Semestre S1
Partiel d’Informatique Scientifique
Calculs, Graphiques, Fichiers
Durée: 1h50 Tout document papier ou électronique local autorisé (s’ils sont sur votre clé USB, vousdevez les copier en début de séance puis retirer votre clé pour la suite du partiel).
Documents (cours, poly TP, docs…) disponibles sur la machine de TP.
1. Directives
• Créez votre répertoire de partiel S1A1_Nom_Prenom1 sur le “bureau” de l'ordinateur, il devra contenir les fchiers modules Python que vous écrirez.
Lorsque vous avez terminé ou que le temps imparti (1h50) est fni, vous devez vous assurer que tous les fichiers à rendre sont dans votre répertoire de partiel S1A1_Nom_Prenom (quitez Pyzo pour vous assurer que tout est enregistré), recopier votre répertoire de partiel dans le répertoire srv-
a018/depot_etudiants/ et atendre que l’enseignant vous confrme qu’il a bien été recopié !
• Respectez les consignes (donc les lire), ne pas faire plus que ice qui est demandé.
• Commentaires si nécessaires (code compliqué, problèmes rencontrés…).
• En-têtes habituels pour les modules Python.
• Code de test pour les fonctions, après toutes les défnitions de fonctions. Aucun input() dans les tests, utilisez des valeurs directement dans le code de test - éventuellement une boucle pour tester plusieurs jeux de valeurs.
• Recopie des résultats des tests à la fn des modules Python dans une chaîne
"""…triple guillemets…""".
Les tests réalisés, les situations qu’ils couvrent pour trouver les bugs, la simplicité des cas choi- sis pour vérifer manuellement le bon fonctionnement… seront importants pour la note.
• Si vous n’arrivez pas à coder l’algorithme d’une fonction ⇒ faites qu’elle simule un fonc- tionnement (retour d’une valeur de bon type mais bidon…) et passez à la suite.
• Si une ligne pose défnitivement un problème ⇒ laissez-la en icommentaire (+ un commen- taire expliquant ce que vous vouliez faire et vos éventuels problèmes + simulez son fonc- tionnement si c'est possible) et poursuivez sur le reste du partiel.
• Lorsqu'une fonction rend un service dont vous avez besoin, appelez-la, ne dupliquez pas son code ; si cete fonction est dans un autre module, importez-la.
2. Module de calculs
Créez un module Python nommé calculs.py dans votre répertoire de partiel.
Dans ce module, défnissez les fonctions suivantes (testez chaque fonction avant de passer à la sui- vante).
Fonction calculrho
Écrivez une fonction calculrho(theta) qui prend en paramètre un nombre fotant représen- tant un angle θ exprimé en radians et retourne la valeur calculée |tan(θ)|
|
cos(θ)sin(θ)|
.1 En utilisant votre nom et votre prénom bien sûr !
IUT ORSAY Page 2 2016-2017
Mesures physiques Semestre S1
Pour le cas spécial θ ayant une valeur 0+nπ, où cete fonction n'est pas défnie (car sin(θ) s'an- nule), on retournera la valeur 0 — on peut utiliser l'interception de l'exception
ZeroDivisionError ou bien faire un test sur la valeur de θ.
Note : Les fonctions tan(), sin() et cos() sont défnies dans le module math, elles prennent en paramètre un angle en radians, la constante pi avec la valeur de π est aussi défnie dans ce module. La fonction valeur absolue abs() est une fonction standard Python.
Fonction range_float
Écrivez une fonction range_float(debut, fin, pas) qui prend en paramètre trois nombres fotants, crée et retourne une liste de nombres fotants2 entre debut compris et fin non compris, séparés par un intervalle pas entre deux valeurs consécutives. Pour simplifer, on considère que
fin> debut et que pas>0 (ne pas le vérifer dans la fonction - s'en assurer sur les cas testés). La solution algorithmique simple utilise une boucle tant que pour remplir une liste.
L'appel print(range_float(1,1.5,0.2)) doit afcher : [1.0, 1.2, 1.4]
L'appel print(range_float(0, 3, 1)) doit afcher : [0.0, 1.0, 2.0]
Fonction theta_rho
Écrivez une fonction theta_rho(thetaInit, thetaFin, thetaPas) qui prend en paramètre trois fotants et retourne simultanément deux listes.
Une première liste theta contenant les valeurs fotantes de thetaInit compris à thetaFin non compris avec un pas de thetaPas.
Une seconde liste rho correspondant au calculrho(x) pour chacune des valeurs x de theta. L'appel print(theta_rho(0,pi+0.1,pi/2)) doit afcher :
([0.0, 1.5707963267948966, 3.141592653589793], [0, 1.0000000000000022, 0.0])
Rappel, pour retourner directement deux valeurs : return(v1,v2)
Et pour récupérer deux valeurs retournées par une fonction dans deux variables : x,y=fct(…). Fonction ecretage
Écrivez une fonction ecretage(theta, rho, maxrho), qui prend en paramètre deux listes de fotants et un nombre fotant, et qui retourne deux listes de fotants, thetaprime et rhoprime correspondant à des icopies de theta et rho dans lesquelles les valeurs d'index i où rho[i] est strictement supérieur à maxrho sont absentes.
L'appel print(ecretage([1,2,3,4,5],[2,5.9,4,8.2,0.2],5.0)) doit afcher :
([1, 3, 5], [2, 4, 0.2])
Fonction minimaxi
Écrivez une fonction minimaxi(theta,rho), qui prend en paramètre deux listes de fotants et qui retourne les angles de theta correspondant aux valeurs mini et maxi dans rho.
L'appel print(minimaxi([1,2,3,4,5],[2,5.9,4,8.2,0.2])) doit afcher : (5, 4)
3. Module de graphique
Créez un module Python nommé graphiques.py dans votre répertoire de partiel.
À l'aide de fonction(s) du module calculs, calculez :
• une liste angles de valeurs fotantes de 0 compris à 2π non compris avec un pas de 0.1.
• une liste longueurs correspondant au calculrho(x) pour chacune des valeurs d'angle.
Utilisez ensuite le code ci-dessous pour tracer la courbe correspondante et la sauvegarder dans un fchier image.
2 Pour rappel, la fonction générateur range() ne travaille qu'avec des nombres entiers.
IUT ORSAY Page 3 2016-2017
Mesures physiques Semestre S1
import matplotlib.pyplot as plt
ax=plt.subplot(111,projection='polar')
ax.plot(angles,longueurs,color='r',linewidth=3) ax.set_rmax(2.0)
ax.grid(True)
ax.set_title("Courbe de Dwight Boddorf",va='bottom') plt.show()
plt.savefig("figure.png")
4. Module fichiers
Créez un module Python nommé fichiers.py dans votre répertoire de partiel.
Fonction sauvegarde
Écrivez une fonction sauvegarde(theta,rho,nomfichier), qui prend en paramètre deux listes de fotants et une chaîne de caractères représentant un nom de fchier, et qui sauvegarde dans un fchier sur le disque, sous forme de texte, le contenu de ces deux listes à raison d'un couple de valeurs de theta et rho par ligne séparés par un espace.
Fonction lecture
Écrivez une fonction lecture(nomfichier), qui prend en paramètre une chaîne de caractères représentant un nom de fchier, lis dans ce fchier les lignes de couples de valeurs theta et rho séparés par un espace, et retourne deux listes contenant les valeurs de theta dans la première et les valeurs de rho dans la seconde (fonction réciproque de la sauvegarde).
Programme principal
Ajoutez un code de test avec l'écriture puis la relecture de deux listes simples de 3 valeurs pour pouvoir vérifer vos fonctions - générez un fchier nommé "test_sauvegarde.txt".
À l'aide de la fonction theta_rho() déjà écrite, créez deux listes que vous sauvegardez et relisez de la même façon - générez un fchier nommé "dwight_boddorf.txt".