Умножение матриц

Задача

Три продавца продают четыре вида товаров. Количество продаваемого товара сведено в таблицу A.

Решение

В таблице B представлены цена каждого товара и комиссионные (наценка), получаемые от продажи.

Схема умножения матриц

 

Вырученные от продажи деньги подсчитываются так:
1-й продавец: 5 * 20.30 + 3 * 18.60 + 7 * 12.10 + 0 * 23.00 = 242.00
2-й продавец: 7 * 20.30 + 1 * 18.60 + 9 * 12.10 + 2 * 23.00 = 315.60
3-й продавец: 3 * 20.30 + 4 * 18.60 + 7 * 12.10 + 6 * 23.00 = 358.00

А полученные комиссионные так:
1-й продавец: 5 * 1.60 + 3 * 1.30 + 7 * 1.00 + 0 * 1.80 = 18.90
2-й продавец: 7 * 1.60 + 1 * 1.30 + 9 * 1.00 + 2 * 1.80 = 25.10
3-й продавец: 3 * 1.60 + 4 * 1.30 + 7 * 1.00 + 6 * 1.80 = 27.80

Эти вычисления называются умножением матриц и записываются так, как представлено на рисунке выше.
Число столбцов таблицы A должно совпадать с числом строк таблицы B. Результирующая таблица C имеет столько строк, сколько у A, и столько столбцов, сколько у B.

Следующая программа вводит матрицы A и B, перемножает эти матрицы и затем печатает их произведение – матрицу C:

Программа на языке Паскаль: 

 

type
    atype = array[1..3,1..4] of integer;
    btype = array[1..4,1..2] of real;
    ctype = array[1..3,1..2] of real;
 
var
    a: atype; b: btype; c: ctype;
    n,i,j,k: integer;
 
begin
    for n := 1 to 3 do
        readln(a[n,1],a[n,2],a[n,3],a[n,4]);
 
    for n := 1 to 4 do
        readln(b[n,1],b[n,2]);
 
    for i := 1 to 3 do
        for j := 1 to 2 do begin
            c[i,j] := 0;
            for k := 1 to 4 do
                c[i,j] := c[i,j] + a[i,k] * b[k,j];
        end;
 
    for n := 1 to 3 do
        writeln(c[n,1]:8:2, c[n,2]:8:2);
 
readln
end.

 

Тема

Матрицы

Уровень

Комбинированные задачи

Теги

Добавить комментарий