Дано:Расщепление 2D массив в массив небольших 2D массивов в C
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
Я хочу, чтобы разделить 2d массив (структура матрицы) в массив структур MATRIX дано chunksize CS: предположим, CS быть 2, ответ будет
Seg[0]:
1 2
1 2
1 2
Seg[1]:
3 4
3 4
3 4
....
Seg[3]:
7 8
7 8
7 8
Вот мой Матрица Struct:
typedef struct MATRIX {
int nrow;
int ncol;
int **element;
} MATRIX;
и здесь функция в отделяет им:
void SegmentMatrix(MATRIX input,MATRIX* segs,int Chunksize, int p) {
int i,j,r;
//Allocate segs
for (i = 0; i<p;i++)
{
CreateMatrix(&(segs[i]),input.nrow ,Chunksize,0);
}
//Now Copy the elements from input to the segs
//where seg0 takes from 0 to cs cols of a, and all their rows, and seg1 takes from cs to 2cs ...
printf("Stats:\n\t P: %d\t CS: %d\n",p,Chunksize);
for (r = 0; r<p; r++) {
for (i = 0; i<input.nrow;i++) {
for (j = r*Chunksize; j<r*Chunksize+Chunksize-1; j++) {
//I tried (&(segs[r]))->element... Doesn't work, produces wrong data
segs[r].element[i][j] = input.element[i][j];
}
}
PRINTM(segs[r]);
}
}
Обратите внимание, что PRINTM в основном печатает матрицу, она знает пределов, проверяя Segs [г] .nrow и Ncol и CreateMatrix принимает следующие входы (& матрица, количество строк, количество колонок, filltype) и mallocs изнутри.
filltype:
0- generates zeroth matrix
1- generates identity
else A[i][j] = j; for simplicity
Проблема заключается в том, что если я печатать матрицы Segs [я], все они сводятся с их значения по умолчанию задается CreateMatrix, а не вновь добавленных стоимостей.
ОК, так что если вы, ребята, проверите этот последний PRINTM в функции SegmentMatrix, он выведет матрицы, как если бы петли не произошли, ака, я могу удалить циклы for и получить тот же результат. . сделал я что-то неправильно в этой строке (взято из SegmentMatrix)
Segs[r].element[i][j] = input.element[i][j];
Где бы вы поделили свой призыв к PRINTM, чтобы отобразить ошибочный ввод? Я хотел бы видеть, что в вашем вышеуказанном коде вызвали код, чтобы убедиться, что это не тележка перед проблемой типа лошади. –
Если вы посмотрите на последний оператор в SegmentMatrix, вы увидите PRINTM, он отобразит значения по умолчанию для segs, как будто целое для циклов не произошло. – zellwwf
@MichaelDorgan надеется, что это объясняет. – zellwwf