• Aucun résultat trouvé

2 Tableau dynamique

N/A
N/A
Protected

Academic year: 2022

Partager "2 Tableau dynamique"

Copied!
3
0
0

Texte intégral

(1)

3I-IN9 Structures de donn´ees

Structures de donn´ ees

TP2

Introduction

Dans la suite des TPs de structure de donn´ees, vous allez d´evelopper une biblioth`eque en C dans la quelle vous impl´ementerez :

— des structures de donn´ees :

— Tableau dynamique

— Liste doublement chaˆın´ee

— Pile et File

— ...

— des fonctions pour mesurer les performances de vos structures de donn´ees :

— Mesure du temps d’ex´ecution

— Mesure du nombre d’allocations m´emoire

— Mesure de la quantit´e de m´emoire allou´ee

Vous allez ´egalement d´evelopper des codes de test bas´es sur plusieurs algorithmes de tri pour

´

evaluer les performances de vos impl´ementations.

Et vous devez ´ecrire le makefile pour la compilation automatique de votre projet.

1 Travaux pr´ ealable

1.1. Cr´eez votre r´epertoire de travail, nommez le i3 in9 lib.

1.2. Dans votre r´epertoire de travail, cr´eez un fichier nomm´eREADME. Dans ce fichier, indiquez vos noms et pr´enoms.

1.3. Dans votre r´epertoire de travail, cr´eez un fichier nomm´e makefile. Vous le laisserez vide pour le moment.

2 Tableau dynamique

Dans ce TP, vous allez d´evelopper un tableau dynamique. C’est une structure de donn´ees qui permet :

— de stocker un ensemble de n donn´ees ;

— d’acc´eder aux donn´ees par un index ;

— d’ajouter et de supprimer dynamiquement des donn´ees.

Classe C++ : Vector

Pour d´evelopper votre structure de tableau dynamique, vous allez vous inspirer de la classe C++Vector(documentationici). Les principales fonctions de la classe Vector que nous voulons reproduire sont :

— vector::at

— vector::erase

— vector::insert

IN3I21 Romain Negrel Page 1 sur 3

(2)

— vector::push back

— vector::pop back

— vector::clear

— vector::empty

— vector::size

— vector::capacity

Pour ´eviter d’effectuer trop souvent des allocations m´emoire lors des insertions et de suppres- sions de donn´ees dans le tableau, la classe C++ Vector utilise un strat´egie d’anticipation en allouent `a l’avance plus de m´emoire que n´ecessaire. Vous aller impl´ementer un m´ecanise similaire dans votre structure de tableau dynamique.

2.1 Tableau dynamique de double

Dans une premier temps, vous allez d´evelopper une structure de tableau dynamique simple (sans m´ecanisme pour r´eduire le nombre d’allocation m´emoire) pour stocker des doubleet vous ne vous soucierez pas pour le moment de la librations de la m´emoire des donn´ees stock´ees.

2.1. Cr´eez dans votre r´epertoire de travail les fichiers

vector.h;

vector.c.

(a) Ajoutez dans le fichier vector.h, les instruction de pr´ecompilation pour s´ecuriser votre fichier contre les doubles inclusions.

(b) Ajoutez dans le fichier makefile, les lignes pour compiler le fichier vector.c et obtenir le fichier vector.o.

(c) Testez en ex´ecutant la commande make vector.o dans votre r´epertoire de travail.

2.2. Structure pour votre tableau dynamique.

(a) D´eclarez dans le fichiervector.hune structure, que vous nommerezstruct vectoret qui contient :

— Une variable pour stocker le nombre d’´el´ement stocker dans la structure

— Un pointeur de double.

(b) Utilisez la commende C typedef (doc. ici) pour red´efinir votre struct struct_vector en

s_vectoret pour d´efinir le typep_s_vector qui est un pointeur sur la structure des_vector

.

2.3. Fonctions pour votre tableau dynamique.

(a) ´Ecrivez la fonction p_s_vector vector_alloc(size_t n);qui alloue et retourne votre struc- ture. Le tableau dynamique contient n double pr`es initialis´es `a 0.0.

