Матрицы. Тексты программ: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Нет описания правки
 
(не показано 14 промежуточных версий этого же участника)
Строка 1: Строка 1:
__NOTOC__
===Общая часть===
===Общая часть===
Во всех задачах будем считать, что матрица описана следующим образом:
Во всех задачах будем считать, что матрица описана следующим образом:
Строка 12: Строка 13:
   for var i:=1 to M do  
   for var i:=1 to M do  
   for var j:=1 to N do  
   for var j:=1 to N do  
     a[i,j] := Random(100);
     a[i,j] := Random(10);
end;
end;


Строка 41: Строка 42:


===Перемена местами двух строк===
===Перемена местами двух строк===
<source lang="Delphi">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. 
</source>
===Поиск минимумов в строках===
===Поиск минимумов в строках===
<source lang="Delphi">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.</source>
===Поиск максимумов в столбцах===
===Поиск максимумов в столбцах===
<source lang="Delphi">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.</source>
===Поиск сумм в строках===
===Поиск сумм в строках===
<source lang="Delphi">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.</source>
===Поиск произведений в столбцах===
===Поиск произведений в столбцах===
===Поиск элемента в матрице===
<source lang="Delphi">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.</source>
 
===Наличие нуля в матрице===
<source lang="Delphi">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.</source>
 
===Сумма чисел на главной диагонали===
===Сумма чисел на главной диагонали===
<source lang="Delphi">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.</source>
===Сумма чисел на побочной диагонали===
===Сумма чисел на побочной диагонали===
===Заполнение нулями ниже/выше главной диагонали===
<source lang="Delphi">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.</source>
 
===Заполнение нулями ниже главной диагонали===
<source lang="Delphi">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.</source>
 
===Заполнение нулями выше побочной диагонали===
<source lang="Delphi">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.</source>


== Ссылки ==
== Ссылки ==
[[Программы для начинающих]]
*[[Программы для начинающих]]
*[http://pascalabc.net/ru/programmyi-i-algoritmyi-dlya-nachinayuschih.html Сайт PascalABC.NET: Программы и алгоритмы для начинающих]

Текущая версия от 15:51, 19 января 2010

Общая часть

Во всех задачах будем считать, что матрица описана следующим образом:

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.

Ссылки