1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
#include <stdio.h>
#include <stdlib.h>
float** Allocate_Mat_Memory(int N, int M);
void Free_Mat_Memory(float **A, int N );
void Affiche_Mat( float **A, int N, int M );
void genere_mat( float **A, int N, int M );
float** function_reshape(float **v_in, int dim1, int dim2);
int main()
{
float **Ma;
float **Vect;
int dim1=3, dim2=3;
int lig;
lig=dim1*dim2;
int col=1;
Vect= Allocate_Mat_Memory( lig, col );
printf("Le nombre de lignes de Vect lig=%d\n",lig);
printf("Le nombre de colonnes de Vect est col= %d\n",col);
genere_mat( Vect, lig, col );
Affiche_Mat(Vect, lig,col );
Ma=function_reshape(Vect, dim1,dim2);
return 0;
}
float** Allocate_Mat_Memory(int N, int M)//Cette fonction permet d'allouer de la memoire pour une matrice quelconque
{
int i;
float **A = NULL;
// On fait l'allocation de memoire pour un vecteur de N cases, C'est un vecteur de pointeurs
A = (float**) malloc( sizeof(float*) * N );
// Si l'allocation à réussi, On fait une allocation de M cases pour chaque ligne
if( A != NULL )
for( i=0; i<N; i++ )
A[i] = (float*) malloc( sizeof(float) * M );
return A;
}
void Free_Mat_Memory( float **A, int N )//cette fonction fait la désallocation d'une matrice (liberer la memoire)
{
int i;
// libérer chaque ligne
for( i=0; i<N; i++ )
free( A[i] );
free( A );
}
void Affiche_Mat( float **A, int N, int M )// Affichage des éléments de la matrice
{
int i, j;
for(i=0; i<N; i++)
{
for(j=0; j<M; j++)
printf("%f\t", A[i][j]);
printf("\n");
}
}
void genere_mat( float **A, int N, int M )//genere les éléments de la matrice de façon aléatoire
{
int c,i, j;
c=255;
for( i=0; i<N; i++ )
for( j=0; j<M; j++ )
{
A[i][j]=rand()%c;
}
}
float** function_reshape(float **v_in, int dim1, int dim2)
{
int i,j,c,d;
d=1;
c=255;
int dim = dim1*dim2;
float **m_out;// matrice d'arrivée
puts ( " Vecteur ==> Matrice \n" ) ;
// allocation des cases du vecteur et remplissage avec des valeurs reconnaissables.
v_in =Allocate_Mat_Memory(dim,d);
//if ( NULL == v_in )
//return 0; // EXIT_SUCCESS et EXIT_FAILURE définies dans stdlib.h .
// for ( i = 0 ; i < dim ; ++i )
for ( i = 0 ; i < dim ; ++i )
for( j=0; j<d ; j++ )
printf( " v_in[%d] = %f \n" , i, v_in[i][j] ) ;
puts (" ") ;
m_out = Allocate_Mat_Memory(dim1, dim2);
*m_out = v_in ; // on donne la bonne valeur, l'adresse de V_in au premier pointeur de la lign de la matrice.
for ( i = 1 ; i < dim1 ; ++i )
// for ( j = 0 ; j < dim2 ; ++j )
// m_out[i]= m_out[i-1] + dim2 ;
for ( i = 0 ; i < dim1 ; ++i)
{
for ( j = 0 ; j < dim2 ; ++j )
{
printf( "%f \t" ,m_out[i][j] ) ;
}
printf("\n");
}
//Free_Mat_Memory(m_out, dim1 );
// return 1 ;
return m_out;
} |