Devoir libre d’informatique : colloscope On rendra les algorithmes sur papier. Les programmes python seront envoyés par courrier électronique. Ils devront être clairs, correctement commentés, et suivis d’exemples pour bien montrer qu’ils fonctionnent. Les deux dernières questions sont plus libres : vous serez amenés à choisir vous-même la démarche, en particulier vous devrez décider quels algorithmes écrire. De manière générale, on conseille de préférer plusieurs petits algorithmes simples plutôt qu’un gros. On trouvera les deux fichiers "colloscope801.txt" contenant le calendrier des séances d’oral de la classe, et "lecture.py", contenant le script python pour charger ce colloscope dans python, sur prepaBarthou ou sur le site internet du professeur. Téléchargez ces deux fichiers et procédez ainsi : — Ouvrez le script dans un éditeur comme IEP. — A la première ligne, dans adresseDuFichier, indiquez l’adresse où vous avez placé le fichier colloscope801.txt. Rappel : si vous êtes sous windows, pour éviter les problèmes de caractères spéciaux, il faudra mettre des doubles contre-obliques ("\\") pour indiquer les répertoires. — Exécutez le script. Les tableaux collesMath, collesPhysique, collesAnglais ,infosMath, infosPhysique et infosAnglais sont alors chargés en mémoire, vous pourrez les utiliser pour répondre aux questions cidessous. Remarque: Ces tableaux seront des variables dites "globales", ce qui signifie qu’elles seront accessibles à l’intérieur de n’importe quel programme. Veillez à ne pas les modifier accidentellement. Le tableau collesMath fonctionne ainsi : pour tout (i, j) ∈ ~1, 162 , la case (i, j) du colloscope de math se trouve dans collesMath[i-1][j-1]. Il s’agit donc du numéro de trinôme qui aura la i◦ colle lors de la j◦ semaine. (i représente le numéro de ligne, et j le numéro de colonne.) Les tableaux collesPhysique et collesAnglais sont similaires. Le tableau infosMath contient les informations sur les différentes colles : pour tout i ∈ ~1, 16, infoMath[i-1] contient les informations de la i◦ colle, sous cette forme : [ "nom de l’examinateur", "jour", "heure", "salle"]. Par exemple infosMath[i-1][0] renverra le nom de l’examinateur pour la i◦ colle. 1. Écrire un algorithme quelleColleDeMathCetteSemaine prenant en entrée deux entiers s et g et renvoyant le numéro (i.e. le numéro de la ligne correspondante dans le colloscope) de la colle de math qu’aura le groupe g la semaine s. 2. Écrire un algorithme quelleColleDePhysiqueCetteSemaine prenant en entrée deux entiers s et g et renvoyant le numéro de la colle de physique qu’aura le groupe g la semaine s. Si ce groupe n’a pas physique cette semaine, renvoyer -1. On pourra utiliser à la question suivante l’algorithme analogue quelleColleDAnglaisCetteSemaine, mais on ne demande pas de l’écrire sur la copie. 3. Finalement, écrire un algorithme quellesCollesCetteSemaine prenant en entrée deux entiers s et g et affichant les deux colles qu’aura le groupe g la semaine s. On affichera les informations de ces deux colles, en particulier matière, heure, lieu. Remarque: Les salles de physique n’étant pas présentes dans le colloscope, il y aura des blancs. 4. bonus : prendre en compte l’espagnol : un groupe qui n’apparaît ni en physique, ni en anglais a espagnol le mardi à 17h. 5. Écrire un algorithme prioriteALaCantine qui ne prend aucun argument et qui calcule pour chaque semaine la liste des groupes qui ont une colle à 13h. Le tableau renvoyé se présentera sous cette forme : [ [listes des groupes semaine 1], [liste des groupes semaine 2], ... ... , [liste des groupes semaine 16] ]. 6. Y a-t-il des groupes qui ne voient pas tous les examinateurs ? Si oui lesquels ? 7. Vérifier que vous n’aurez jamais deux colles en même temps. 1 Remarques et erreurs fréquentes — à l’écrit, marquer l’indentation par des traits verticaux. Sinon, il y a gros risque qu’elle soit mal comprise par le correcteur. — Dès que votre algorithme n’est pas évident, il faut l’expliquer. Si l’examinateur met plus d’une minute à le comprendre, il risque de le trouver inutilement compliqué et de retirer des points. — Un petit point sur les variables globales : Une variable qui a été définie hors de tout programme est alors globale, elle sera accessible par n’importe quel programme. Au contraire, une variable définie à l’intérieur d’un programme P est dite "locale à P", et ne sera accessible que par P. Dans ce devoir, les variables collesDeMaths, in f osMath, etc... étaient globales. Mais il y a aussi les programmes que vous avez écrit vous-même ! Et de fait, vous les utilisez dans d’autres programmes. Point de vue rédaction, ne pas déclarer les variables globales dans vos algorithmes. — Pour renvoyer un résultat, il y a deux optiques : 1. pour un être humain : on affiche alors beaucoup de texte explicatif 2. pour être traité par un autre programme : on ne mets que les données utiles, par exemple dans une liste si il y en a beaucoup — — — — — A priori, on se place le plus souvent dans le second point de vue. Surtout lorsque l’énoncé indique clairement "renvoyer" et pas "afficher". Quand on demande de renvoyer, il faut renvoyer et pas afficher. C’est indispensable si vous voulez utiliser le résultat d’un algo dans un algo suivant. Ce sera indispensable également en option info. Un renvoie au milieu d’une boucle est autorisé dans python mais pas dans d’autres langages... à éviter donc. De même (encore plus !) pour modifier une donnée d’entrée. Si vous n’utiliser ni indentation, ni "fin si" / "fin pour" / "fin tant que", on ne peut pas comprendre ce qui est dans la boucle et ce qui est en dehors ! Essayer d’écrire des algorithme simples et généraux : qui marcheraient pour n’importe quel colloscope, pas seulement celui de cette année. Avec une boucle "tant que", il est plus prudent de faire attention que le programme ne plante pas en cas d’erreur dans le colloscope (si un groupe n’a pas de colle de math typiquement) 2