Enseignement
Monitorat à l'École Polytechnique
Dans le cadre de mon monitorat à l'École Polytechnique, j'ai encadré les travaux pratiques des cours suivants:
- Bases de la programmation et de l'algorithmique (INF421). Ce cours s'adresse aux élèves ingénieurs en deuxième année ayant débuté l'informatique en première année. Charge: 36 heures de TP en langage Java, en 2006 et 2007.
- Principes des langages de programmation (INF321). Ce cours s'adresse aux élèves ingénieurs en première année ayant déja des connaissances en informatique. Charge: 36 heures de TP en langage Java, en 2007 et 2009.
- Introduction à la théorie des langages de programmation (INF554). Cours du Master Informatique, préparation et encadrement des travaux pratiques (16 heures de TP par an en OCaml) en 2007 et 2008. Cf. ma page d'enseignant.
- J'ai aussi encadré les deux sessions 2008 (16 heures de TP chacune) d'initiation à OCaml, destinées aux élèves du Master Informatique.
TP OCaml en MPSI
Second semestre 2005/2006, lycée Janson de Sailly.
N'hésitez pas à m'envoyer vos questions, remarques, souhaits. Je réponds à mes mails.
Premiers pas
Comprendre les types; curryfication; trouver un habitant d'un type; types variants; la représentation binaire des entiers strictement positifs, traductions et addition; le triangle de Pascal. Télécharger: Postscript | PDF | TeX.
Arbres dictionnaires
Listes associatives triées; arbres comme dictionnaires; préfixes univoques minimaux. Télécharger: Postscript | PDF | TeX | Corrigé Caml.
Programmation dynamique
Introduction à la programmation dynamique et application à la recherche de la plus longue sous-liste commune. Télécharger: Postscript | PDF | Corrigé.
Problème des Reines
Utilisation des fonctions standard du module
List; compréhension de code impératif; problème des reines. Télécharger l'énoncé et le corrigé mis à jour: Postscript | PDF | TeX | Corrigé.Labyrinthes
Génération aléatoire de labyrinthes connexes minimaux, recherche du plus court chemin. L'énoncé a été revu, de nouvelles instructions se trouvent dans le code source à télécharger. Télécharger l'énoncé: Postscript | PDF | TeX; le code des définitions et du module graphique: ML; le corrigé: corrigé.
Sudoku
Résolution "déductive" du jeu de Sudoku. Télécharger l'énoncé: Postscript | PDF | TeX; le code des définitions: ML; le corrigé: ML.
TP "libre-service"
Je réponds aux questions. On peut finir d'anciens TPs, ou travailler sur le sujet (a priori rassurant) de l'X2002.
Pour la suite...
Si vous cherchez à travailler la prog de votre côté, il y a pas mal de choses à faire. Vous pouvez finir les TPs. Les sujets de l'X (disponibles en ligne) contiennent beaucoup de questions de programmation, de difficulté progressive. Par contre, les correcteurs sont exigeants sur la rédaction des réponses. Entrainez-vous à écrire des algorithmes simples et clairs (refaire les bases encore et encore ne serait pas inutile pour la plupart) et à les prouver. Les preuves d'algorithmes simples sont souvent simples, mais il faut bien les formuler.
Si vous en avez marre de prouver des algorithmes, vous pouvez jeter un oeil à un bouquin de théorie des graphes, c'est un très bon exercice de rédaction de preuve formelle de résultats intuitifs. Autres pistes d'exercices de prog, ou même de TIPE:
- Tresses: réduction de poignées, égalité.
- Unification: implémentation de l'unification du premier ordre, théorie sur l'unification d'ordre supérieur.
- λ-calcul, le typage simple et son inférence, évaluation et substitutions explicites. Enormément de pistes pour aller plus loin: types dépendants et logique, isomorphisme preuve-programme (Curry-Howard)...
- Programmation logique, implémentation d'un Prolog pur, voir la théorie de λ-Prolog pour aller plus loin, ou la programmation par contraintes...
- Grammaires: langages rationnels et automates finis (programme de spé), automates LALR (yacc), algorithme de Earley.
- Simulations: jeu de la vie, fourmis, etc.
Pas de lien sur tous ces sujets, mais vous devriez pouvoir vous renseigner un minimum sur Internet pour la plupart. A la demande, je peux approfondir un point.
