|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.10.2019, 12:21 | #1 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
[C++] Передать матрицу любой размерности как параметр функции в С++
Наверное, в помощи студентам будет в самый раз - хоть давно уже не студент, но С++ только начал, так что вопрос, наверное, наивный
Делаю небольшую задачку по вычислению обратной матрицы. Для этого мне надо вычислять детерминанты как самой матрицы, так и ее миноров. Написал функцию, вычисляющую детерминант, и столкнулся с неожиданной проблемой: хотелось бы, чтобы ее можно было натравить на любую квадратную матрицу, переданную как параметр. Но с этим в С++, похоже, есть сложности. Порылся в гугле, нарыл несколько хитрых решений, остановился на таком вот понравившемся и вроде простом: const int N=5; int mas[5][5]={{1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}}; … void Transdet(int k, int (& mas)[N][N]); Вроде бы все работало с исходной матрицей. Но когда попытался потом посчитать с ее помощью минор, работать отказалась – напрягши моск, пришел к выводу, что из-за несовпадения размерности, минор-то меньше исходной матрицы. Если задавать размерность как константу или просто прописывать размерность в скобках явно, можно передавать любую матрицу этой же размерности. Можно ли тут как-то схитрить или такой способ для массивов разной размерности не годится в принципе? Если это важно, сама функция еще и вызывается рекурсионно. Конечно, можно втулить две отдельных одинаковых функции, одну для матрицы, другую для ее миноров, но как-то неизящно будет В общем, надеюсь, знатоки присоветуют какой-то не сильно сложный способ решения. Последний раз редактировалось archerix; 24.10.2019 в 12:48. |
25.10.2019, 11:45 | #2 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Отвечу сам - как вариант, описываем матрицу для миноров в полном размере, а вместе с матрицей в функцию передаем отдельный параметр, указывающий, что считать ее надо "не до конца".
Но другие варианты тоже интересно было бы узнать. Последний раз редактировалось archerix; 25.10.2019 в 11:47. |
25.10.2019, 11:53 | #3 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Передавать указатель и размеры, написать свою обертку или взять вектор из стл, glm и т.д.
|
25.10.2019, 12:06 | #4 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Пока что мне это ничего не говорит, но я почитаю
|
25.10.2019, 12:16 | #5 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Первый пункт - это вот так вот? Нашел в тырнете.
template <int row, int col> void funArray(int (&arr)[row][col]) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) cout << arr[i][j] << " "; cout << endl; } } |
25.10.2019, 12:33 | #6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Причем тут шаблоны?
Код:
|
25.10.2019, 12:41 | #7 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Значит, ошибся по незнанию Но оно исправно передает любую матрицу и выглядит не слишком сложным в применении
С этим способом тоже разберусь, спасибо. Код:
|
25.10.2019, 12:43 | #8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
|
25.10.2019, 12:47 | #9 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Почитаем теорию
А какой способ лично вы считаете оптимальным - тот, что в вашем примере? |
26.10.2019, 07:48 | #10 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 960
|
archerix, вектора достаточно. Для неквадратной матрицы - вектор и длина строки
std::vector<int> m_matrix; если не разберёшься - скинь скайп в ЛС, объясню |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Написать программу, которая создает динамическую матрицу размерности A[nxn] | Ivanrik | Общие вопросы C/C++ | 0 | 25.11.2018 09:03 |
сгенерировать матрицу размерности М х К из случайных вещественных чисел из интервала [-25,40] | AVIM | Общие вопросы C/C++ | 1 | 12.02.2016 23:00 |
Как передать параметр функции в const? | Mik92 | Общие вопросы Delphi | 8 | 01.12.2014 16:56 |
Заполнить матрицу Р размерности m x n значениями элементов вектора Q размерности k = m x n | Olevander | Помощь студентам | 0 | 23.11.2014 10:09 |
функция, способная сгенерировать массив любой размерности. | papapapokerface | Общие вопросы C/C++ | 2 | 03.06.2010 14:33 |