Как найти максимум в матрице паскаль

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
uses crt;
const nmax=6;{максимальный размер матрицы}
var a,b:array[1..nmax,1..nmax] of integer;{тип матрицы}
    m,i,j:byte;
    max:integer;
begin
clrscr;
repeat
write('Размер матрицы до ',nmax,' m=');
readln(m);
until m in [1..nmax];{проверяем ввод размера, если от 1 до 6, то нормально}
writeln('Введите ',m*m,' элементов матрицы:');
for i:=1 to m do
for j:=1 to m do
 begin
  write('a[',i,',',j,']=');
  readln(a[i,j]);
 end;
clrscr;{очистим экран от ввода}
writeln('Матрица A:');
max:=a[1,1];{пусть максимальный-первый}
for i:=1 to m do
 begin
  for j:=1 to m do
   begin
    if a[i,j]>max then max:=a[i,j];{если найдем больше - он максимальный}
    write(a[i,j]:4);
   end;
  writeln;
 end;
writeln('Максимальный элемент=',max);
writeln('Матрица B:');
for i:=1 to m do
 begin
  for j:=1 to m do
   begin
    if i<>j then b[i,j]:=a[i,j]*max{если не главная диагональ, умножаем}
    else b[i,j]:=a[i,j];{если главная, просто переписываем}
    write(b[i,j]:5);
   end;
  writeln;
 end;
readln
end.

Формулировка задачи:

Дана целочисленная матрица 4х4. Найти максимальный элемент этой матрицы, результирующий элемент, вывести на экран заменяя на 0.

Код к задаче: «Найти максимальный элемент матрицы»

textual

Листинг программы

uses crt;
const n=4;
var a:array[1..4,1..4] of integer;
i,j,max:integer;
begin
clrscr;
randomize;
for i:=1 to n do
for j:=1 to n do
begin
a[i,j]:=random(10);
end;
writeln;
for i:=1 to n do
begin
for j:=1 to n do
begin
write(a[i,j]:3);
end;
writeln;
end;
max:=a[1,1];
for i:=1 to n do
for j:=1 to n do
begin
if a[i,j]>max then
max:=a[i,j];
max:=0;
end;
writeln('max = ',max);
readkey;
end.

Перейти к содержанию

Найти максимальные элементы столбцов матрицы

Просмотров 7к. Обновлено 15 октября 2021

Найти максимальный элемент каждого столбца матрицы.

При поиске наибольших элементов в столбцах внешний цикл должен перебирать столбцы, а внутренний — элементы в столбцах. Это значит, что во внутреннем цикле меняется первый индекс элемента, второй остается постоянным в рамках одной итерации внешнего цикла.

В теле внешнего цикла сначала предполагается, что наибольшим является первый элемент текущего столбца. Первый элемент каждого столбца имеет индекс строки, равный 1 (или 0 при индексации с нуля). Второй индекс — это номер столбца, определяется счетчиком внешнего цикла.

Далее в теле внешнего цикла выполняется внутренний цикл, перебирающий элементы текущего столбца, начиная со второго элемента столбца. В теле внутреннего цикла текущий элемент сравнивается с тем, что записан в переменной-максимуме. Если текущий больше, то он присваивается этой переменной.

После завершения внутреннего цикла переменная-максимум будет содержать наибольший элемент столбца, который можно вывести на экран.

Pascal


const N = 15; M = 10;
var
arr: array[1..N,1..M] of byte;
i,j,max: byte;
begin
randomize;
for i:=1 to N do begin
for j:=1 to M do begin
arr[i,j] := random(256);
write(' |',arr[i,j]:3,'| ');
end;
writeln;
end;
for i:=1 to M do
write(' ----- ');
writeln;
for j:=1 to M do begin
max := arr[1,j];
for i:=2 to N do
if arr[i,j] > max then
max := arr[i,j];
write(' ',max:3,' ');
end;
writeln;
end.



Пример(ы) выполнения программы на языке Pascal:

