Licence Sciences 2ème Année
Filière -- Mathématiques, Informatique et Applications aux Sciences 2004 - 2005
Algorithmique avec le langage C
1er semestre 2004
TP 1 -- Quelques rappels sur le langage C
04 Octobre 2004
Quelques rappels sur le langage C

Tout d'abord, lisez entièrement la charte des TPs.

Durant cette première séance de travaux pratiques, nous faisons le rappel des concepts de base du langage C (tests, boucles, tableaux, fonctions, ...). Nous verrons aussi un concept très important à appréhender qui est la différence entre le passage par valeur et par adresse des arguments d'une fonction.

Afin de prendre de bonnes habitudes (en vue notamment du projet), l'ensemble des fonctions programmées devront être commentées 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).

Questions supplémentaires à l'exercice 1 :

Est-il possible en utilisant un opérateur logique d'échanger les valeurs de deux variables ? Si oui lequel ?
Est-il possible en utilisant des opérations arithmétiques classiques d'échanger les valeurs de deux variables ? si oui lesquels ? A quoi faut-il faire attention ?

TP 2 -- Tableaux et tris, révision sur les structures de données
Auteur Marc Zipstein 11 Octobre 2004
Tableaux et tris, révision sur les structures de données

Cette séance de TP sera consacrée dans un premier temps à des révisions sur les structures de données et dans un second temps à la manipulation de tableaux et à leur tris. Afin de réviser les structures de données, nous allons implanter un ensemble de structures permettant de manipuler des Fiches d'étudiants et de les regrouper en Classe.
Dans un second temps, nous verrons deux tris différents (le tri à bulles et le tri par sélection du minimum), ainsi que la suppression des doublons présents dans un tableau pouvant être ou non trié.

Nous rappelons que l'ensemble des fonctions programmées devront être commentées et testées, 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.

TP 3 -- Introduction à la récursivité
Auteur Marc Zipstein 18 Octobre 2004
Introduction à la récursivité

Cette séance de TP va consister à l'écriture et au test de différentes fonctions récursives. Nous implanterons ainsi certaines fonctions vues en TD ou en cours (fonction factorielle, les trois fonctions puissances, la fonction de calcul du pgcd et la fonction de recherche dichotomique) en utilisant un paramètre permettant de déterminer le nombre d'appels récursifs réalisés par chacune de ces fonctions.
Dans un second temps, nous comparerons la fonction récursive permettant de calculer le nième nombre de Fibonacci à sa version itérative, et illustrer ainsi qu'une résolution récursive d'un problème donné n'est pas toujours optimale.
Nous verrons enfin, le problème des Tour de Hanoï et notamment l'affichage des différentes étapes de la résolution de ce célèbre problème.

Chacun des algorithmes ainsi implanté devra être accompagné du calcul de sa complexité.

Nous rappelons que l'ensemble des fonctions programmées devront être commentées et testées, 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.

TP 4 -- Récursivité (suite)
Auteur Marc Zipstein 25 Octobre 2004
Récursivité (suite)

