Умножение матриц с использованием одномерных массивов в C
У меня были некоторые проблемы с умножением матрицы (в виде двух одномерных массивов) в C. Никакие переменные не могут быть созданы или удалены.
Правильный результат должен быть: http://s32.postimg.org/nrkigh2l1/IMG_20160516_183316.jpg
Циклы печати должны быть правильными.
#include <stdio.h>
void main(){
unsigned int m = 3; // first matrix number of rows
unsigned int n = 2; // first matrix number of columns
unsigned int k = 4; // second matrix number of columns
short int mat1[] = { -1,-2, 4, 5, 4, -2 }; // first matrix (3x2)
short int mat2[] = { 2, 0, 0, 0, 0, 2, 0, 0 }; // second matrix 2x4)
int mat3[1024]; // final matrix (3x4)
// printing final matrix
unsigned int i, j, h;
printf("Final matrix:\n");
for (i = h = 0; i < m; i++){
for (j = 0; j < k; j++, h++)
printf("%6d ", mat3[h]);
printf("\n");
}
}
1 ответ
Другие показали, как умножать матрицы разных размеров. Все, что вам нужно сделать, это преобразовать код для доступа к 1D-вектору в виде 2D-матрицы.
Итак, учитывая [гипотетическую] матрицу:
#define XDIM 10
#define YDIM 5
int mtx[YDIM][XDIM];
Чтобы преобразовать это в вектор:
int vec[YDIM * XDIM];
Для доступа к элементу вместо:
mtx[ypos][xpos]
Использование:
vec[(ypos * XDIM) + xpos]
Вы можете повторить эту технику, используя разные значения для разных матриц.