| 75| |230| | 21| | 95| |219| |102| | 64| |125| | 8| |132|
|190| | 73| |127| | 85| |110| |188| | 45| |108| |104| |233|
| 85| |160| | 47| |158| | 32| | 75| | 59| |149| |175| |226|
|179| |208| |239| |238| |120| | 83| |120| |135| |252| | 19|
| 33| |217| |247| | 82| | 0| |125| |190| | 53| | 87| |186|
|239| | 48| | 29| | 35| |210| | 96| | 46| | 17| |106| |225|
|232| | 1| |201| | 1| | 54| |249| | 46| |179| |122| | 58|
| 66| |190| |161| | 84| | 88| | 33| |201| | 64| | 43| | 7|
|206| |114| |196| | 4| |137| |165| | 63| |144| |183| |121|
|151| | 9| |161| |120| |197| |228| | 20| |121| |176| |217|
|109| | 19| |188| |105| |114| |230| |217| |172| |194| |127|
|138| |222| |116| |132| | 92| |105| |222| | 73| | 94| | 16|
| 30| |127| |125| | 54| |134| |240| | 75| |227| |215| | 38|
| 87| | 64| |167| |191| |212| |157| | 62| |231| |166| |177|
|184| |179| |201| | 19| |242| |185| | 31| |226| |101| |123|
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
239 230 247 238 242 249 222 231 252 233

Язык Си


#include < stdio.h>
#define N 15
#define M 10
main() {
int arr[N][M], i, j, max;
srand(time(NULL));
for (i=0; i< N; i++) {
for (j=0; j< M; j++) {
arr[i][j] = rand() % 256;
printf(" |%3d| ", arr[i][j]);
}
printf("n");
}
for (j=0; j< M; j++)
printf(" ----- ");
printf("n");
for (j=0; j< M; j++) {
max = arr[0][j];
for (i=1; i< N; i++)
if (arr[i][j] > max)
max = arr[i][j];
printf(" %3d ", max);
}
printf("n");
}

Python

найти максимальный элемент столбца матрицы Python


from random import random
N = 15
M = 10
arr = []
for i in range(N):
lst = []
for j in range(M):
lst.append(int(random() * 256))
arr.append(lst)
for i in range(N):
for j in range(M):
print(" |%3d| " % arr[i][j], end='')
print()
for i in range(M):
print(" ----- ", end='')
print()
for j in range(M):
mx = arr[0][j]
for i in range(N):
if arr[i][j] > mx:
mx = arr[i][j]
print(" |%3d| " % mx, end='')
print()

КуМир


алг
нач
цел N = 15, M = 10
целтаб t[1:N,1:M]
цел mx, i, j
нц для i от 1 до N
нц для j от 1 до M
t[i,j] := irnd(256)
вывод " |",t[i,j]:3,"| "
кц
вывод нс
кц
нц для i от 1 до M
вывод " ----- "
кц
вывод нс
нц для j от 1 до M
mx := t[1, j]
нц для i от 2 до N
если t[i,j] > mx то
mx := t[i,j]
все
кц
вывод ' ',mx:3,' '
кц
кон

Basic-256


N = 15
M = 10
dim arr(N,M)
for i=0 to N-1
for j=0 to M-1
arr[i,j] = int(rand*90)+10
print arr[i,j] + " ";
next j
print
next i
for j=0 to M-1
print "-----";
next j
print
for j=0 to M-1
max = arr[0,j]
for i=1 to N-1
if arr[i,j] > max then max = arr[i,j]
next i
print max + " ";
next j
print

К оглавлению | Назад | Вперёд

Все программы, код которых выложен здесь, являются работоспособными. На момент написания программ использовалась среда PascalABC.Net 3.0 (и 3.3).

Простые задачи[править]

Максимальные элементы столбцов матрицы[править]

