IUT ORSAY Page 1 2014-2015
Mesures physiques Semestre S1
Partiel d'Informatique Scientifique Multiples / Datation
Tout document papier ou électronique local autorisé (s'ils sont sur votre clé USB, vous devez 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.
Vous devez créer un répertoire de partiel S1B2_Nom_Prenom1 sur le “bureau” de l'ordina- teur, il devra contenir les fichiers modules Python que vous écrirez. Les modules devront compor- ter les en-têtes habituels, le code devra être documenté/commenté pertinemment2 et testé (valeurs directement dans le code de test, pas de input !!! , si besoin utilisez des boucles pour tester plusieurs valeurs intéressantes), les résultats d'exécution des tests doivent être copiés/collés dans une chaîne
"""…triple quote…""" à la fin des modules.
Lorsque vous avez terminé ou que le temps imparti est fini, vous devez recopier ce répertoire
S1B2_Nom_Prenom dans le répertoire srva018/FichiersEtudiants/ et attendre que l'ensei- gnant vous confirme qu'il a bien été recopié !!!
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 et de leur affichage recopié à la fin des modules Python.
Si vous n’arrivez pas à coder l’algorithme d’une fonction, essayez de faire qu’elle simule au moins un fonctionnement (retour d'une valeur de bon type mais bidon), et passez à la suite. Si une ligne vous pose définitivement un problème, laissez-la en commentaire afin de pouvoir poursuivre sur le reste du partiel en pouvant exécuter le script.
Lorsque vous avez besoin d'un service déjà rendu par une fonction, vous êtes censé appeler cette fonction et utiliser le résultat retourné – et pas dupliquer son code.
Note !!!L Les exercices 1 et 2 sont complètement indépendants.
1. Multiples
Nous allons vérifier les caractéristiques permettant d'identifier les multiples de 2, 3, 5, 9, 10 en base 10 (vues en CM2…).
• Pour 2 !!!L nombres se terminant par 0, 2, 4, 6, 8.
• Pour 3 !!!L nombres dont la somme des chiffres est un multiple de 3 (typiquement 3, 6, 9 pour les nombres à un chiffre).
• Pour 5 !!!L nombres se terminant par 0, 5.
• Pour 9 !!!L nombres dont la somme des chiffres est un multiple de 9.
• Pour 10 !!!L nombres se terminant par 0
Note !!!L pour l'accès aux chiffres d'un nombre, vous l'avez déjà fait en TD avec // et % — il est aussi possible de passer par une représentation sous forme de chaîne de caractères pour accéder aux caractères représentant les chiffres (ne pas oublier de reconvertir ensuite les caractères en entier lorsque besoin).
Créez un module Python multiples.py dans votre répertoire de partiel.
Dans ce module, définissez les fonctions suivantes !!!L
• fonction somme_chiffres(p_n) qui prend en paramètre un nombre entier p_n et retourne un nombre entier résultat de la somme des valeurs des chiffres de p_n.
• Fonction multiple_2(p_n) qui prend en paramètre un nombre entier p_n et retourne un booléen True ou False suivant si le nombre est pair (multiple de 2) ou impair (pas mul- tiple de 2) en utilisant la caractéristique ci-dessus.
1 En utilisant votre nom et votre prénom bien sûr !!!&
2 Documentation pour l'utilisateur, commentaires pour le développeur là où il y a quelque chose de spécial ou difficile à comprendre dans le code — pas de commentaire pour des opérations triviales.
IUT ORSAY Page 2 2014-2015
Mesures physiques Semestre S1
• Fonction multiple_3(p_n) qui prend en paramètre un nombre entier et retourne un boo- léen True ou False suivant si le nombre est multiple de 3 ou pas, en utilisant la caractéris- tique ci-dessus. Cette fonction utilisera bien sûr somme_chiffres(), éventuellement plu- sieurs fois pour les grands nombres.
• Fonction multiple_5(p_n) qui prend en paramètre un nombre entier et retourne un boo- léen True ou False suivant si le nombre est multiple de 5 ou pas, en utilisant la caractéris- tique ci-dessus.
• Fonction multiple_9(p_n) qui prend en paramètre un nombre entier et retourne un boo- léen True ou False suivant si le nombre est multiple de 9 ou pas, en utilisant la caractéris- tique ci-dessus. Cette fonction utilisera bien sûr somme_chiffres(), éventuellement plu- sieurs fois pour les grands nombres.
• Fonction multiple_10(p_n) qui prend en paramètre un nombre entier et retourne un booléen True ou False suivant si le nombre est multiple de 10 ou pas, en utilisant la caractéristique ci-dessus.
• Fonction verification(p_nmax) qui prend comme paramètres une valeur maximale
p_nmax, et va vérifier, pour les entiers de 1 à p_nmax compris, lorsqu'ils sont divisibles res- pectivement par 2, 3, 5, 9 ou 10 (le reste de leur division entière est nul), si les caractéris- tiques correspondantes se vérifient. La fonction devra afficher les nombres pour lesquels une caractéristique n'est pas vérifiée alors qu'elle le devrait, et « Tout Ok » si les caracté- ristiques ont été vérifiées pour tous les nombres. La fonction ne retourne rien.
Placez le code de test de ces fonctions, basé sur des cas simples (donc vérifiables de tête) à la fin du module dans un bloc if __name__ == '__main__':. Terminez ce code de test par un appel à
verification(1000).
2. Calculs de dates
Nous allons construire quelques fonctions permettant de travailler sur les dates. Pour simplifier (calendrier grégorien), les mois ont 28 à 31 jours !!!L
Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre
31 28/29 31 30 31 30 31 31 30 31 30 31
Pour février, il y a 29 jour les années bissextiles, et 28 jours les autres années. Les années bissex - tiles comportent donc 366 jours, les autres 365. Sont bissextiles les années !!!L
• soit divisibles par 4 mais non divisibles par 100 !!!M
• soit divisibles par 400.
Note !!!L on suppose pour la suite que les dates données seront toujours des dates valides M il n'est donc pas nécessaire de contrôler la validité des dates.
Créez un module Python datation.py dans votre répertoire de partiel.
Dans ce module, définissez les fonctions suivantes !!!L
• Optionnel !!!L Fonction dateitems(p_date) qui prend en paramètre une chaîne de carac- tères représentant une date (exemple !!!L "23/5/1976") et retourne une liste de trois entiers correspondant au jour, mois et année de cette date (exemple !!!L [23,5,1976]).
• Fonction bissextile(p_an) qui prend en paramètre un nombre entier correspondant à une année et retourne un booléen True ou False suivant si l'année est bissextile ou ne l'est pas. Pensez à tester cette fonction pour les différents cas énoncés.
• Fonction nbjours(p_d), qui prend en paramètre une liste de trois entiers correspondant au jour, mois, et année d'une date !!!M et qui retourne le nombre de jours entre le premier jour de l'année de la date (1er janvier) jusqu'au jour de la date indiquée (inclus3). Pensez à tester plusieurs mois, et par exemple une même date dans l'année avec des années bissextiles ou non.
3 Inclus ⇒ nbjours(1,1,19899) retourne 1 — c'est équivalent au n° du jour dans l'année
IUT ORSAY Page 3 2014-2015
Mesures physiques Semestre S1
• Fonction ecartjours(p_d1, p_d2), qui prend en paramètre deux listes de trois entiers correspondant aux jours, mois, année de deux dates, et retourne le nombre de jours d'écart entre ces deux dates (deux dates consécutives ont un écart jours de 1). Ces deux dates peuvent se trouver dans la même année, ou bien avoir plusieurs années d'écart. On consi- dérera que la date p_d2 donnée est postérieure ou égale à p_d1 (pas besoin de le vérifier).
Placez le code de test de ces fonctions, à la fin du module dans un bloc if __name__ ==
'__main__':. Dans les tests, indiquez en commentaires pourquoi vous choisissez les dates tes- tées.