Возможно , стоило пойти прямо и направо ,то есть два поворота в лево лишние
Type
TMatrix = array[,] of integer;
TVector = array of integer;
var
A: TMatrix;
B: TVector;
m,n,i,j: integer;
procedure CreateMulVector(A:TMatrix; var B: TVector);
var i, j: integer; f: boolean;
begin
SetLength(B, Length(A, 0));
for i := 0 to Length(A, 0) - 1 do begin
B[i] := 1; f := false;
for j := 0 to Length(A, 1) - 1 do begin
if A[i,j] > 0 then begin
f := true;
B[i] := B[i] * A[i,j];
end;
end;
if not f then B[i] := 0;
end;
end;
procedure WriteVector(B: TVector);
var i: integer;
begin
for i := 0 to Length(B) - 1 do
write(B[i]:3);
end;
begin
randomize;
n := Random(10) + 1;
m := Random(10) + 1;
SetLength(A, n, m);
writeln('Исходная матрица:');
for i := 0 to n-1 do begin
for j := 0 to m-1 do begin
A[i,j] := Random(10) - 5;
write(A[i,j]:4);
end;
writeln;
end;
CreateMulVector(A, B);
writeln('Полученный вектор:');
WriteVector(B);
<span>end.</span>
//Pascal ABC.NET 3.1 сборка 1219
begin
writeln('Array:');
var ar:=ArrRandomInteger(7,-10,10);
ar.Println;
writeln('Result:');
foreach var x in ar do
if not(odd(x)) then write(x:4);
end.
Пример работы программы:
Array:
-1 9 3 10 -4 -1 8
Result:
10 -4 8
X1=0; x2=0,2; x3=0,4; x4=0,6; x5=0,8 соответственно y1=4 ; y2=3,24 ; y3=2,56; y4=1,96 ; y5=1,44
x6=1 x7=1,2 x8=1,4 x9=1,6 x10=1,8 x11=2 соответственно y6=2 y7=2,44 y8=2,96 y9=3,56 y10=4,24 y11=5
Количество в байтах, скорость - в битах в секунду.