[C] Fusionner deux matrices

Résolu
edouard30 Messages postés 5 Statut Membre -  
edouard30 Messages postés 5 Statut Membre -
Bonjour à tous,

Je débute et je cherche à mettre deux matrices bout à bout, comme par exemple :

a b c d e f g h
i j k l m n o p

a b c d e f g h
i j k l m n o p

J'arrive à rien. Pourriez-vous me mettre sur une piste ?
Merci d'avance.
Configuration: Windows XP
Firefox 3.0.4

8 réponses

  1. neogenesis Messages postés 5303 Statut Contributeur 530
     
    Hello pour cela crée une matrice vide de dimension m x 2n avec

    m = nombre de lignes des deux matrices
    n = nombre de colonnes des deux matrices

    Donc tu auras une matrice vide de même nombre de lignes mais 2 fois plus de colonnes

    Ensuite tu parcours tes deux matrices par lignes, et tu recopies les données dans la matrice vide
    C'est pas plus compliqué :-)
    0
  2. alicia85 Messages postés 75 Statut Membre
     
    soit m le nombre de ligne de tes 2 matrices chacune et n le nombres de collones des 2 chacune creer une matrice de m ligne et 2n colonne je crois qu avec ton exemple ca peut donner ceci
    a b c d e f g h a b c d e f g h
    i j k l m n o p i j k l m n o p
    je crois hein
    0
  3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut
    Oui, tu alloues la bonne taille au tableau, et ensuite tu utilises memcpy ;)
    Cdlt
    0
  4. edouard30 Messages postés 5 Statut Membre
     
    Merci pour vos réponses,

    Je n'arrive qu'à additionner mais pas à fusionner.
    Exemple :
    1 2 3
    4 5 6

    7 8
    9 10

    fait :
    8 10 3
    13 15 6

    et non :
    1 2 3 7 8
    4 5 6 9 10

    Comment fait-on cela ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,
    Comme dit plus haut, tu fais avec memcpy.
    Par exemple :
    int mat[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
    int mat2[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
    int mat3[2][10];
    
    memcpy(mat3,mat,sizeof mat));
    memcpy(mat3+1,mat2,sizeof mat2));
    

    Cdlt
    0
  7. deglingo592003 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   11
     
    comme il a été dit plus haut

    tu crée une matrice de taille

    ligne = nombre de ligne de M (ou de N car elles ont le même nombre de lignes)

    collone = nombre de colonne M + nombre de colonne N

    tu a ta matrice vide avec le nombre exacte de ligne et de colonne

    ensuite tu réalise une première boucle qui parcoure la première ligne de ta matrice M et la recopie dans ta 3emme matrice avec un test quand tu a finie d'écrire la derniere valeur de la matrice M pour qu'ensuite tu réalise une seconde boucle qui réalise la même chose pour la matrice N

    comme cela premiere ligne de ta matrice 3 contient la premiere ligne de matrice M puis premiere ligne de matrice N

    puis ces deux boucle sont incluse dans une troisieme qui s'éffectue pour le nombre de ligne que tu à dans tes matrice

    en gros

    Matrice M

    abc
    def

    Matrice N

    ghi
    jkl

    matrice 3

    abcghi
    defjkl

    le traitement ne sera pas le plus performant possible mais sa permet de se débloquer pour le moment ( a savoir que sa doit etre réalisable avec uniquement deux boucles
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      pas besoin de boucle, memcpy existe ;)
      0
  8. deglingo592003 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   11
     
    ne connaissant pas memcpy j'avait imaginer une autre solution étant donner qu'il n'arrivais pas à s'en sortir mais j'aurait apprit une chose pour la prochaine fois :)

    pq poster mon commentaire avant de voir le tient voila le pourquoi de ma réponse :)
    0
  9. edouard30 Messages postés 5 Statut Membre
     
    Ok, je vais bosser la-dessus.
    Merci à tous
    0