for(int i=0; i < n; ++i){
//Find the leading element in a+M*i
if(!find_leading_element((a+M*i),n-i,m,&rowLead,&columnLead)){
return;
}
//Get the dividable from a[rowLEad][columnLead]
divide = (double)1/a[rowLead][columnLead];
printf("The divide from current matrix is %d\n\n",divide);
//Swap the current row = i with rowLead in matrix a+M*i
swap_rows((a+M*i),n-i,m,i,rowLead);
}
Я работаю над небольшим школьным проектом по уменьшению матриц, но у меня есть некоторые проблемы при передаче 2D-массива со смещением.
Мне нужно find_leading_element
, чтобы получить двумерный массив и вернуть через указатели строку и столбец ведущего элемента в этой матрице.
Следовательно, find_leading_element
возвращает строку и столбец относительно матрицы, которую он получил, и все в порядке, я буду обрабатывать это позже.Теперь проблема заключается в передаче двумерного массива со смещением строки.
Так что с каждой итерацией я буду проходить матрицу, но с одной строкой меньше.Поскольку я не могу изменить объявление для find_leading_element
, мне нужно передать функцию с double a[][M]
, значит ли это, что она передается по значению?
bool find_leading_element(double a[][M], int n, int m, int * row, int * column) {
printf("In Find Leader got the matrix\n");
print_matrix((double (*)[M])a,n,m);
for(int i=0; i < m; ++i){
for(int j=0; j < n; ++j){
if(*(&a[0][0]+j*M+i) != 0){
*row = j;
*column = i;
return true;
}
}
}
return false;
}
double a[N][M];
printf("Enter matrix:\n");
if (!read_matrix((double (*)[M]) a, n, m)) {
printf("Invalid matrix!\n");
return ERROR;
}
Каков наилучший способ сделать это?То, как я это делаю, на второй итерации получает только одну строку.