const
  N = 3;
  M = 3;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  Max: array [0..M - 1] of integer;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := Random(10);
  
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
  
  for var j := 0 to M - 1 do
  begin
    Max[j] := integer.MinValue;
    for var i := 0 to N - 1 do
      if A[i, j] > Max[j] then Max[j] := A[i, j];
  end;
  
  Writeln('Максимумы:');
  for var j := 0 to M - 1 do
    Write(Max[j]:3);
end.
begin
  Print(MatrRandom(3, 3, 0, 10).Cols().Select(x -> x.Max()));
end.

Смотрите также: реализация на C#.

Смотрите также: реализация на VB.

Количество двузначных чисел с четной суммой цифр[править]

Формула, по которой можно узнать сумму цифр двузначного числа: n div 10 + n mod 10.

const
  N = 3;
  M = 3;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  C: integer;

procedure Print(); // Производит вывод матрицы.
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := Random(100);
  
  Print();
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      if (Abs(A[i, j]) >= 10) and (Abs(A[i, j]) < 100) and ((A[i, j] div 10 + A[i, j] mod 10) mod 2 = 0) then
        Inc(C);
  
  WritelnFormat('Количество двузначных чисел с четной суммой цифр равно {0}.', C);
end.

Смотрите также: реализация на С#.

Смотрите также: реализация на VB.

Наибольший по модулю элемент матрицы[править]

const
  N = 3;
  M = 3;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  Max, MaxI, MaxJ: integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := -10 + Random(20);
  
  Print();
  
  Max := 0;
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      if Abs(A[i, j]) > Max then
      begin
        Max := Abs(A[i, j]);
        MaxI := i; MaxJ := j;
      end;
  
  WritelnFormat('Наибольший по модулю элемент матрицы с индексами [{0}, {1}] равен {2}.', MaxI, MaxJ, Max);
end.

Смотрите также: реализация на C#.

Смотрите также: реализация на VB.

Поменять местами строки матрицы[править]

const
  N = 3;
  M = 3;

var
  A: array [0..N - 1, 0..M - 1] of integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := Random(10);
  
  Print();
  
  var i1 := Random(N);
  var i2 := Random(N);
  
  for var j := 0 to M - 1 do
    Swap(A[i1, j], A[i2, j]);
  
  Print();
end.

Смотрите также: реализация на C#.

Произведение элементов матрицы[править]

const
  N = 3;
  M = 3;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  Mult: integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := 1 + Random(10);
  
  Print();
  
  Mult := 1;
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      Mult *= A[i, j];
  
  WritelnFormat('Произведение элементов матрицы равно {0}.', Mult);
end.

Узнать, сколько раз встречается данное число в матрице[править]

const
  N = 3;
  M = 3;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  C, K: integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  Readln(K);
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := Random(10);
  
  Print();
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      if A[i, j] = K then
        Inc(C);
  
  WritelnFormat('Количество чисел, равных K, равно {0}.', C);
end.

Смотрите также: реализация на C#.

Запись матрицы в список по столбцам[править]

begin
  var A := MatrRandom();
  var L := new List<integer>();
  
  for var j := 0 to Length(A, 1) - 1 do
    for var i := 0 to Length(A, 0) - 1 do
      L.Add(A[i, j]);
  
  L.ToArray().Println();
end.

Количество единиц в столбце, равное номеру столбца[править]

begin
  var A := MatrFill(ReadlnInteger(), ReadlnInteger(), 0);
  
  for var j := 0 to Length(A, 1) - 1 do
    for var i := 0 to j do
      A[i, j] := 1;
  
  A.Println();
end.

4 варианта заполнения матрицы по треугольникам[править]

const
  N = 10;

var
  A: array [0..N - 1, 0..N - 1] of char;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      if (i > j) and (N - i - 1 > j) then
        A[i, j] := '+'
      else
        A[i, j] := '.';
  
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]);
    Writeln();
  end;
end.
const
  N = 10;

