levartolona

TRANSPOSE_MATRIX

Jan 11th, 2020
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.51 KB | None | 0 0
  1. matr_t matrix_square(matr_t matrix, int *row, int *col)
  2. {
  3.     if (*row < *col)
  4.     {
  5.         matr_t kek = realloc(matrix, *col * sizeof(arr_t));
  6.         matrix = kek;
  7.         for(int i = *row; i < *col; i++)
  8.         {
  9.             *(matrix + i) = malloc(sizeof(int) * *col);
  10.         }
  11.  
  12.         *row = *col;
  13.         return matrix;
  14.     }
  15.     else
  16.     {
  17.         int *tmp;
  18.         for(int i = 0; i < *row; i++)
  19.         {
  20.             tmp = realloc(*(matrix + i), sizeof(int) * *row);
  21.             *(matrix + i) = tmp;
  22.         }
  23.  
  24.         *col = *row;
  25.         return matrix;
  26.     }
  27. }
  28.  
  29. matr_t matrix_size_back(matr_t matrix, int row, int col)
  30. {
  31.     if (col > row)
  32.     {
  33.         for (int i = row; i < col; i++)
  34.             free(*(matrix + i));
  35.     }
  36.     else
  37.     {
  38.         for (int i = 0; i < col; i++)
  39.         {
  40.             int *tmp;
  41.             tmp = realloc(*(matrix + i), sizeof(int) * row);
  42.             *(matrix + i) = tmp;
  43.         }
  44.     }
  45.  
  46.     return matrix;
  47. }
  48.  
  49. matr_t matr_transpose(matr_t matrix, int *row, int *col)
  50. {
  51.     int max = *row > *col? *row: *col;
  52.     int buf;
  53.     int row_init = *row;
  54.     int col_init = *col;
  55.     matrix = matrix_square(matrix, row, col);
  56.     for (int i = 0; i < max; i++)
  57.         for (int j = 0; j < i; j++)
  58.         {
  59.             buf = matrix[i][j];
  60.             matrix[i][j] = matrix[j][i];
  61.             matrix[j][i] = buf;
  62.         }
  63.  
  64.     *row = col_init;
  65.     *col = row_init;
  66.     matrix = matrix_size_back(matrix, col_init, row_init);
  67.     return matrix;
  68. }
Add Comment
Please, Sign In to add comment