Рассмотрим реализацию матрицы вещественных чиселразмера m строк на n столбцовпри помощи линейного массива,в котором хранятся сначала элементы нулевой строки матрицы,затем первой, второй и т.д., в конце - элементы (m-1)-й строки: int m, n; // Размеры матрицы: число строк, столбцов . . . double* a = new double[m*n]; // a[i*n + j] -- элемент i-й строки и j-го столбца
Правильно ли работает следующая функция транспонированияматрицы, при выполнении которой строки матрицы должны статьстолбцами, столбцы - строками, а матрица размераm на nпревратиться в матрицу размераn на m?void transp(double* a, int m, int n) { for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { int idx0 = i*n + j; int idx1 = j*m + i; if (idx0 < idx1) { // Меняем местами 2 элемента double tmp = a[idx0]; a[idx0] = a[idx1]; a[idx1] = tmp; } } }}
(Отметьте один правильный вариант ответа.)
Варианты ответа
Функция работает во всех случаях правильно.
Функция работает правильно только для квадратных матриц и для матриц, в которых либо число строк, либо число столбцов равно единице. (Верный ответ)
Функция работает правильно только для квадратных матриц.