PROGRAM MultiplyMatrix2Vector; // произведение матрицы на вектор. // R[m] = A[m,n]*B[n]
const row = 2; col = 3; type matrix = array[1..row, 1..col] of byte; vect_mul = array[1..col] of byte; // вектор на который умножаем vect_res = array[1..row] of byte; // вектор с произведением
var A:matrix := ( (3, 7, 5), (1, 0, 4) ); //матрица B:vect_mul := ( 1, 2, 3 ); // вектор на который умножаем R:vect_res; // вектор с произведением
// m: количество рядов n: количество столбцов function mulMatVec(n,m:byte; var MX:matrix; var VR:vect_mul):vect_res; var i,j:byte; r:vect_res; begin for i:=1 to m do for j:=1 to n do R[i]:=R[i] + MX[i,j] * VR[j];
mulMatVec := R; end;
BEGIN writeln('Матрица: ', A); writeln('Вектор: ', B);
// PascalABC.NET 3.3, сборка 1607 от 31.12.2017 // Внимание! Если программа не работает, обновите версию!
procedure MV(a:array[,] of integer; b,c:array of integer); begin for var i:=0 to b.Length-1 do c[i]:=a.Row(i).Zip(b,(p,q)->p*q).Sum; end;
begin var a:array[,] of integer:=((2,4,0),(-2,1,3),(-1,0,1)); var b:array of integer:=(1,2,-1); Writeln('Матрица A'); a.Println(3); Write('Вектор B: '); b.Println; var c:=new integer[3]; MV(a,b,c); Write('Вектор С: '); c.Println end.