Durant cette séance de TP, nous allons approfondir la notion de récursivité (vue durant le TP précédent) à travers la résolution de deux problèmes. Le premier concerne les chaînes de caractères et plus spécifiquement leur inversion ainsi que la détermination des mots palindromes (un mot que l'on peut lire indifféremment de droite à gauche ou de gauche à droite).
Le second problème plus complexe nommé problème du sac à dos, cherche à déterminer si étant donné un ensemble d'entiers positifs, il en existe un sous-ensemble tel que la somme de ses éléments soit égal à un entier positif donné.

Chacun des algorithmes ainsi implanté devra être accompagné du calcul de sa complexité.

Nous rappelons que l'ensemble des fonctions programmées devront être commentées et testées, 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.

TP 5 -- Tableaux et Tris
Auteur Marc Zipstein 08 Novembre 2004
Tableaux et Tris

Durant cette séance de TP, nous allons utiliser une opération fondamentale en Informatique : le tri. Il existe plusieurs algorithmes de tri et de nombreuses variantes que nous allons implanter dans ce TP. De plus, il est intéressant de pouvoir observer le comportement en cours de déroulement des divers algorithmes de tris. Pour se faire, nous allons utiliser la librairie graphique MlvLib.

Chacun des algorithmes ainsi implanté devra être accompagné du calcul de sa complexité.

Nous rappelons que l'ensemble des fonctions programmées devront être commentées et testées, 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.

TP 6 -- Ensembles et Allocation dynamique
Auteur Marc Zipstein 15 Novembre 2004
Ensembles et Allocation dynamique

Durant cette séance de TP, nous allons utiliser l'allocation dynamique (plus spécifiquement les fonctions malloc, realloc et free) afin de manipuler des ensembles d'entiers de taille variable. Nous verrons de plus des fonctions permettant de réaliser l'union et l'intersection de deux ensembles. Dans un dernier temps, nous verrons l'utilisation de la fonction realloc qui permet d'adapter la place mémoire strictement nécessaire à un ensemble.

Chacun des algorithmes ainsi implanté devra être accompagné du calcul de sa complexité.

Nous rappelons que l'ensemble des fonctions programmées devront être commentées et testées, 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.

TP 7 -- Fichiers et Listes chaînées
Auteur Marc Zipstein 22 Novembre 2004
Fichiers et Listes chaînées

Cette séance de TP sera consacrée dans un premier temps à la manipulation des fichiers (structure FILE permettant de représenter un fichier en C) notamment au travers des fonctions fopen, fscanf, fprintf et fclose. Dans un second temps, nous verrons une structure récursive, les listes chaînées. En effet, cette structure a un de ces champs qui est de type pointeur sur cette structure. Nous verrons ainsi, des fonctions d'insertion, de création, d'affichage et de libération sur les liste chaînées.

Chacun des algorithmes ainsi implanté devra être accompagné du calcul de sa complexité.

Nous rappelons que l'ensemble des fonctions programmées devront être commentées et testées, 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.

TP 8 -- Listes chaînées
Auteur Marc Zipstein 29 Novembre 2004
Listes chaînées

Dans ce TP, nous allons poursuivre l'implantation des listes chaînées commencée durant le TP précédent. Nous verrons notamment la fonction permettant d'extraire une cellule d'une liste, puis une fonction réalisant le tri fusion sur une liste chaînée. Afin de réaliser l'ensemble des fonctions, il est fortement recommander de dessiner les listes et de numéroter les différentes actions à effectuer. Pour réaliser les tests de vos fonctions, un fichier de nombre aléatoire est disponible.

Chacun des algorithmes ainsi implanté devra être accompagné du calcul de sa complexité.

Nous rappelons que l'ensemble des fonctions programmées devront être commentées et testées, 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.

TP 9 -- Compléments sur les listes chainées
Auteur Marc Zipstein 29 Novembre 2004
Compléments sur les listes chainées

Dans ce TP, nous allons compléter la manipulation des listes chaînées au travers quelques implantations un peu plus complexes (listes doublement chaînées et listes circulaires). Ainsi, dans un premier temps nous utiliserons une liste chaînée circulaire afin de résoudre le problème de la permutation de Josephus. Dans un second temps, nous verrons la structure de donnée possible afin d'implanter des listes doublement chaînées ainsi que les fonctions de bases que sont la création, l'insertion et la suppression d'une cellule de la liste. Enfin, nous essayerons de résoudre avec une liste doublement chaînée circulaire le problème de la permutation de Josephus.

Chacun des algorithmes ainsi implanté devra être accompagné du calcul de sa complexité.

Nous rappelons que l'ensemble des fonctions programmées devront être commentées et testées, 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.

TP 10 -- Compléments sur les listes chainées (fin du TP 9)
Auteur Marc Zipstein 29 Novembre 2004
Compléments sur les listes chainées (fin du TP 9)

Dans ce TP, nous allons finir les exercices proposés dans le TP précédent.

Chacun des algorithmes ainsi implanté devra être accompagné du calcul de sa complexité.

Nous rappelons que l'ensemble des fonctions programmées devront être commentées et testées, 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.

Projet -- Fourmis et Fourmilières
Auteur Marc Zipstein Deadline : 7 Janvier 2005, midi 18 Novembre 2004
Fourmis et Fourmilières

Le but de ce projet est de vous faire simuler l'affrontement de deux colonnies de fourmis (les noires et les rouges) à l'aide de la bibliothèque graphique MlvLib. Le projet est découpé en quatre niveaux de difficultés à développer successivement. Chaque colonnie de fourmis est composée de trois groupes d'individus possibles, les fourmis, les fourmilières et les reines. Les fourmilières servent à produire de nouvelles unités et ne se déplacent pas, tandis que les reines se déplacent et peuvent se transformer en fourmilières. Enfin les ouvrières se déplacent et peuvent attaquer les unités adverses.

Les soutenances auront lieu le Lundi 10 Janvier à partir de 9 heures.