Транспонирование матрицы на С++

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 1 неделя, 3 дн. назад.

  • Автор
    Сообщения
  • #5620
    @admin

    Подробно понятие матриц и операции транспонирования описаны в теме «Матрицы. Понятие. Применение«. Кратко — операция транспонирования должна выполнить «поворот» матрицы — замену строк столбцами.

    Если исходная матрица состоит из N строк и M столбцов — то транспонированная должна содержать M строк и N столбцов. Если у вас выделена память под такие матрицы — то для транспонирования осталется выполнить:

    for(size_t i = 0; i < n; i++)
      for(size_t j = 0; j < m; j++)
        transposed[j][i] = source[i][j];

    Вся программа, включая выделение, освобождение памяти, а также вывод матрицы на экран тогда могла бы выглядеть так:

    #include <iostream>
    using namespace std;
    
    // функция вывода матрицы на экран
    void print (int** array, size_t n, size_t m) {
      for(size_t i = 0; i < n; i++) {
        for(size_t j = 0; j < m; j++) {
          cout << array[i][j] << " ";
        }
        cout << endl << endl;
      }
    }
    
    // выделение памяти под матрицу
    int** alloc_matrix (size_t n, size_t m) {
      int **array = new int*[n];
      for (size_t i = 0; i < n; ++i) {
        array[i] = new int [m];
      }
      return array;
    }
    
    void free_matrix(int **array, size_t n, size_t m) {
      for (size_t i = 0; i < n; ++i) {
        delete[] array[i];
      }
      delete[] array;
    }
    
    int main() {
      size_t n = 5, m = 6;
    
      int **source = alloc_matrix(n, m);
      int **transposed = alloc_matrix(m, n);
    
      // заполнение исходной матрицы
      for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < m; ++j) {
          source[i][j] = i*n+j; //
        }
      }
    
      cout << "source matrix: " << endl << endl;
      print(source, n, m);
      cout << endl;
    
      // транспонирование
      for(size_t i = 0; i < n; i++)
        for(size_t j = 0; j < m; j++)
          transposed[j][i] = source[i][j];
    
       cout << "transposed matrix: " << endl << endl;
       print(transposed, m, n);
       cout << endl;
    
       free_matrix(source, n, m);
       free_matrix(transposed, m, n);
    }

    Результаты работы:

Для ответа в этой теме необходимо авторизоваться.