Умножение матриц с использованием одномерных массивов в 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]

Вы можете повторить эту технику, используя разные значения для разных матриц.

Другие вопросы по тегам