INF3105 — Structures de données et algorithmes
Été 2024
UQAM
Département d'informatique

Laboratoire 3 : Tableau dynamique générique

Lectures préalables

Objectifs


Tâches

Téléchargement des fichiers du Lab3

Tapez les commandes suivantes :
$ wget http://cria2.uqam.ca/INF3105/lab3/lab3.zip
$ unzip lab3.zip
Regardez brièvement le contenu des fichiers.

Implémentation d'une classe générique Tableau<T>

  1. Prenez connaissance du programme test_tableau.cpp.
  2. Compilez avec make ou avec g++ -o test_tableau test_tableau.cpp
    $ make
    
  3. Exécutez le programme test_tableau.
  4. $ ./test_tableau
    

    Vous devriez obtenir:
    test1() : ajouts simples
     ==> ECHEC t[0]!=3
     ==> ECHEC t[0]!=3
     ==> ECHEC Taille
    
    
    **** Sommaire ****
    => DÉSOLÉ, au moins un test a échoué.
    => Ne lâchez pas!
    
  5. Complétez le fichier d'entête tableau.h. Le but est de réussir tous les tests dans test_tableau.cpp afin d'obtenir la sortie suivante.
    test1() : ajouts simples
     ==> OK
    test2() : ajouts +
     ==> OK
    test3() : operator =
     ==> OK
    test4() : operator =
     ==> OK
    test5() : operator =
     ==> OK
    test6() : operator =
     ==> OK
    test7() : constructeur par copie
     ==> OK
    test8() : operator ==
     ==> OK
    test9() : insertion
     ==> OK
    test10() : enlèvement
     ==> OK
    test11() : trouver
     ==> OK
    test12() : trouver
     ==> OK
    
    
    **** Sommaire ****
    => BRAVO, tous les tests ont été réussis!
    => Attention, ces tests ne sont pas exhaustifs.
    => Réussir tous ces tests ne garanti l'absence de failles.
    => Soyez vigilants, il pourrait rester des bogues.
    
Conseils :

Exercice complémentaire au Lab3

Application : Nuage de points

Cette tâche consiste à compléter l'implémentation de la classe Nuage. Pour cela vous devez éditer les fichiers nuage.h et nuage.cpp. La classe Nuage implémente un type abstrait de données pour représenter et la manipuler un nuage de points.

La classe Nuage est composée de deux parties :

Représentation (partie privée)

Un objet de type Nuage est représenté par un tableau de points.

Opérations (partie publique)

Fonction / Description
Illustration
const Point& Nuage::proche(const Point& p);

Retourne une référence sur le point le plus proche du point p dans le nuage.
Nuage Nuage::proches(const Point& p, double r) const;

Retourne le sous-nuage de points contenant les points à l'intérieur d'un cercle centré sur le point p et ayant un rayon de r.
Nuage Nuage::nproches(const Point& p, int n) const;

Retourne un sous-nuage de points contenant les n points les plus près du point p.

Programme lab3.cpp

Pour compilé le programme lab3, il suffit de faire la commande make ou g++ -o lab3 lab3.cpp nuage.cpp point.cpp. L'exécutable lab3 doit être lancé en ligne de commande. Voici un exemple.

./lab3 nuage1.txt

Le paramètre nuage1.txt spécifie le nom du fichier dans lequel le nuage de points doit être lu. Une fois lancé, le programme lab3 lit des requêtes. Il y a trois types de requêtes, chacune correspondant à une opération publique de la classe Nuage telle que définie à la section précédente. Voici la syntaxe des trois commandes.

Exemple 1

(les lignes tapées sont en gras)

$ ./lab3 nuage1.txt
proche (8,9)
(10,10)
proche (5,4)
(3,4)
proche (8,9)
(10,10)
proches (9,9) 5
(10,10)
proches (5,5) 10
(0,0)
(10,0)
(3,4)
(10,10)
nproches (1,1) 2
(0,0)
(3,4)
nproches (1,1) 1
(0,0)

Exemple 2

(les lignes tapées sont en gras)

$ ./lab3 nuage5.txt
proche (40,40)
(39.452,44.9371)
proches (45,60) 2
(44.9134,60.7752)
(45.9883,59.7219)
(45.6473,58.1336)
(43.8117,61.401)
(44.7787,60.6255)
(46.0452,59.6523)
(44.8761,61.7523)
(44.7498,60.2861)
(45.1166,61.2866)
(45.2139,61.4634)
(45.3378,58.9671)
(45.6521,60.4831)
nproches (65,23) 5
(64.866,45.1558)
(67.7456,45.1277)
(67.2299,45.186)
(63.1799,45.5228)
(60.4064,45.2012)