2010-08-25 7 views
1

j'ai mon code pour la transposition de ma matrice:comment transposez-vous une matrice non-carrée? en C

for(j=0; j<col; j++) { 
    for(k=0; k<row; k++) { 
     mat2[j][k] = mat[k][j]; 
    } 

il semble fonctionner sur une matrice carrée mais pas sur une matrice non carrée. aide moi les gars!

+1

Qu'est-ce que cela signifie par "ne fonctionne pas"? – kennytm

+2

Que voulez-vous dire que ça ne marche pas? Il se bloque? Ne fait rien? Aidez-nous à vous aider! –

+0

espérons que vous avez alloué les tableaux de bonnes dimensions. @all je sais que cela devrait être un commentaire. mais je n'ai pas assez de points de réputation pour le faire: | – Rahul

Répondre

0

Si col est le nombre de lignes dans mat2 (et colonnes dans mat) et la ligne est le nombre de colonnes dans mat2 (et les lignes dans mat), alors cela devrait fonctionner.

Vous avez besoin d'un bouclé très proche, mais je suppose que vous l'avez dans votre code.

3

Cela fonctionnera pour une matrice non carrée, mais vous devez vous assurer que le nombre de lignes dans mat2 correspond au nombre de colonnes dans mat, et vice versa. C'est-à-dire que si mat est une matrice NxM, alors mat2 doit être une matrice MxN.

2

Est-ce le code que vous avez utilisé dans votre application? Parce que c'est faux.
La syntaxe de l'instruction for est:

for (Initialization; Condition to continue with the loop; Step Operation) {} 

Dans votre cas, vous devez utiliser quelque chose comme ceci:

#define COLS 10 
#define ROWS 5 

int mat[COLS][ROWS]; 
int mat2[ROWS][COLS]; 

int i, j; 

for (i = 0; i < COLS; i ++) { 
    for (j = 0; j < ROWS; j++) { 
     mat2[j][i] = mat[i][j]; 
    } 
} 

De cette façon, cela pourrait transposer votre matrice. Naturellement, vous devez d'abord connaître les dimensions de la matrice. Une autre façon pourrait être de votre matrice dinamically initialiser à l'aide des données de l'utilisateur fourni, comme ceci:

int ** mat; 
int ** mat2; 

int cols, rows; 
int i, j; 

/* Get matrix dimension from the user */ 

mat = (int **) malloc (sizeof(int *) * cols); 

for (i = 0; i < cols; i++) { 
    mat[i] = (int *) malloc (sizeof(int) * rows); 
} 

cette façon, vous initialiser une matrice dinamically et vous pouvez transposer la même manière que précédemment.

+1

Oh, j'ai vu que vous aviez mis à jour votre code. La deuxième partie de la réponse pourrait être utile ... – Jazzinghen

0

Code pour la transposition d'une matrice non carrée avec des dimensions prédéfinies dans C++ ressemblerait à quelque chose comme suit:

#include <iostream> 

using namespace std; 

int main() 
{ 
int a[7][6],b[6][7],x,i,j,k; 
/*Input Matrix from user*/ 
cout<<"Enter elements for matrix A\n"; 
for(i=0;i<7;i++) 
    {for(j=0;j<6;j++) 
     { 
     cin>>a[i][j]; 
     } 
    } 
/*Print Input Matrix A*/ 
cout<<"MATRIX A:-"<<endl; 
for(i=0;i<7;i++) 
    {for(j=0;j<6;j++) 
     { 
     cout<<a[i][j]; 
     } 
     cout<<endl; 
    } 
/*calculate TRANSPOSE*/ 
for(i=0;i<7;i++) 
    {for(j=0,k=5;j<6;j++,k--) 
     { 
     x=j+(k-j); 
     b[x][i]=a[i][j]; 
     } 
    } 
/*Print Output Matrix B*/ 
cout<<"matrix B:-\n"; 
for(i=0;i<6;i++) 
    {for(j=0;j<7;j++) 
    { 
     cout<<b[i][j]; 
    } 
    cout<<endl; 
    } 
} 

Vous pouvez remplacer par les états-tête appropriés et impression/numérisation à écrire le code en C et alternativement prendre l'entrée de l'utilisateur et l'implémenter.

-1
#include<conio.h> 
#include<stdio.h> 
main() 
    int a[5][5],i,j,t; 
    clrscr(); 
    for(i=1;i<=4;i++) 
    { 
     for(j=1;j<=5;j++) 
      scanf("%d",&a[i][j]); 
    } 

    for(i=1;i<=4;i++) 
    { 
     for(j=i;j<=5;j++) 
     { 
      if(i<=4&&j<=4) 
      { 
       t=a[j][i]; 
       a[j][i]=a[i][j]; 
       a[i][j]=t; 
      } 
      else 
      a[j][i]=a[i][j]; 
     } 
    } 

    for(i=1;i<=5;i++) 
    { 
     for(j=1;j<=4;j++) 
     { 
      printf("%d ",a[i][j]); 
     } 
     printf("\n"); 
    } 

    getch(); 
} 
+0

S'il vous plaît poster ceci d'une manière est lisible. –

0
#include<conio.h> 
    #include<ctype.h> 
#include<iostream.h> 
void trans(int [][10], int , int); 
int main() 
{ 
    int a[10][10],n,m,i,j; 
    clrscr(); 
    cout<<"Enter the no. of rows and Columns: "; 
    cin>>n>>m; 
    cout<<"\n Enter the Matrix now:"; 
    for(i=0;i<n;i++) 
    for(j=0;j<m;j++) 
    cin>>a[i][j]; 
    trans(a,n,m); 
    getch(); 
    return 0; 
} 
void trans(int a[][10] , int n , int m) 
{ 
    int i,b[10][10],j; 
    for(i=0;i<n;i++) 
    for(j=0;j<m;j++) 
     { 
     b[j][i]=a[i][j]; 
     } 
    cout<<"\n\nSize before Transpose "<<n<<"x"<<m<<"\n\n"; 
    for(i=0;i<m;i++) 
     { 
     for(j=0;j<n;j++) 
      cout<<b[i][j]<<"\t"; 
    cout<<"\n"; 
     } 
    cout<<"\n\nSize after transpose "<<m<<"x"<<n; 
    } 
+0

Veuillez fournir une explication. – SilentMonk

Questions connexes