| Код | program ScalarMult;
const N = 2;{константа - размерность}
type TVector = array[ 1..N ] of integer;{тип - вектор} TMatrix = array[ 1..N, 1..N ] of integer;{тип - матрица}
procedure InputVector( var vector : TVector ); {процедура ввода вектора} var i : integer;{счетчик} begin for i := 1 to N - 1 do{для каждого элемента вектора, кроме последнего} read( vector[ i ] );{читаем очередной элемент} readln( vector[ N ] );{читаем последний элемент с переходом на следующую строку} end;
procedure PrintVector( var vector : TVector ); {процудура печати вектора} var i : integer;{счетчик} begin for i := 1 to N - 1 do{для каждого ээлемента вектора, кроме последнего} write( vector[ i ], ' ' );{печатаем очередной элемент и разделитель - пробел} writeln( vector[ N ] );{печатаем последний элемент с переходом на новую строку} end;
procedure InputMatrix( var matrix : TMatrix ); {процедура ввода матрицы} var i, j : integer;{счетчики} begin for i := 1 to N do{для каждой строки матрицы} begin for j := 1 to N - 1 do{для каждого элемента строки, кроме последнего} read( Matrix[ i ][ j ] );{читаем очередной элемент матрицы} readln( Matrix[ i ][ N ] );{читаем последний элемент строки с переходом на новую строку} end; end;
procedure PrintMatrix( var matrix : TMatrix ); {процедура печати матрицы} var i, j : integer;{счетчики} begin for i := 1 to N do{для каждой строки матрицы} begin for j := 1 to N - 1 do{для каждого элемента строки, кроме последнего} write( matrix[ i ][ j ], ' ' );{печатаем очередной элемент и разделитель - пробел } writeln( matrix[ i ][ N ] );{печатаем последний элемент строки с переходом на новую строку} end; end;
procedure MultiplyMatrixByVector( var resultVector : TVector; matrix : TMatrix; vector : TVector ); {процедура заполняет вектор resultVector результатом произведения матрицы matrix на вектор vector} var i, j : integer;{счетчики} begin for i := 1 to N do{для каждой строки матрицы} begin resultVector[ i ] := 0;{инициализация очередного компонента вектора} for j := 1 to N do{для каждого элемента строки} {суммируем с произведением элемента матрицы и компонента вектора} resultVector[ i ] := resultVector[ i ] + matrix[ i ][ j ] * vector[ j ]; end; end;
function GetScalarProduct( var vectorA, vectorB : TVector ) : integer; {функция вычисляет скалярное произведение векторов vectorA и vectorB} var i : integer;{счетчик} begin GetScalarProduct := 0;{инициализация результата} for i := 1 to N do GetScalarProduct := GetScalarProduct + vectorA[ i ] * vectorB[ i ];{суммируем результат с произведением соответствующих компонентов векторов} end;
var x, y, res : TVector;{x, y - вводимые вектора, res - вспомогательный вектор} A, B : TMatrix;{A, B - вводимые матрицы} begin {ввод матриц} writeln( 'Рожалуйста введите матрицу A( ', N, ' x ', N, ' ):' ); InputMatrix( A ); writeln( 'Рожалуйста введите матрицу B( ', N, ' x ', N, ' ):' ); InputMatrix( B );
{ввод векторов} writeln( 'Пожалуйста введите вектор x из ', N, ' компонентов : ' ); InputVector( x ); writeln( 'Пожалуйста введите вектор y из ', N, ' компонентов : ' ); InputVector( y );
{печать исходных данных} writeln; writeln( 'Исходные данные' );
writeln( 'Матрица A:' ); PrintMatrix( A ); writeln( 'Матрица B:' ); PrintMatrix( B ); writeln( 'Вектор x:' ); PrintVector( x ); writeln( 'Вектор y:' ); PrintVector( y );
{печать промежуточных вычислений - векторов} writeln; writeln( 'Промежуточные вычисления' );
MultiplyMatrixByVector( res, A, x ); x := res; writeln( 'Вектор (Ax):' ); PrintVector( res ); MultiplyMatrixByVector( res, B, y ); y := res; writeln( 'Вектор (By):' ); PrintVector( res );
{печать результата - скалярного произведения} writeln; writeln( 'Результат' ); writeln( '(Ax)*(By)=', GetScalarProduct( x, y ) ); readln;{ожидаем ввода} end.
|
|