Написать процедуру с параметрами, обеспечивающую умножение матрицы на вектор

kassssseta kassssseta    1   15.09.2019 06:10    1

Ответы
JHope23 JHope23  07.10.2020 16:22
Сама процедура занимает 5 строчек.

// 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.

Написать процедуру с параметрами, обеспечивающую умножение матрицы на вектор
ПОКАЗАТЬ ОТВЕТЫ
Denchik01TURBO Denchik01TURBO  07.10.2020 16:22
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);

R := mulMatVec(3, 2, A, B);

writeln('Произведение: ', R);
END.
Написать процедуру с параметрами, обеспечивающую умножение матрицы на вектор
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика