-
Nicolas M. Thiéry authoredNicolas M. Thiéry authored
Module WIMS: Compréhension de programmes C++
Présentation
Ce module présente à l'étudiant des programmes qu'il doit lire et comprendre, afin de deviner quelle en sera la sortie, ou bien l'entrée appropriée pour obtenir 42. Les programmes sont tirés aléatoirement d'une collection de programmes groupés par thèmes. Pour rajouter un nouveau programme il suffit de l'ajouter dans le répertoire idoine. Voir ci-dessous.
Pour l'instant, la collection est constituée d'exercices de C++, donnés dans le cadre des cours d'introduction à l'informatique Info 111 et Info 121 de la licence MPI de l'Université Paris Sud, mais l'infrastructure est conçue pour être étendue à d'autres thèmes et généralisable à d'autres langages de programmation.
- Ce module est développé collaborativement sur:
- https://gitlri.lri.fr/nthiery/wims-info/tree/master/test~coding~readingCppPrograms.fr
Étendre le module avec de nouveaux programmes
Le répertoire data/ contient des programmes C++, qui peuvent être de deux types.
Pour les programmes du premier type, l'utilisateur doit deviner la sortie du programme.
Ces programmes sont nommés sous la forme <theme>_<nom>.cpp
.
Les programme du decuième type doivent lire un entier entre
0 et 99 sur l'entrée standard, et l'utilisateur doit deviner lequel
donne 42; pour l'instant cet entier doit être unique.
Ces programmes sont nommés <theme>_<nom>_input.cpp
Pour les deux types de programme, le thème peut être constitué d'un thème principal et de sous-thèmes, séparés par des _
(p. ex. loop_for
, loop_while
).
Les noms de fichiers ne doivent contenir que des caractères alphanumériques et le caractère _
.
En vue d'obtenir un peu de variabilité les programmes sont transformés avant affichage et compilation, de la manière suivante:
- Remplacement de I1, I2, I3, I4 par i,j,k,n respectivement (ou une permutation de ces derniers);
- Remplacement de D1, D2, D3 par x,y,z respectivement (ou une permutation de ces derniers);
- Remplacement de F1 par f.
Ces remplacements sont fait de manière purement textuelle. Ainsi, «AI1» sera remplacé par, par exemple, «Ai».
Dans la version actuelle, le remplacement est fait statiquement avant le chargement du module dans WIMS (éditer la première ligne du Makefile pour changer/compléter la liste des remplacements). À terme ce remplacement sera fait dynamiquement par WIMS, avec une permutation différente à chaque exécution de l'exercice.
L'infrastructure du module est implantée dans ./src/cpp/read_program.cpp.
Warning
Dans l'état actuel de l'exercice, l'utilisateur ne peut pas rentrer de réponse vide. Il faut donc que tous les programmes du premier type affiche au moins un caractère. Éviter les caractères unicode compliqués aussi :-)
Création automatique des exercices de type OEF
L'entête du fichier src/cpp/read_program.cpp permet de définir les exercices de type OEF qui vont être construits automatiquement par WIMS lors de l'import du module (voir section suivante).
L'entête doit être de la forme target=<cible1> <cible2> <cible3> ...
.
WIMS crée un exercice OEF par cible sous la forme d'un fichier src/<cible>.oef.
Lors de chaque exécution de l'exercice OEF <cible>.oef, un programme est choisi aléatoirement parmi tous les programmes de data/static dont le nom commence par <cible>
.
Il est ainsi possible de définir un exercice OEF prenant en compte tous les programmes ayant un certain thème, ou un certain thème et sous-thème, ou simplement un seul exercice (dans ce dernier cas, la cible doit être le nom du programme complet, sans l'extension .cpp
).
Pour chaque cible, le fichier src/cpp/read_program.cpp doit contenir les définitions suivantes:
#if defined TARGET_<cible>
#define TARGET <cible>
#define TARGET_FR <Titre de l'exercice>
#endif
Importer ou mettre à jour le module sur WIMS
Lancer make archive dans ce répertoire. Cela créé une archive:
/tmp/modtool-test~coding~readingCppPrograms.fr.tgz
Charger l'archive dans son compte modtools sur WIMS avec:
wims.u-psud.fr -> serveur de l'université -> Accueil WIMS -> modtools -> login -> Restauration
Documentation générique des modules WIMS
Pour installer des exercices OEF dans un module :
- Créer un module de type OEF
- Pour chaque exercice, créer dans le module un nouveau fichier d'extension oef dans le répertoire src/ (exemple : src/euclide.oef). Une zone de texte apparaît ; y écrire (ou coller) le texte source de l'exercice. Enregistrer les changements.
- Tester le module.
- Modifier à son goût intro.phtml et endhook.phtml,
- et tester à nouveau.
%%%%%% Pour utiliser directement le module sur un serveur WIMS local,
1- Mettre le template à la bonne place, en changeant le nom.
- Modifier intro.phtml
- Modifier le fichier INDEX.
- Installer les fichiers sources.
- Exécuter le script $wims_home/other/bin/src2def. (Cette étape doit être répétée à chaque fois que les fichiers sources sont modifiés).