Académique Documents
Professionnel Documents
Culture Documents
Proposez une implémentation avec exemple d’utilisation d’un TAD permettant de modéliser
des matrices (tableaux à 2 dimensions) de valeurs de type réel double précision.
Spécifications :
Les dimensions minimales sont de 1 x 1. Les dimensions maximales ne sont pas imposées.
Elles sont en fait limitées par l'architecture et l'état du système à un moment donné. L'ADT
fournit les fonctions de construction/destruction habituelles, ainsi que des fonctions
d'écriture/lecture à des coordonnées du tableau. Tout est mis en œuvre pour assurer la sécurité
et la fiabilité de l'ADT.
Solution :
1. Nommage
Le choix du nom de l'ADT est important. En effet, il doit à la fois être unique aussi bien au
projet qu’à la bibliothèque, c’est-à-dire sans ambiguïté.
2. Fonctions
3. Fonctions détaillées
matd_create(nb_colonnes, nb_lignes) ;
matd_delete() ;
matd_put(colonne, ligne, valeur) ;
matd_get(colonne, ligne, valeur) ;
4. Code du TAD
/* matd.h */
#include <stddef.h>
/* types */
typedef struct matd matd_s;
/* fonctions */
matd_s *matd_create (size_t nb_colonnes, size_t nb_lignes);
void matd_delete (matd_s * self);
int matd_put (matd_s * self, size_t colonne, size_t ligne, double valeur);
int matd_get (matd_s * self, size_t colonne, size_t ligne, double
*p_valeur);
#endif /* guard */
#include "matd.h"
#include <stdlib.h>
/* structures */
struct matd
{
size_t nb_colonnes;
size_t nb_lignes;
double *tab;
};
/* fonctions privees */
return p;
}
/* fonctions publiques */
if (tab != NULL)
{
size_t i;
for (i = 0; i < size; i++)
{
tab[i] = 0;
}
self->nb_lignes = nb_lignes;
self->nb_colonnes = nb_colonnes;
self->tab = tab;
}
else
{
free (self), self = NULL;
}
}
}
}
return self;
}
int matd_put (matd_s * self, size_t colonne, size_t ligne, double valeur)
{
int err = 1;
if (self != NULL)
{
double *p = get_addr (self, colonne, ligne);
if (p != NULL)
{
*p = valeur;
err = 0;
}
}
return err;
}
if (self != NULL)
{
double const *p = get_addr (self, colonne, ligne);
if (p != NULL)
{
if (p_valeur != NULL)
{
*p_valeur = *p;
err=0 ;
}
}
}
return err;
}
#include "matd.h"
#include <stdio.h>
#include <stdlib.h>
if (m != NULL)
{
int err;
{
size_t i;
return 0;
}
Résultats
Remarques :
- size_t est défini dans <stddef.h>. Il représente les tailles des objets (int).
- Toutes les fonctions des TAD retournent un entier indiquant l’état d’exécution
de la fonction (code erreur), c’est pour renforcer la robustesse du TAD.
- Le concepteur du TAD doit écrire son code, le compiler et fournir à ses
utilisateurs le fichier binaire résultat de la compilation de son fichier
d’implémentation ainsi que le fichier interface (.h)
- L’utilisateur, de son coté, doit écrire le code d’utilisation en incluant le fichier
d’entête fourni pas le concepteur, puis compiler en utilisant l’option d’edition
de lien permettant d’inclure le fichier binaire fourni par le concepteur (dépends
de la plateforme et du compilateur du C)