#include "matrix.h"void create (matrix *A, int l, int c, short int t, short int type){ int i; A->l = l; A->c = c; A->t = t; switch(type){ case type_char : A->data[type] = (unsigned char**)malloc(sizeof(unsigned char*)*l); for (i = 0 ; i < l ; i++){ A->data[type] = (unsigned char*)malloc(sizeof(unsigned char)*c*t); } break; case type_int : A->data[type] = (int**)malloc(sizeof(int*)*l); for (i = 0 ; i < l ; i++){ A->data[type] = (int*)malloc(sizeof(int)*c*t); } break; case type_long : A->data[type] = (long long int **)malloc(sizeof(long long int*)*l); for (i = 0 ; i < l ; i++){ A->data[type] = (long long int*)malloc(sizeof(long long int)*c*t); } break; case type_float : A->data[type] = (float**)malloc(sizeof(float*)*l); for (i = 0 ; i < l ; i++){ A->data[type] = (float*)malloc(sizeof(float)*c*t); } break; case type_double : A->data[type] = (double**)malloc(sizeof(double*)*l); for (i = 0 ; i < l ; i++){ A->data[type] = (double*)malloc(sizeof(double)*c*t); } break; default: erreur("Create : type inconnu",1); }}void voir_neo (matrix *A){ int i, ii, iii; printf("voir : A->t=%d\n",A->t); printf("\t"); for (i = 0 ; i < A->l ; i++){ for (ii = 0 ; ii < (A->c) ; ii++){ for(iii = 0 ; iii < A->t ; iii++){ printf("%02X",(int)A->data[A->type][i][(A->t)*ii+iii]); } printf("-"); } printf("\n\t"); } printf("\n");}void decoupe (matrix * pere, int basex, int basey, matrix *fils){ int i, ii; for (i = 0 ; i < fils->l ; i++){ for (ii = 0 ; ii < fils->c ; ii++){ fils->data[A->type][i][ii]=pere->data.car[(basex)+i][(basey)+ii]; } }}void produit (matrix *A, matrix *B, matrix *C) { int i, ii, iii; int t=0; for (i = 0 ; i < C->l ; i++){ for (ii = 0 ; ii < C->c ; ii++){ for (iii = 0 ; iii < A->c ; iii++){ t += (A->data[A->type][i][iii])*(B->data.car[iii][ii]); } C->data[C->type][i][ii] = (char)t; t=0; } }}void togray (matrix *A, matrix *B){ int i,ii; if (A->t!=3){ printf("La matrix doit avoir une profondeur de trois\n"); exit(0); } printf("gray %d %d %d\n", (A->l),(A->c),(A->t)); for (i = 0 ; i < (A->l) ; i++){ for(ii = 0 ; ii < (A->c) ; ii++){ B->data[B->type][i][ii]=(A->data[A->type][i][(A->t)*ii]+A->data[A->type][i][(A->t)*ii+1]+A->data[A->type][i][(A->t)*ii+2])/3; } }}int diff (matrix *A){ int i,ii,t=0; for (i = 0 ; i < A->c ; i++){ for(ii = 0 ; ii < A->l ; ii++){ t += A->data.car[i][ii] ; } } return t/((A->c)*(A->l)-1);}void chargement(matrix *pere, matrix *fils, int basex, int basey){ int i, ii; for (i = 0 ; i < fils->l ; i++){ for(ii = 0 ; ii < fils->c ; ii++){ pere->data.car[basex+i][basey+ii]=fils->data.car[i][ii]; } }}