Puzzle 2D13


Transpose the elements of an array

[M-15] Assume that the array has the same number of rows as columns. To transpose such an array, exchange element x[r][c] with element x[c][r]. The diagonal does not change. Here are some examples:

Original:

  0   1   2   3   4
  5   6   7   8   9
 10  11  12  13  14
 15  16  17  18  19
 20  21  22  23  24
Transposed:

  0   5  10  15  20
  1   6  11  16  21
  2   7  12  17  22
  3   8  13  18  23
  4   9  14  19  24
Original:

  0   1   2 
  5   6   7  
 10  11  12  
Transposed:

 0   5  10
 1   6  11
 2   7  12
Original:

  0   1   2
  3   4   5
  6   7   8
Transposed:

  0   3   6
  1   4   7
  2   5   8

Here is a testing framework:

#include <stdio.h>
#include <stdlib.h>

#define NUMCOLS 10
#define NUMROWS 10
 
void transpose( int nrows, int ncols, int x[nrows][ncols]  )
{
  . . . .
}
 
void fill2DArray ( int nrows, int ncols, int x[nrows][ncols] )
{
  int r, c, val = 0;
  for ( r=0; r<nrows; r++ )
  {
    for ( c=0; c<ncols; c++ )
       x[r][c] = val++ ;
  }
}

void print2DArray ( int nrows, int ncols, int x[nrows][ncols] )
{
  int r, c;  /* row and column indexes for the array */

  /* Print elements in row major order */
  for ( r=0; r<nrows; r++ )
  {
    for ( c=0; c<ncols; c++ )
      printf("%3d ", x[r][c]  );
    printf("\n");
  }
}
 
int main(int argc, char *argv[])
{
  int x[NUMROWS][NUMCOLS];
  
  if ( NUMROWS != NUMCOLS )
  {
    printf("Rows %d must be the same as number of columns %d\n", NUMROWS , NUMCOLS );
    return 0;
  }
  
  fill2Darray( NUMROWS, NUMCOLS, x );
  printf("\n\nOriginal:\n");
  print2DArray( NUMROWS, NUMCOLS, x );
  transpose( NUMROWS, NUMCOLS, x );
  printf("\n\nTransposed:\n");
  print2DArray( NUMROWS, NUMCOLS, x );
  return 0;
}



Answer         Next Page         Previous Page Home