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 :

decalage d'une matrice vers le haut


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 decalage d'une matrice vers le haut
    Bonjour à tous j'ai créé une fonction qui doit décaler une matrice vers le haut et mettre des 0 sur la dernière ligne de la matrice. Le problème est que, quand je compile cela me met segmentation fault.
    Pouvez vous je vous prie jettez un coup d'oeil à mon code?
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    //#include <string.h>
     
    float** Allocate_Mat_Memory(int N, int M);
    void genere_mat( float **A, int N, int M );
    void Affiche_Mat( float **A, int N, int M );
    float** decal_haut(float **Mat, int N, int M);
    int main()
    {
     int dim1, dim2;
      float **Mat, **A_dec_haut;
      printf("\n Les dimensions de la matrice sont:\n");
      printf("Nombre de lignes: ");
      scanf("%d", &dim1);
      printf("Nombre de colonnes: "); 
      scanf("%d", &dim2);
      Mat=Allocate_Mat_Memory(dim1, dim2);
      genere_mat(Mat, dim1, dim2);
      printf("La Matrice est:\n\n");
      Affiche_Mat( Mat, dim1, dim2 );
     
      printf("La Matrice decalee vers le haut est:\n\n");
      A_dec_haut = decal_haut(Mat, dim1, dim2);
      Affiche_Mat( A_dec_haut, dim1, dim2 );
    return 0;
    }
     
    float** Allocate_Mat_Memory(int N, int M)//Cette fonction permet d'allouer de la memoire pour une matrice qulquonque 
    {
    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 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** decal_haut(float **Mat, int N, int M)// decale les elements de la matrice vers le haut
    {
      int i, j;
      float **Mat_dec_haut= NULL;
      Mat_dec_haut = Allocate_Mat_Memory(N, M);
     
     
      for( i=0; i<N; i++ )
     
        {
     
           	 for( j=0; j<M; j++ )
     
             {
     
               Mat_dec_haut[N-1][j] = 0; // initialisation de la dernière ligne
               Mat_dec_haut[i][j] = Mat[i+1][j];
     
             }
      }
    return Mat_dec_haut;
    }

  2. #2
    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
    Le problème vient de la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mat_dec_haut[i][j] = Mat[i+1][j];
    Dans la mesure où ta boucle for est déclarée ainsi :
    Mat[i+1] quand i=N-1 donne Mat[N] donc ça "déborde".

  3. #3
    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
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     for( i=0; i<N; i++ )
     
        {
     
           	 for( j=0; j<M; j++ )
     
             {
     
               Mat_dec_haut[N-1][j] = 0; // initialisation de la dernière ligne
               Mat_dec_haut[i][j] = Mat[i+1][j];
     
             }
      }
    - On sort de la matrice pour Mat[i+1][j] avec i == N-1;
    - Pourquoi faire N fois la mise à 0 de la dernière ligne. Pour perdre du temps ?
    - La dernière ligne est remplie de 0 AVANT d'être recopiée dans l'avant dernière ligne. Elle est perdue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     for( i=0; i<N-1; i++ ) 
         for( j=0; j<M; j++ ) Mat_dec_haut[i][j] = Mat[i+1][j];
     for( j=0; j<M; j++ ) Mat_dec_haut[N-1][j] = 0;

  4. #4
    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
    Merci. votre aide m'a été précieuse.
    a++

Discussions similaires

  1. Animation Simple:Effectuer une translation vers le haut
    Par Pif_Paf_Pouf dans le forum Android
    Réponses: 7
    Dernier message: 27/05/2014, 15h50
  2. Déplacer une ligne vers ou haut ou le bas d'une Listebox
    Par fmris dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2014, 10h26
  3. Decalage dans une matrice
    Par kiten dans le forum MATLAB
    Réponses: 5
    Dernier message: 25/09/2012, 15h17
  4. [XL-2003] Déplacer une ligne vers le haut ou vers le bas
    Par rjf18 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/01/2010, 21h59

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