fonction qui transforme une matrice en vecteur en langage C

fonction qui transforme une matrice en vecteur en langage C - C - Programmation

Marsh Posté le 27-04-2012 à 16:19:05    

Bonjour à tous,
Voilà j'ai écris un programme qui transforme une matrice en vecteur. Après compilation j'ai 0 erreur, 0 warning mais mon programme n'affiche rien. Pouvez-vous m'aider SVP.
 
"Code en C"
 

Code :
  1. [cpp]
  2. #include <stdio.h>// pour les printf et puts
  3. #include <stdlib.h>// pour les malloc et free
  4. //#include <time.h>
  5. //#include <math.h>
  6. typedef double TYPE ;
  7. typedef TYPE *VECTOR ;
  8. typedef TYPE **MATRIX ;
  9. // transformation d'une matrice en vecteur
  10. double fmv(int dim1, int dim2);
  11. int main()
  12. {
  13. int const dimens1 = 4 , dimens2= 2 ;// on définit les dimensions de la matrice.
  14. int dimens= dimens1*dimens2;
  15. MATRIX mat_in;// matrice de départ
  16. VECTOR vect_out; //double *vect_out ;
  17. int i, j;
  18. //int i, j; // les indices des boucles.
  19. *vect_out = fmv(dimens1, dimens2);// incompatible types when assigning to type 'double *' from type 'double'
  20. return 0;
  21. }
  22. double fmv(int dim1, int dim2)
  23. {
  24. int i, j;
  25. int dim = dim1*dim2;
  26. VECTOR v_out;// vecteur à réccupérer
  27. MATRIX m_in;// matrice de depart
  28. puts ( " Matrice ==> Vecteur \n" ) ;
  29. // on va créer une matrice et la remplir par des valeurs reconnaissables
  30. m_in = (MATRIX) malloc( dim1 * sizeof(VECTOR) );
  31.    if ( NULL == m_in )
  32.    return EXIT_FAILURE ;
  33. *m_in = (VECTOR) malloc(dim * sizeof(TYPE));
  34.    if ( NULL == *m_in )
  35.    return EXIT_FAILURE ;
  36.    /*indique que les autres pointeurs de lignes csorrespondent au début des autres lignes de la matrice*/
  37.    for ( i = 1 ; i < dim1 ; ++i )
  38.    m_in[i] = m_in[i-1] + dim2 ;
  39.    for ( i = 0 ; i < dim1 ; ++i)
  40.    {
  41.       for (j = 0 ; j < dim2 ; ++j)
  42.       m_in[i][j] = (TYPE)(10*i+j);
  43.    }
  44.        for ( i = 0 ; i < dim1 ; ++i)
  45.         {
  46.             for ( j = 0 ; j < dim2 ; ++j )
  47.             printf( " m_in[%d][%d] = %g \n" , i, j, (double)m_in[i][j] ) ;
  48.         }
  49. printf(" " ) ;
  50.    v_out = *m_in ; // là le vecteur v_out est équivalent à la matrice m_in
  51.    //debut des verifications
  52.    printf( " On fait les verifications : " ) ;
  53.    printf( " pour m_in  : %p \n", m_in  ) ;
  54.    printf( " pour *m_in : %p \n", *m_in ) ;
  55.    printf( " pour v_out : %p \n", v_out ) ;
  56.    puts ( " OK pour les adresses \n" );
  57.    for ( i = 0 ; i < dim ; ++i )
  58.       printf( " v_out[%d] = %g \n" , i, (double)v_out[i] );
  59.    puts ( " OK aussi pour les valeurs \n" ) ;
  60.    // fin des verifications
  61. free( *m_in ) ;
  62. free( m_in ) ;
  63. return 0;
  64. }

[/cpp]


Message édité par olgha le 30-04-2012 à 15:27:32
Reply

Marsh Posté le 27-04-2012 à 16:19:05   

Reply

Marsh Posté le 27-04-2012 à 16:23:25    

voici e que le compilateur m'affiche:
 
stagiaire@amaltee /mnt/manille/sdb2/stages/stagiaire $ gcc func1.c -o func1.out
stagiaire@amaltee /mnt/manille/sdb2/stages/stagiaire $ ./func1.out
 Matrice ==> Vecteur  
 
 m_in[0][0] = 0  
 m_in[0][1] = 1  
 m_in[1][0] = 10  
 m_in[1][1] = 11  
 m_in[2][0] = 20  
 m_in[2][1] = 21  
 m_in[3][0] = 30  
 m_in[3][1] = 31  
  On fait les verifications :  pour m_in  : 0x602010  
 pour *m_in : 0x602040  
 pour v_out : 0x602040  
 OK pour les adresses  
 
 v_out[0] = 0  
 v_out[1] = 1  
 v_out[2] = 10  
 v_out[3] = 11  
 v_out[4] = 20  
 v_out[5] = 21  
 v_out[6] = 30  
 v_out[7] = 31  
 OK aussi pour les valeurs  
 
Segmentation fault


Message édité par olgha le 30-04-2012 à 15:26:37
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed