Première partie, techniques de la programmation impérative (en C) (4 semaines) 1. Cours Objectifs de l'apprentissage de programmation - Maintenabilité, Lisibilité (communication avec d'autres programmeurs) Indentation - Généralité (pas de limitation arbitraires), Réutilisabilité Différences entre C et Java: - Généralisation de l'expression séquentielle - Restrictions sur la position des déclarations - Notion de pointeur - Équivalence pointeur/tableau - Chaînes de caractères - Choix de manipulation de valeurs ou de références en particulier pour le passage de paramètres - Absence de classes, héritage, méthodes, paquetages interfaces. - Gestion manuelle de la mémoire avec malloc() et free() - Notion d'exécutable et de programme principal - Notion de module et unité de compilation - Struct - Fonctions TD - Le contenu du cours - GCC, options -W -Wall -c -g -o -O - Make élémentaire - GDB - Emacs C-mode, M-x compile, next-error, indentation, etc 2. Cours Techniques élémentaires de programmation - Dictionnaires tableau non trié, tableau trié, liste non triée, liste triée, tableau d'hachage, arbre binaire insertion, suppression, recherche, utilisation de pointeurs sur champs pour la liste, renversement de la liste - Recursivité cas de base en premier TD - Lecture de code simple de gestion de dictionnaires - Écriture de code simple - Compilation, débuggage, exécution depuis GDB avec programme principal vide - Pas de programmes interactifs 3. Cours Modularité et Généricité - Portée des identificateurs - Utilisation de static - Séparation .h .c - Notion de module client - Généricité avec void * - Préprocesseur, inclusion - Utilisation d'en-têtes d'objet - Sémantique par référence uniforme TD - Lecture de code d'une module générique (par exemple, pile ou file) - Écriture d'un module générique (l'autre) 4. Cours Techniques avancées - Utilisation du ramasse-miettes de Boehm - Traitement d'erreurs, setjmp/longjump, bibliothèque d'exceptions TD - Écriture d'un programme avec le RM de Boehm - Écriture d'un programme avec exceptions Deuxième partie, techniques de la programmation fonctionnelle et symbolique (en Common Lisp) (8 semaines) 1. Survol du langage Introduction à la programmation fonctionnelle et symbolique Objectifs 2. Techniques de base Récursivité, listes, cons, car, cdr, représentation des listes, partage