Матрицы. Тексты программ

Материал из Вики проекта 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.

Ссылки