Матрицы. Тексты программ
Материал из Вики проекта PascalABC.NET
Общая часть
Во всех задачах будем считать, что матрица описана следующим образом:
const SzM = 10; SzN = 10; type Matrix = array [1..SzM,1..SzN] of integer;
Кроме того, во всех задачах будем использовать следующие процедуры для заполнения и вывода:
procedure FillMatrixByRandom(var a: Matrix; m,n: integer); // Заполнение случайными begin for var i:=1 to M do for var j:=1 to N do a[i,j] := Random(10); end; procedure PrintMatrix(const a: Matrix; m,n: integer); // Вывод матрицы begin for var i:=1 to M do begin for var j:=1 to N do write(a[i,j]:4); writeln; end; end;
Данные участки кода следует писать в начале каждой программы, приводимой в этом пункте.
Заполнение матрицы случайными числами и вывод
var a: Matrix; begin var m := 4; var n := 5; FillMatrixByRandom(a,m,n); writeln('Элементы матрицы: '); PrintMatrix(a,m,n); end.
Перемена местами двух строк
var a: Matrix; begin var m := 5; var n := 9; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); var k1 := 2; // поменять местами строки с номерами k1 и k2 var k2 := 4; for var j:=1 to n do Swap(a[k1,j],a[k2,j]); writeln('Преобразованная матрица: '); PrintMatrix(a,m,n); end.
Поиск минимумов в строках
var a: Matrix; mins: array [1..SzN] of integer; begin var m := 5; var n := 9; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); for var i:=1 to m do begin var min := a[i,1]; for var j:=2 to n do if a[i,j]<min then min := a[i,j]; mins[i] := min; end; writeln('Минимумы в строках: '); for var i:=1 to m do write(mins[i]:4); end.
Поиск максимумов в столбцах
var a: Matrix; maxs: array [1..SzN] of integer; begin var m := 5; var n := 9; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); for var j:=1 to n do begin var max := a[1,j]; for var i:=2 to m do if a[i,j]>max then max := a[i,j]; maxs[j] := max; end; writeln('Максимумы в столбцах: '); for var j:=1 to n do write(maxs[j]:4); end.
Поиск сумм в строках
var a: Matrix; sums: array [1..SzM] of integer; begin var m := 4; var n := 5; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); for var i:=1 to m do begin var sum := 0; for var j:=1 to n do sum += a[i,j]; sums[i] := sum; end; writeln('Суммы в строках: '); for var i:=1 to m do write(sums[i]:4); end.
Поиск произведений в столбцах
var a: Matrix; products: array [1..SzN] of integer; begin var m := 3; var n := 4; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); for var j:=1 to n do begin var p := 1; for var i:=1 to m do p *= a[i,j]; products[j] := p; end; writeln('Произведения в столбцах: '); for var j:=1 to n do writeln(products[j]:4); end.
Наличие нуля в матрице
var a: Matrix; HasZero: boolean; label 1; begin var m := 3; var n := 4; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); HasZero := False; for var i:=1 to m do for var j:=1 to n do if a[i,j]=0 then begin HasZero := True; goto 1; end; 1: if HasZero then writeln('В матрице есть нули') else writeln('В матрице нулей нет') end.
Сумма чисел на главной диагонали
var a: Matrix; sum: integer; begin var m := 5; var n := m; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); sum := 0; for var i:=1 to m do sum += a[i,i]; writeln('Сумма элементов главной диагонали: ',sum); end.
Сумма чисел на побочной диагонали
var a: Matrix; sum: integer; begin var m := 5; var n := m; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); sum := 0; for var i:=1 to m do sum += a[i,m-i+1]; writeln('Сумма элементов побочной диагонали: ',sum); end.
Заполнение нулями ниже главной диагонали
var a: Matrix; sum: integer; begin var m := 5; var n := m; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); for var i:=2 to m do for var j:=m-i+2 to m do a[i,j] := 0; writeln('Преобразованная матрица: '); PrintMatrix(a,m,n); end.
Заполнение нулями выше побочной диагонали
var a: Matrix; sum: integer; begin var m := 5; var n := m; FillMatrixByRandom(a,m,n); writeln('Исходная матрица: '); PrintMatrix(a,m,n); for var i:=1 to m-1 do for var j:=i+1 to m do a[i,j] := 0; writeln('Преобразованная матрица: '); PrintMatrix(a,m,n); end.
