Devoir libre d`informatique : colloscope

publicité
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
Téléchargement