2013-03-04 2 views
2

Я пытаюсь объединить одну и ту же матрицу в C, и единственная идея, которая перешла мне на ум, - это дополнение, но это не сработает. Например, если у меня есть: {1,1;2,2}, моя новая матрица должна быть {1,1,1,1;2,2,2,2}. Я хочу удвоить количество строк. Я Googled, но я ничего не нашел.Объединить две матрицы в C

Вот мой код:

matrix2=realloc(matrix1,sizeof(int*)*(row)); 
int i,j; 
for(i=0;i<row;i++){ 
    for(j=0;j<col;j++){  
    matrix2[i][j]=matrix1[i][j]+matrix1[i][j]; 
    } 
} 
+0

Вы имеете в виду, что у вас есть одна матрица, и вы хотите ... удвоить размер строк? – Mike

+0

точно ... новая матрица, которую я выделил с realloc – israell

+1

в этом коде, я могу заметить, что это 'matrix2 [i] [j] = matrix1 [i] [j] + matrix1;' проблематично? –

ответ

2

Используйте psuedocode я обеспечиваю ниже. Обратите внимание, что для любых C до C99, вы не можете создать экземпляр массивов с int matrix[2*W][H] (если Ш и не является #define с)

Given matrix1 and matrix 2 of equal W,H 
make matrix3 of 2*W,H 
for h to H 
    for i to W 
     matrix3[h][i] = matrix1[h][i] 
     matrix3[h][i+W] = matrix2[h][i] 

Изготовлением матрицы потребуют 1 таНоса для каждой строки, плюс 1 таНос хранить массив строки указатели.

Обратите внимание, что вам понадобятся два назначения в цикле вместо того, которое у вас было раньше. Это происходит потому, что вы устанавливаете в двух местах.

+0

Ваше первое предложение нуждается в уточнении. – StoryTeller

+0

@StoryTeller Спасибо. Это лучше? –

+0

фактически нет. Вы * можете * объявить 2d-массив, если 'W' и' H' являются константами времени компиляции. См. Здесь http://ideone.com/byYkYX – StoryTeller

1

Звучит так, будто у вас есть фон с языками более высокого уровня, такими как matlab. В C оператор плюс не объединяет матрицы. Это добавит значения в матрицы и сохранит новое значение в новой матрице.

1

Здесь мы копируем входную матрицу в новую матрицу дважды

для (INT I = 0; я < м; я ++) {для (Int J = 0, J < N; j ++) {MAT2 [i] [j] = mat [i] [j];}

для (int i = 0; i < m; i ++) {для (int j = n; j < (2 * n); j ++) {mat2 [i] [j] = mat [i] [jn];}}

Смежные вопросы