var
  A: array [0..N - 1, 0..N - 1] of char;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      if (i < j) and (N - i - 1 > j) then
        A[i, j] := '+'
      else
        A[i, j] := '.';
  
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]);
    Writeln();
  end;
end.
const
  N = 10;

var
  A: array [0..N - 1, 0..N - 1] of char;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      if (i < j) and (N - i - 1 < j) then
        A[i, j] := '+'
      else
        A[i, j] := '.';
  
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]);
    Writeln();
  end;
end.
const
  N = 10;

var
  A: array [0..N - 1, 0..N - 1] of char;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      if (i > j) and (N - i - 1 < j) then
        A[i, j] := '+'
      else
        A[i, j] := '.';
  
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]);
    Writeln();
  end;
end.

Арифметические прогрессии в строках матрицы[править]

const
  N = 3;
  M = 3;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  IsProgression: boolean;

begin
  for var i := 0 to N - 1 do
  begin
    WritelnFormat('Ввод {0}-ой строки:', i + 1);
    for var j := 0 to M - 1 do
      Readln(A[i, j]);
  end;
  
  IsProgression := true;
  if M > 2 then
    for var i := 0 to N - 1 do
    begin
      var D := A[i, 1] - A[i, 0];
      for var j := 2 to M - 1 do
        if A[i, j] - A[i, j - 1] <> D then
        begin
          IsProgression := false;
          break;
        end;
      if not IsProgression then break;
    end;
  
  if IsProgression then
    Writeln('Каждая строка матрицы является арифметической прогрессией.')
  else
    Writeln('Существует несколько или одна строк, которые не являются арифметическими прогрессиями.');
end.

Средняя сложность[править]

Удаление строк с нулями[править]

const
  N = 4;
  M = 5;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  Size: integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to Size - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

function HasZeros(i: integer): boolean; // Возвращает true, если i-ая строка матрицы имеет нули.
begin
  Result := false;
  var j := 0;
  while (j < M) and not Result do
  begin
    if A[i, j] = 0 then Result := true;
    Inc(j);
  end;
end;

procedure RemoveStr(n: integer); // Удаляет i-ую строку матрицы.
begin
  if Size > 0 then
  begin
    for var i := n to Size - 2 do
      for var j := 0 to M - 1 do
        A[i, j] := A[i + 1, j];
    for var j := 0 to M - 1 do
      A[Size - 1, j] := -1;
    Dec(Size);
  end;
end;

begin
  Size := N;
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := Random(10);
  
  Print();
  
  var i := 0;
  while i < Size do
    if HasZeros(i) then
      RemoveStr(i)
    else
      Inc(i);
  
  Print();
end.

Суммирование элементов строки до последнего отрицательного[править]

Суммировать положительные элементы строки до последнего отрицательного и записать в список. Если отрицательных чисел в строке нет – записать в список 0.

begin
  var Matrix := MatrRandom(5, 5, -10, 10).Print();
  var R := Matrix.Rows().ToArray();
  
  var L := new List<integer>;
  
  for var i := 0 to R.Length - 1 do
    if not R[i].Any(x -> x < 0) then
      L.Add(0)
    else
    begin
      var row := R[i].ToArray();
      L.Add(row.Where((x, index) -> (x > 0) and (index < row.FindLastIndex(x -> x < 0))).Sum());
    end;
  
  L.Println();
end.

Количество отрицательных элементов под главной диагональю[править]

const
  N = 4;

var
  A: array [0..N - 1, 0..N - 1] of integer;
  C: integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      A[i, j] := Random(10) - 3;
  
  Print();
  
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      if (i > j) and (A[i, j] < 0) then
        Inc(C);
  
  WritelnFormat('Количество отрицательных элементов под главной диагональю матрицы равно {0}.', C);
end.

Смотрите также: реализация на C#.

Смотрите также: реализация на VB.

Минимальные элементы на пересечении строк и столбцов[править]

