#include #include #include "matrice.h" static anneau flottant; /*************** objet double **************/ double * creer_pointeur (double val) { double *d = malloc (sizeof (double)); assert (d != NULL); *d = val; return d; } void * element_nul () { return creer_pointeur (0); } void * element_unite () { return creer_pointeur (1); } double * somme (double *a, double *b) { return creer_pointeur ((*a) + (*b)); } double * produit (double *a, double *b) { return creer_pointeur ((*a) ** b); } double * dupliquer (double *a) { return creer_pointeur (*a); } void liberer (double *d) { free (d); } /****************** objet matrice carrée *****************/ typedef matrice mc; mc mc_element_nul () { return mat_creer_matrice_nulle (10, 10, flottant); } mc mc_element_unite () { indice i; matrice m = mat_creer_matrice_nulle (10, 10, flottant); for (i = 0; i < 10; i++) mat_affecter_element (m, i, i, creer_pointeur (1)); return m; } mc mc_somme (mc a, mc b) { return mat_somme (a, b); } mc mc_produit (mc a, mc b) { return mat_produit (a, b); } mc mc_dupliquer (mc a) { return mat_creer_copie (a); } void mc_liberer (mc m) { mat_liberer (m); } /***********************************************************/ int main () { anneau matrice_carre; matrice a, b, c; flottant = anneau_creer ((constante) element_nul, (constante) element_unite, (binaire) somme, (binaire) produit, (unaire) dupliquer, free); matrice_carre = anneau_creer ((constante) mc_element_nul, (constante) mc_element_unite, (binaire) mc_somme, (binaire) mc_produit, (unaire) mc_dupliquer, (free_function) mc_liberer); a = mat_creer_matrice_nulle (4, 4, matrice_carre); b = mat_creer_matrice_nulle (4, 4, matrice_carre); c = mat_produit (a, b); return EXIT_SUCCESS; }