Licence Sciences 2ème Année
Filière -- Mathématiques, Informatique et Applications aux Sciences 2005 - 2006
Programmation avancée
1er semestre 2005
Projet 1 -- Exploitation d'une file pour écrire un Nibbler
Auteurs Chan Ung et Florent Hivert Deadline : Lundi 17 Octobre 2005 à 19 heures 30 Septembre 2005 et 06 Octobre 2005
Exploitation d'une file pour écrire un Nibbler

Dans ce TD, on souhaite réaliser un programme de poursuite d'un ver s'allongeant au fur et à mesure qu'il consomme des proies. Au lancement du programme un quadrillage régulier est affiché et les proies, représentées sous forme de carrés pleins dans le damier, sont disséminées aléatoirement dans l'espace de jeu. Le ver est représenté par une tête (un disque noir) et une suite d'anneaux représentés par des cercles. Au lancement du jeu, le ver est sans anneau.
Pour jouer, l'utilisateur va « piloter » le ver en pointant avec la souris dans une case voisine de la tête (4-connexité). Le déplacement est simulé en déplaçant la tête dans la case pointée et en effaçant le dernier anneau de la queue. Lorsque la tête arrive sur une case contenant une proie, celle-ci est consommée et un anneau supplémentaire est ajouté à l'extrémité de la queue.

Afin de prendre de bonnes habitudes l'ensemble des fonctions programmées devront être commentées (par exemple avec Doxygen) et testées. Nous rappelons aussi que les options appliquées lors de la compilation seront -Wall et -ansi et qu'il est très fortement déconseillé d'utiliser dans votre code des variables globales.
De plus il est conseillé de respecter une convention de présentation du code unique (pour exemple, la convention du langage C ou la convention du langage Java).

Quelques informations sur l'utilisation et l'installation de la librairie graphique libMlv 1.1 de l'université de Marne-la-Vallée.

Projet 2 -- Structure de pile pour l'évaluation d'expressions en notation polonaise inversée
Auteurs Chan Ung et Florent Hivert Deadline : Lundi 24 Octobre 2005 à 19 heures 13 Octobre 2005
Structure de pile pour l'évaluation d'expressions en notation polonaise inversée

Dans ce TD, on souhaite évaluer des expressions données en notation polonaise inversée ou postfixe. Pour réaliser cette évaluation, on utilisera une nouvelle structure de donnée : la pile, dont nous implanterons les fonctions de manipulation de base. Nous verrons ensuite comment utiliser cette structure de donnée afin d'évaluer des expressions données en notation polonaise inversée ou postfixe et nous réaliserons une calculatrice qui prendra exemple sur la commande dc. Une fonction d'analyse syntaxique sera implantée permettant de découper l'expression saisie par l'utilisateur et qui utilisera la fonction strtod à la place de la fonction atof. Cette dernière ne gérant pas les erreurs.

Afin de prendre de bonnes habitudes l'ensemble des fonctions programmées devront être commentées (par exemple avec Doxygen) et testées. Nous rappelons aussi que les options appliquées lors de la compilation seront -Wall et -ansi et qu'il est très fortement déconseillé d'utiliser dans votre code des variables globales.
De plus il est conseillé de respecter une convention de présentation du code unique (pour exemple, la convention du langage C ou la convention du langage Java).

Projet 3 -- Ecriture bits-à-bits
Auteurs Florent Hivert et Marc Zipstein Deadline : Jeudi 03 Novembre 2005 à 19 heures 27 Octobre 2005 et 04 Novembre 2005
Ecriture bits-à-bits

Dans les algorithmes de compressions de données, on a souvent besoin de stocker des nombres dans un fichier. Nous allons implémenter deux méthodes pour le faire, le but étant de prendre le moins de place possible sur le disque. La première va écrire sur un nombre variable d'octets, tandis que la seconde va écrire sur un nombre variable de bits. Nous verrons la notion de fichier « bufferisé » que nous implanterons et utiliserons pour l'écriture et la lecture de nos données compressées précédemment.

Nous verrons aussi l'utilisation de la commande ar permettant de créer des librairies.

Afin de prendre de bonnes habitudes l'ensemble des fonctions programmées devront être commentées (par exemple avec Doxygen) et testées. Nous rappelons aussi que les options appliquées lors de la compilation seront -Wall et -ansi et qu'il est très fortement déconseillé d'utiliser dans votre code des variables globales.
De plus il est conseillé de respecter une convention de présentation du code unique (pour exemple, la convention du langage C ou la convention du langage Java).