const
  N = 3;
  M = 3;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  Min, MinI, MinJ: integer;
  Found: boolean;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := Random(100);
  
  Print();
  
  for var i := 0 to N - 1 do
  begin
    Min := integer.MaxValue;
    Found := true;
    for var j := 0 to M - 1 do
      if A[i, j] < Min then
      begin
        Min := A[i, j];
        MinI := i;
        MinJ := j;
      end;
    for var i2 := 0 to N - 1 do
      if A[i2, MinJ] < Min then
        Found := false;
    if Found then break;
  end;
  
  if not Found then
    Writeln('Минимального элемента на пересечении строк и столбцов не найдено.')
  else
    WritelnFormat('Индексы минимального элемента {0} равны [{1}, {2}].', Min, MinI, MinJ);
end.

Смотрите также: реализация на C#.

Максимальный элемент диагонали[править]

const
  N = 3;

var
  A: array [0..N - 1, 0..N - 1] of integer;
  Max: integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      A[i, j] := Random(10);
  
  Print();
  
  Max := integer.MinValue;
  for var i := 0 to N - 1 do
    if A[i, i] > Max then
      Max := A[i, i];
  
  WritelnFormat('Максимальный элемент диагонали равен {0}.', Max);
end.

Последний элемент строки матрицы – сумма всех элементов в той же строке матрицы[править]

const
  N = 3;
  M = 3;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  i, j: integer;
  S: integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:5);
    Writeln();
  end;
end;

begin
  for i := 0 to N - 1 do
    for j := 0 to M - 1 do
      A[i, j] := Random(10);
  
  Print();
  
  for i := 0 to N - 1 do
  begin
    S := 0;
    for j := 0 to M - 2 do
      Inc(S, A[i, j]);
    A[i, j + 1] := S;
  end;
  
  Print();
end.

Заполнение матрицы одним циклом[править]

const
  N = 5;

var
  A: array [0..N - 1, 0..N - 1] of integer;

procedure Print(d: integer);
begin
  for var i := 0 to Pred(N) do
  begin
    for var j := 0 to Pred(N) do
      Write(A[i, j]:d);
    Writeln();
  end;
  Writeln();
end;

begin
  for var i := 0 to Pred(Sqr(N)) do
    A[i div N, i mod N] := i;
  
  Print(4);
end.

Сложные задачи[править]

Переворот главной диагонали[править]

const
  N = 4;

var
  A: array [0..N - 1, 0..N - 1] of integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      A[i, j] := Random(10);
  
  Print();
  
  for var i := 0 to N div 2 - 1 do
    Swap(A[i, i], A[N - i - 1, N - i - 1]);
  
  Print();
  
  Readln();
end.

Переворот побочной диагонали[править]

const
  N = 4;

var
  A: array [0..N - 1, 0..N - 1] of integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      A[i, j] := Random(10);
  
  Print();
  
  for var i := 0 to N div 2 - 1 do
    Swap(A[i, N - i - 1], A[N - i - 1, i]);
  
  Print();
end.

Произведение ненулевых диагональных элементов[править]

const
  N = 4;

var
  A: array [0..N - 1, 0..N - 1] of integer;
  M: integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:3);
    Writeln();
  end;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      A[i, j] := Random(4);
  
  Print();
  
  M := 1;
  for var i := 0 to N - 1 do
    if (A[i, i] <> 0) and (i <> N div 2) then
      M *= A[i, i];
  
  for var i := 0 to N - 1 do
    if A[i, N - i - 1] <> 0 then
      M *= A[i, N - i - 1];
  
  WritelnFormat('Произведение ненулевых элементов равно {0}.', M);
end.

Заполнение матрицы по правилу[править]

Вариант 1[править]

1 0 2 0 3
0 4 0 5 0
6 0 7 0 8
const
  N = 4;
  M = 7;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  V: integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:5);
    Writeln();
  end;
end;

begin
  for var i := 0 to Pred(N) do
  begin
    for var j := 0 to Pred(M) do
      if (i + j) mod 2 = 0 then
      begin
        Inc(V);
        A[i, j] := V;
      end;
  end;
  
  Print();
