IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Programme qui transforme matrice en vecteur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 7
    Par défaut Programme qui transforme matrice en vecteur
    Bonjour à tous,
    J'ai écris une fonction qui transforme matrice en vecteur. J'ai 0 erreur 0 warnig mais ca m'affiche rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #include <stdio.h>// pour les printf et puts
    #include <stdlib.h>// pour les malloc et free
    //#include <time.h>
    //#include <math.h>
    typedef double TYPE ;
    typedef TYPE *VECTOR ;
    typedef TYPE **MATRIX ;
    // transformation d'une matrice en vecteur
    double fmv(int const dim1, int const dim2, int dim, double **m_in);
    int main()
    {
    int const dimens1 = 4 , dimens2= 2 ;// on définit les dimensions de la matrice.
    int dimens=8;
     
    double **mat_in;// matrice de départ
    double vect_out[dimens]; //double *vect_out ;
    int i, j;
    //int i, j; // les indices des boucles.
     
    vect_out[dimens] = fmv(dimens1, dimens2, dimens, mat_in);// incompatible types when assigning to type 'double *' from type 'double'
    return 0;
    }
     
    double fmv(int const dim1, int const dim2, int dim, double **m_in)
    {
    int i;
    int j;
     
    double v_out[dim] ;// vecteur de départ
    // on va créer une matrice et la remplir par des valeurs reconnaissables
    m_in = (MATRIX) malloc( dim1 * sizeof(VECTOR) );
       if ( NULL == m_in )
       return EXIT_FAILURE ;
       *m_in = (VECTOR) malloc( dim * sizeof(TYPE) );
       if ( NULL == *m_in )
       return EXIT_FAILURE ;
       /*indiquer que les autres pointeurs de lignes correspondent au début des autres lignes de la matrice*/
       //for ( int i = 1 ; i < dim1 ; ++i )
     
       for ( i = 0 ; i < dim1 ; ++i)
       m_in[i] = m_in[i-1] + dim2 ;
     
       {
          for (j = 0 ; j < dim2 ; ++j)
     
          m_in[i][j] = (TYPE)(10*i+j);
       }
     
       for ( i = 0 ; i < dim1 ; ++i)
       {
          for ( j = 0 ; j < dim2 ; ++j )
          printf( " m_in[%d][%d] = %g \n" , i, j, (double)m_in[i][j] ) ;
       }
       printf(" ") ;
       v_out[dim] = **m_in ;                         // là le vecteur v_out est équivalent à la matrice m_in
       //debut des verifications
     
       printf( " On fait les verifications : " ) ;
       printf( " pour m_in  : %p \n", m_in  ) ;
       printf( " pour *m_in : %p \n", *m_in ) ;
       printf( " pour v_out : %p \n", v_out ) ;
       puts ( " OK pour les adresses \n" );
       for ( i = 0 ; i < dim ; ++i )
          printf( " v_out[%d] = %g \n" , i, (double)v_out[i] );
       puts ( " OK aussi pour les valeurs \n" ) ;
       // fin des verifications
     
     
    //free( *m_in ) ;
    //free( m_in ) ;
    return v_out[dim];
    }
    voici ce que le compilateur m'affiche:


    Compiling: C:\Users\OLGA\Desktop\fonctiontransfmatvect.c
    Linking console executable: C:\Users\OLGA\Desktop\fonctiontransfmatvect.exe
    Process terminated with status 0 (0 minutes, 6 seconds)
    0 errors, 0 warnings

    Checking for existence: C:\Users\OLGA\Desktop\fonctiontransfmatvect.exe
    Executing: C:\Program Files\CodeBlocks/cb_console_runner.exe "C:\Users\OLGA\Desktop\fonctiontransfmatvect.exe" (in C:\Users\OLGA\Desktop)
    Process terminated with status -1073741510 (0 minutes, 14 seconds)


    Merci de bien vouloir m'aider. Cordialement,

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_in = (MATRIX) malloc( dim1 * sizeof(VECTOR) );
    Ce qui prouve que m_in ne devrait pas être un paramètre de la fonction puisqu'on écrase immédiatement la valeur passée au paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       for ( i = 0 ; i < dim1 ; ++i)
       m_in[i] = m_in[i-1] + dim2 ;
    m_in[i-1] n'existe pas pour i==0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       {
          for (j = 0 ; j < dim2 ; ++j)
     
          m_in[i][j] = (TYPE)(10*i+j);
       }
    Pourquoi les { et } ? Pour faire joli ?
    L'élément v_out[dim] n'existe pas.
    ....

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    J'ai juste survolé mais il y a des choses bizarres, e.g. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       for ( i = 0 ; i < dim1 ; ++i)
       m_in[i] = m_in[i-1] + dim2 ;
     
       {
          for (j = 0 ; j < dim2 ; ++j)
     
          m_in[i][j] = (TYPE)(10*i+j);
       }
    es-tu sûre de savoir ce que ça fait? Tu es d'accord que les accolades ne servent à rien?

    Ah, grillé par diogene, comme souvent, du coup j'ajoute un petit commentaire pour préciser un tout petit peu :
    Après le premier for "i" est égal à "dim1", du coup dès que tu rentres dans le second "m_in[i][j] = ..." va provoquer une erreur de segmentation puisque tu vas chercher à écrire hors des dimensions du tableau.
    Mais bon il y a encore pas mal de choses qui posent problème. Essaye de procéder petit à petit.

Discussions similaires

  1. transformer matrice en vecteur
    Par Nab18 dans le forum MATLAB
    Réponses: 3
    Dernier message: 19/04/2013, 18h07
  2. Réponses: 4
    Dernier message: 09/05/2012, 14h35
  3. programme qui fait des opérations sur la matrices
    Par nomadstorm dans le forum Débuter
    Réponses: 6
    Dernier message: 06/01/2010, 23h05
  4. Transformation matrice en vecteur
    Par mihaispr dans le forum MATLAB
    Réponses: 4
    Dernier message: 02/05/2009, 12h51
  5. Réponses: 18
    Dernier message: 24/07/2006, 19h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo