C/C++

Как передать матрицу размером n в процедуру? C++

Здравствуйте. Уже как только не пробовал. Не получается передать матрицу в процедуру. Вроде делаю как в разных примерах с форумов, но компилятор постоянно на что-то ругается. Пишу в xcode, но и в других компиляторах выдает ошибки. Сейчас остановился на таком варианте, но моя функция main не видит процедуру. Может кто-то подскажет что делать?
Спасибо!
 #include  
#include
#include
#include
using namespace std;
void sorted(int n, int A[][n]) {
for (int i=0;i
Хочешь нормальную матрицу, которую можно нормально передать - забудь про Сишную имитацию массивов и используй механизмы именно C++:

Объявление:
 vector A(n, vector(n)); 
Сортировка:
 void sorted(
Вова Юдин
Вова Юдин
66 465
Лучший ответ
 #include  
#include
#include
#include

constexpr size_t n = 15;

using namespace std;
using matrix_t = array;

size_t input_rank(const char* msg) {
size_t value = -1;
while (value < 2 || value > n) {
if (value != -1) {
cout
Очень странно, почему про один из простейших способов никто не написал. Вот пример пузырьковой сортировки строк квадратной матрицы по возрастанию, в которой двумерный динамический массив нормально передаётся как параметр обеих функций - и той, которая сортирует строки, и той, которая печатает матрицу:
 #include  
#include
#include
#include
using namespace std;
void print(string s, int **A, int n)
{
int i, j;
cout b >> n;
srand(time(nullptr));
int **A = new int *[n];
for (i = 0; i < n; ++i)
{
A[i] = new int[n];
for (j = 0; j < n; ++j)
A[i][j] = a + rand() % (b + 1 - a);
}
print("Matrix A:", A, n);
bubble(A, n);
print("Matrix A after sorting rows in ascending order:", A, n);
for (i = 0; i < n; ++i) delete[] A[i];
delete[] A;
cin.get();
cin.get();
return 0;
}

И ещё можно несколько поправить передачу данных в функцию. И статический массив здесь тоже вполне подойдёт вместо динамического. А такие вещи, как A[n][n], то есть двумерный массив изменяемой длины, - это вообще нестандарт! Зачем он здесь нужен, да ещё как параметр функции?
Векторы (и другие контейнеры) бывают намного удобнее массивов и облегчают жизнь программистов, но работа кода с ними не быстрее и создание самого такого кода с этими контейнерами типа вектор тоже не обязательно быстрее.
Дмитрий Лосев
Дмитрий Лосев
66 572
Так как у вас n ограничено 15-тями, то можете смело задавать массив А как
int A[15][15]; (примерно 900 байт в стеке - не ардуино же)
Тоже самое в функции: void sorted (int n, int A[][15]);
тоесть сразу на максимальный размер. Даже если вы введете n меньше, на работоспособность это не повлияет.

А если именно ваша попытка с int A[][ n ] - то поможет шаблонный метод. Тогда даже не нужно n передавать в функцию (если размер матрицы соответствует n и матрица всегда квадратная)
 template  
void sorted (int A[][ n ]) {код функции такой же}
переменная int n определится автоматически.
соответственно вызов фунции без n:
 sorted (A); 
n же неизвестна при компиляции
попробуйте заменить в коде n на число и тогда функция скомпилируется. хотя это не решение.
используйте векторы. это быстрее
Mix-Figh M-1 Chempion-Ship
Mix-Figh M-1 Chempion-Ship
25 445
Роберт Галимов Векторы - не быстрее. Векторы позволяют не отвлекаться на микроуправление памятью.

Похожие вопросы