end.

Вариант 2[править]

Правило заполнения:

1 2 3 4 5
2 1 2 3 4
3 2 1 2 3
4 3 2 1 2
5 4 3 2 1
const
  N = 5;

var
  A: array [0..N - 1, 0..N - 1] of integer;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:5);
    Writeln();
  end;
end;

begin
  for var d := -N + 1 to N - 1 do
    for var j := 0 to N - 1 do
    begin
      var i := j + d;
      if (i >= 0) and (i < N) then
        A[i, j] := Abs(d) + 1;
    end;
  
  Print();
end.

Смотрите также: реализация на C#.

Смотрите также: реализация на VB.

i := j + d можно рассматривать как функцию, где вместо f(x) пишется i, а вместо правой части выражения – j + d.

Вариант 3[править]

1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
const
  N = 5;

var
  A: array [0..N - 1, 0..N - 1] of real;
  Value: integer := Sqr(N);

procedure Print(d: integer);
begin
  for var i := 0 to Pred(N) do
  begin
    for var j := 0 to Pred(N) do
      Write(A[i, j]:d);
    Writeln();
  end;
  Writeln();
end;

begin
  if N mod 2 = 0 then
    for var i := Pred(N) downto 0 do
      for var j := 0 to Pred(N) do
      begin
        var f := i mod 2 <> 0;
        A[i, Ord(f) * j + Ord(not f) * (Pred(N) - j)] := Value;
        Dec(Value);
      end
  else
    for var i := Pred(N) downto 0 do
      for var j := 0 to Pred(N) do
      begin
        var f := i mod 2 = 0;
        A[i, Ord(f) * j + Ord(not f) * (Pred(N) - j)] := Value;
        Dec(Value);
      end;
  
  Print(3);
end.

Заполнение матрицы по спирали[править]

const
  N = 10;

var
  A: array [0..N - 1, 0..N - 1] of integer;
  i, j: integer;
  Count: integer;
  Value: integer;

procedure Print();
begin
  for var i1 := 0 to N - 1 do
  begin
    for var j1 := 0 to N - 1 do
      Write(A[i1, j1]:6);
    Writeln();
  end;
end;

begin
  repeat
    var b := Pred(N) - Count;
    while j <= b do
    begin
      A[i, j] := Value;
      Inc(j);Inc(Value);
    end;
    
    Inc(i);Dec(j);
    while i <= b do
    begin
      A[i, j] := Value;
      Inc(i);Inc(Value);
    end;
    
    Dec(i);Dec(j);
    while j >= Count do
    begin
      A[i, j] := Value;
      Dec(j);Inc(Value);
    end;
    
    Dec(i);Inc(j);Inc(Count);
    while i >= Count do
    begin
      A[i, j] := Value;
      Dec(i);Inc(Value);
    end;
    Inc(i);Inc(j);
  until Count > N div 2;
  Print();
end.

Транспонирование матрицы[править]

Пример транспонирования матрицы:

-1 2 4 0 7
3 -5 24 9 -3
-10 -8 -2 -4 1

преобразовать в:

-1 3 -10
2 -5 -8
4 24 -2
0 9 -4
7 -3 11
const
  N = 3;
  M = 1;

var
  MatrixA, MatrixB: array [,] of integer;

procedure Print(a: array [,] of integer);
begin
  Writeln('Матрица:');
  for var i := 0 to Length(a, 0) - 1 do
  begin
    for var j := 0 to Length(a, 1) - 1 do
      Write(a[i, j]:3);
    Writeln();
  end;
end;

begin
  SetLength(MatrixA, N, M);
  SetLength(MatrixB, M, N);
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      MatrixA[i, j] := Random(10);
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      MatrixB[j, i] := MatrixA[i, j];
  
  Print(MatrixA);
  Print(MatrixB);
end.

Сортировка столбцов матрицы по первой строке[править]

const
  N = 4;
  M = 7;