(b) ´Ecrivez la fonction void vector_free(p_s_vector p_vector); qui lib`ere votre structure.

(c) ´Ecrivez la fonctionvoid vector_set(p_s_vector p_vector, size_t i, double v);qui affecte la valeur v `a l’index i de votre tableau dynamique et la fonction double vector_get(

p_s_vector p_vector, size_t i);qui retourne la valeur de l’index i.

Ces fonctions sont les ´equivalents de la m´ethode vector::at de la classe C++Vector.

(d) ´Ecrivez la fonction void vector_insert(p_s_vector p_vector, size_t i, double v); qui in- sert une nouvelle donn´ee `a l’indexi de votre tableau dynamique.

Cette fonction est l’´equivalent de la m´ethode vector::insertde la classe C++ Vector.

IN3I21 Romain Negrel Page 2 sur 3

(3)

(e) ´Ecrivez la fonction void vector_erase(p_s_vector p_vector, size_t i); qui supprime la donn´ee `a l’index i de votre tableau dynamique.

Cette fonction est l’´equivalent de la m´ethode vector::erase de la classe C++ Vector.

(f) ´Ecrivez la fonction void vector_push_back(p_s_vector p_vector, double v); qui insert une nouvelle donn´ee `a la fin de votre tableau dynamique.

Cette fonction est l’´equivalent de la m´ethode vector::push back de la classe C++

Vector.

(g) ´Ecrivez la fonction void vector_pop_back(p_s_vector p_vector); qui supprime la derni`ere donn´ee de votre tableau dynamique.

Cette fonction est l’´equivalent de la m´ethodevector::pop backde la classe C++Vector.

(h) ´Ecrivez la fonctionvoid vector_clear(p_s_vector p_vector);qui supprime toutes les donn´ees de votre tableau dynamique.

Cette fonction est l’´equivalent de la m´ethode vector::clear de la classe C++ Vector.

(i) ´Ecrivez la fonctionint vector_empty(p_s_vector p_vector);qui retourne un entier non-nul si votre tableau dynamique est vide et z´eros sinon.

Cette fonction est l’´equivalent de la m´ethode vector::empty de la classe C++ Vector.

(j) ´Ecrivez la fonctionsize_t vector_size(p_s_vector p_vector);qui retourne le nombre d’´el´ement stocker dans le tableau dynamique

Cette fonction est l’´equivalent de la m´ethode vector::size de la classe C++Vector.

2.4. Fichier de test

(a) Cr´eez le fichier test vector.c .

(b) Ajoutez dans ce fichier le code minimum pour la fonction int main(int argc, char *argv []).

(c) Ajoutez dans le fichiermakefile, les lignes pour compiler le fichiertest vector.cet obtenir le fichier test vector.o

(d) Testez en ex´ecutant la commande make test vector.o dans votre r´epertoire de travail.

(e) Ajoutez dans le fichiermakefile, les lignes pour effectuer le linkage detest vector.oet

vector.o et obtenir le fichier test vector

(f) Testez en ex´ecutant la commande make test vector dans votre r´epertoire de travail.

(g) Dans le fichiertest vector.c´ecrivez des fonctions de teste unitaire pour tester toute vos fonctions de votre vecteur.

IN3I21 Romain Negrel Page 3 sur 3

Références

Documents relatifs

Déposez par cliquer-glisser le bouton SOCIÉTÉ dans la partie Déposer champs de ligne Ici.. Déposez par cliquer-glisser le bouton PAYS dans la partie Déposer champs de

Reproduis les formes et colorie-les de la bonne couleur.. Tableau à

Dessine les œufs, colorie-les de la bonne couleur et reproduis les graphismes au bon endroit... Tableau à

Colorie les tortues de la bonne couleur et reproduis les graphismes au bon endroit ou colle.. Tableau à

Colle les tortues de la bonne couleur et reproduis les graphismes au bon endroit.. Tableau à

Retrouve la consigne du tableau à double entrée et colle les images au bon endroit... Tableau à

TS 8 Interrogation 4A 10 novembre 2017 R´epondre aux questions sur la feuille..

Attention : Pour ´eviter de devoir chercher les r´ef´erences dans l’entier du tas, on stocke les r´ef´erences de g´en´eration plus ancienne vers g´en´eration plus jeune...