Projet 4 -- Compression par déplacement en tête de liste
Auteurs Florent Hivert et Marc Zipstein Deadline : Vendredi 23 Décembre à 19 heures 10, 24, 25 Novembre 2005 et 02 Décembre 2005
Compression par déplacement en tête de liste

Nous décrivons et implantons dans ce TD une méthode de compression de données (adaptée aux textes) qui va utiliser une liste chaînée de mots. La position d'un mot dans la liste est un entier strictement positif (la position du mot en tête de liste est donc 1). Lors de la compression d'un texte, on va coder un mot déjà présent dans la liste par sa position courante puis on le déplace en tête de la liste. Si le mot n'est pas présent dans la liste, on le code par l'entier 0 suivi du mot en clair dans le fichier et on l'ajoute à la fin de la liste. Il est évident que pour l'écriture des entiers dans le fichier, on utilisera les deux méthodes d'écriture bit à bit vues et implantées dans le TD précédent.

Afin de prendre de bonnes habitudes l'ensemble des fonctions programmées devront être commentées (par exemple avec Doxygen) et testées. Nous rappelons aussi que les options appliquées lors de la compilation seront -Wall et -ansi et qu'il est très fortement déconseillé d'utiliser dans votre code des variables globales.
De plus il est conseillé de respecter une convention de présentation du code unique (pour exemple, la convention du langage C ou la convention du langage Java).

Exemples de corpus.
Exemple d'utilisation de la fonction getopt.

Projet 5 -- Arbres syntaxiques
Auteurs Florent Hivert et Marc Zipstein Deadline : Jeudi 15 Décembre 2005 à 19 heures 08 Décembre 2005
Arbres syntaxiques

Dans ce TD, on souhaite représenter les expressions arithmétiques à l'aide d'arbres syntaxiques. Ainsi, étant donné une expression arithmétique en notation polonaise inverse ou postfixe, nous souhaitons écrire cette expression en notation habituelle ou infixe, il faudra faire attention au parenthésage (règle de priorité des opérateurs). Dans un premier temps et par souci de simplification, on se limitera seulement aux expressions utilisant l'opérateur d'addition et de multiplication.
Le programme permettant de répondre à cette problèmatique fonctionnera en deux temps. La première étape sera la saisie d'une chaîne de caractères et la création de l'arbre syntaxique à partir de celle-ci. Puis, on affichera la formule en infixe à partir de l'arbre syntaxique construit précédemment (parcours dans l'arbre). Pour l'étape de création de l'arbre, on réutilisera la structure de données pile implantée pour le programme de calculette en notation polonaise inverse.

Afin de prendre de bonnes habitudes l'ensemble des fonctions programmées devront être commentées (par exemple avec Doxygen) et testées. Nous rappelons aussi que les options appliquées lors de la compilation seront -Wall et -ansi et qu'il est très fortement déconseillé d'utiliser dans votre code des variables globales.
De plus il est conseillé de respecter une convention de présentation du code unique (pour exemple, la convention du langage C ou la convention du langage Java).

Projet 6 -- Expressions logiques
Auteur Florent Hivert Deadline : Vendredi 23 Décembre à 19 heures 12 Décembre 2005
Expressions logiques

Nous allons manipuler dans ce TD les expressions logiques et plus précisemment nous allons écrire une fonction permettant de déterminer les sous-formules d'une expression logique sans faire l'analyse de l'expression. De même que pour les expressions arithmétiques, il existe plusieurs manières de noter une expression logique (notation infixe, suffixe et préfixe). Nous n'utiliserons pour notre part que la notation polonaise ou préfixe pour nos expressions logiques. Afin de simplifier le programme, nous considérons qu'une expression logique sera stockée dans une chaîne de caractères d'au plus STRING_MAX caractères.

Afin de prendre de bonnes habitudes l'ensemble des fonctions programmées devront être commentées (par exemple avec Doxygen) et testées. Nous rappelons aussi que les options appliquées lors de la compilation seront -Wall et -ansi et qu'il est très fortement déconseillé d'utiliser dans votre code des variables globales.
De plus il est conseillé de respecter une convention de présentation du code unique (pour exemple, la convention du langage C ou la convention du langage Java).

Projet 7 -- Soutenance des projets
06 Janvier 2005
Soutenance des projets