type
  TData = auto class
    Key, Index: integer;
  end;

var
  A: array [0..N - 1, 0..M - 1] of integer;
  Outcome: array [0..N - 1, 0..M - 1] of integer;
  DataArray: array [0..M - 1] of TData;

procedure Print();
begin
  Writeln('Матрица:');
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(Outcome[i, j]:3);
    Writeln();
  end;
end;

procedure Sort(l, r: integer);
begin
  var i := l;
  var j := r;
  var m := DataArray[Round((l + r) / 2)].Key;
  
  repeat
    while DataArray[i].Key < m do Inc(i);
    while DataArray[j].Key > m do Dec(j);
    
    if i <= j then 
    begin
      Swap(DataArray[i], DataArray[j]); 
      Inc(i); 
      Dec(j); 
    end;
    
    if l < j then Sort(l, j);
    if i < r then Sort(i, r);
  until i > j;
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := Random(10);
  
  for var j := 0 to M - 1 do
    DataArray[j] := new TData(A[0, j], j);
  
  Sort(0, M - 1);
  
  for var j := 0 to M - 1 do
    for var i := 0 to N - 1 do
      Outcome[i, j] := A[i, DataArray[j].Index];
      
  Print();
end.

Узоры на матрицах[править]

Математика индексов матрицы – теория.

Бабочка[править]

const
  N = 10;

var
  A: array [0..N - 1, 0..N - 1] of char;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      if (i <= N - j - 1) or (i <= j) then
        A[i, j] := '+'
      else
        A[i, j] := '.';
  
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:2);
    Writeln();
  end;
end.

Песочные часы[править]

const
  N = 9;

var
  A: array [0..N - 1, 0..N - 1] of char;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      if (i <= N - j - 1) and (i <= j) or (i >= N - j - 1) and (i >= j) then
        A[i, j] := '+'
      else
        A[i, j] := '.';
  
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:2);
    Writeln();
  end;
end.

Заполнение диагоналей матрицы по правилу[править]

0 1 2 3 4
0 0 1 2 3
0 0 0 1 2
0 0 0 0 1
0 0 0 0 0
const
  N = 10;

var
  A: array [0..N - 1, 0..N - 1] of integer;
  K: integer;

begin
  K := 1;
  for var D := 1 to N - 1 do
  begin
    for var i := 0 to N - 1 do
      for var j := 0 to N - 1 do
        if i <= j - D then
          A[i, j] := K;
    Inc(K);
  end;
  
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:5);
    Writeln();
  end;
end.

Помогите разобраться. Изначально ввел и вывел матрицу через процедуру, а дальше хочу обратиться к этой матрице(а не вводить новую) и обрабатывать ее. Выдает максимум как 0. Почему?

Как сделать так чтобы я один раз ввел матрицу, а далее уже через разные функции и процедуры обрабатывал ее?

Вот код : http://pastebin.com/CHMBUGx4

Program brain;
uses crt;

type
matr= array [1..50, 1..50] of integer;
var
a:matr;

procedure vvod(i, j, n: integer ; a:matr); //ввод матрицы
begin
 for i:=1 to n do
  for j:=1 to n do
  read(a[i,j]);
  readln;
begin
 for i:=1 to n do
 begin
  for j:= 1 to n do 
   write('   ',a[i, j]);
   writeln;
   writeln;
end;
end;
end;

function maxelem {var a:matr;}( n:integer; var a:matr):real;
var
//a:matr;
max:real;
i, j: integer;
begin

 max:=a[1,1];
   for i:=1 to n do

     for j:=1 to n do

       if max < a[i,j] then  max:=a[i,j];

       writeln('max= ', max);




  end;


begin

var n, i, j:integer;
writeln('введите размерность квадратной матрицы');
write ('n= ');
readln( n);
writeln('впишите элементы квадратной матрицы');
writeln;
vvod(i,j,n,a);
maxelem(n, a);
end.

Добавить комментарий