Код | program NormOfMatrix;
const MAX_ROWS = 10;{максимальное количество строк в матрице} MAX_COLS = 10;{максимальное количество столбцов в матрице}
type TMatrix = array[ 1..MAX_ROWS, 1..MAX_COLS ] of real;{тип матрица вещественных чисел}
procedure InputMatrix( var Matrix : TMatrix; iRows, iCols : integer ); {процедура ввода матрицы Matrix размерности iRows на iCols} var i, j : integer;{счетчики} begin for i := 1 to iRows do{для каждой строки матрицы} begin for j := 1 to iCols - 1 do{для каждого элемента строки, кроме последнего} read( Matrix[ i ][ j ] );{читаем элемент матрицы} readln( Matrix[ i ][ iCols ] );{читаем последний элемент строки матрицы с переводом курсора на новую строку} end end;
procedure PrintMatrix( var Matrix : TMatrix; iRows, iCols : integer ); {процедура печати матрицы Matrix размерности iRows на iCols} var i, j : integer;{счетчики} begin for i := 1 to iRows do{для каждой строки матрицы} begin for j := 1 to iCols do{для каждого элемента строки} write( Matrix[ i ][ j ]:5:2,' ' );{печатаем элемент матрицы с форматированием} writeln;{переводим курсор на новую строку} end; end;
function GetNorm( var Matrix : TMatrix; iRows, iCols : integer ) : real; {функция возвращает норму матрицы Matrix размерности iRows на iCols} {Норма матрицы = максимуму по строкам из квадратного корня суммы квадратов элементов строки} var i, j : integer;{счетчики} fRes, fSum : real;{fSum - текущий результат для очередной строки, fRes - резуьтат} begin fRes := 0.0;{инициализация}
for i := 1 to iRows do{для каждой строки} begin fSum := 0.0;{инициализация} {далее считаем сумму квадратов элементов строки} for j := 1 to iCols do fSum := fSum + sqr( Matrix[ i ][ j ] ); fSum := sqrt( fSum );{вычисление корня} if( fSum > fRes ) then{если текущий результат больше запомненного ранее, то запоминаем новое значение} fRes := fSum; end; GetNorm := fRes;{возврат результата} end;
var iRows, iCols : integer;{переменные отвечающие за размерность матрицы} Matrix : TMatrix;{собственно матрица}
begin {ввод количества строк в матрице, если ввели неверное значение просим переввести} repeat writeln( 'Please enter rows number:' ); readln( iRows ); if( ( iRows <= 0 ) or ( iRows > MAX_ROWS) ) then writeln( 'Rows number must be in [ 1..', MAX_ROWS, ' ].' ); until( ( iRows > 0 ) and ( iRows <= MAX_ROWS ) );
{ввод количества столбцов в матрице, если ввели неверное значение просим переввести} repeat writeln( 'Please enter columns number:' ); readln( iCols ); if( ( iCols <= 0 ) or ( iCols > MAX_COLS ) ) then writeln( 'Columns number must be in [ 1..', MAX_COLS, ' ].' ); until( ( iCols > 0 ) and ( iCols <= MAX_COLS ) );
writeln( 'Please enter matrix [ ', iRows, 'x', iCols, ' ]:' );
InputMatrix( Matrix, iRows, iCols );{ввод матрицы}
writeln( 'Source matrix:' );
PrintMatrix( Matrix, iRows, iCols );{печать исходной матрицы}
{вывод результата} writeln( 'Norm of matrix = ', GetNorm( Matrix, iRows, iCols ):5:2 );
readln;{ожидание ввода}
end.
|
|