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

0 / 0 / 0

Регистрация: 03.05.2009

Сообщений: 14

1

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

12.02.2010, 23:25. Показов 6498. Ответов 7


Студворк — интернет-сервис помощи студентам

Дана действительная матрица размера 4 на N. Найти значение наибольшего по модулю элемента, а так же индексы этого элемента.



0



Law[L]esS

117 / 114 / 89

Регистрация: 31.10.2009

Сообщений: 191

12.02.2010, 23:36

2

Pascal
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
const
 n = 6;
var
 a: array[1..4,1..n] of integer;
 i,j,max,o,p: integer;
begin
 for i:= 1 to 4 do
 for j:= 1 to n do
   a[i,j]:= random(20)-8;
 for i:= 1 to 4 do begin
   writeln;
   for j:= 1 to n do
   write(a[i,j]:3);
 end;
 for i:= 1 to 4 do
 for j:= 1 to n do begin
   if abs(a[i,j]) > max then begin
     max:= a[i,j];
     o:= i;
     p:= j;
   end;
 end;
 writeln;
 writeln('max element = ',max,' ego rasspolozhenie - [',o,',',p,']');
end.



1



Платежеспособный зверь

8818 / 4245 / 1618

Регистрация: 28.10.2009

Сообщений: 11,386

12.02.2010, 23:44

3

неправильная это программа. для одного значения она выдает верный ответ, а вписал randomize и начала лажу выдавать



0



Inadequate

Retired

7726 / 2558 / 671

Регистрация: 17.10.2009

Сообщений: 5,100

12.02.2010, 23:57

4

Pascal
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
uses
  Crt;
const
  N=4;{êîëè÷åñòâî ñòðîê}
  M=4;{êîëè÷åñòâî ñòîëáöîâ}
var
  a:array [1..N,1..M] of integer;
  i,j,imax,jmax:integer;
begin
  ClrScr;
  imax:=1;
  jmax:=1;
  WriteLn('Èñõîäíàÿ ìàòðèöà:');
  for i:=1 to N do
  begin
    for j:=1 to M do
    begin
      a[i,j]:=random(8)-4;
      if abs(a[i,j])>abs(a[imax,jmax]) then
      begin
        imax:=i;
        jmax:=j
      end;
      Write(a[i,j]:2,' ')
    end;
    WriteLn
  end;
  WriteLn('Ìàêñèìóì - a[',imax,',',jmax,']:=',a[imax,jmax])
end.

Недосмотрел, что матрица действительная, но думаю, что такие мелочи ТС перепишет самостоятельно…



0



Law[L]esS

117 / 114 / 89

Регистрация: 31.10.2009

Сообщений: 191

13.02.2010, 00:05

5

Pascal
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
uses crt;
const
 n = 6;
var
 a: array[1..4,1..n] of integer;
 i,j,max,o,p: integer;
begin
 randomize;
 for i:= 1 to 4 do
 for j:= 1 to n do
   a[i,j]:= random(20)-8;
 for i:= 1 to 4 do begin
   writeln;
   for j:= 1 to n do
   write(a[i,j]:3);
 end;
 for i:= 1 to 4 do
 for j:= 1 to n do begin
   if abs(a[i,j]) > max then
     max:= abs(a[i,j]);
 end;
 for i:= 1 to 4 do
 for j:= 1 to n do begin
   if (a[i,j] = max) then begin
     writeln;
     writeln('maks element = ',max,' ego rasspolozhenie - [',i,',',j,']');
   end;
 end;
end.



0



Retired

7726 / 2558 / 671

Регистрация: 17.10.2009

Сообщений: 5,100

13.02.2010, 00:13

6

Law[L]esS, как-то у Вас нелогично чуток написана программа. Зачем 8 циклов? Непонятно…



0



117 / 114 / 89

Регистрация: 31.10.2009

Сообщений: 191

13.02.2010, 00:42

7

Цитата
Сообщение от Inadequate
Посмотреть сообщение

Law[L]esS, как-то у Вас нелогично чуток написана программа. Зачем 8 циклов? Непонятно…

Отдельно заполнение массива, отдельно вывод, нахождение максимума, само число и его позиции.
П.С у Вас в программе будут указана только 1 пара координат, хотя число может встречатся более 1 раза.



0



Retired

7726 / 2558 / 671

Регистрация: 17.10.2009

Сообщений: 5,100

13.02.2010, 11:42

8

Цитата
Сообщение от Law[L

esS]Отдельно заполнение массива, отдельно вывод, нахождение максимума, само число и его позиции.

То, что у Вас написано я понимаю, мне не понятно для чего Вы это сделали все отдельно…

Цитата
Сообщение от Law[L

esS]у Вас в программе будут указана только 1 пара координат, хотя число может встречатся более 1 раза

Обычно в задачах такого рода и требуется найти координаты первого из максимальных если их несколько. Но даже если ТС будет нужно найти все, то я думаю, что у него не составит труда дописать несколько строк.



0



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

Все программы, код которых выложен здесь, являются работоспособными. На момент написания программ использовалась среда 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.
uses crt;
const
 n = 6;
var
 a: array[1..4,1..n] of integer;
 i,j,max,o,p: integer;
begin
 randomize;
 for i:= 1 to 4 do
 for j:= 1 to n do
   a[i,j]:= random(20)-8;
 for i:= 1 to 4 do begin
   writeln;
   for j:= 1 to n do
   write(a[i,j]:3);
 end;
 for i:= 1 to 4 do
 for j:= 1 to n do begin
   if abs(a[i,j]) > max then
     max:= abs(a[i,j]);
 end;
 for i:= 1 to 4 do
 for j:= 1 to n do begin
   if (a[i,j] = max) then begin
     writeln;
     writeln('maks element = ',max,' ego rasspolozhenie - [',i,',',j,']');
   end;
 end;
end.

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

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

Просмотров 7.1к. Обновлено 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

Долго проболел, не ходил в универ, задали:
Определить наибольший элемент в каждой строке матрицы A[B,C], где B<=10, C<=15.

Можете объяснить, что тут вообще надо сделать?

Виталина's user avatar

Виталина

111 золотой знак2 серебряных знака8 бронзовых знаков

задан 10 ноя 2014 в 11:50

Vlmake's user avatar

У тебя есть матрица [10,15]:

  1. Делаешь цикл по строкам.
  2. Объявляешь переменную max = первому элементу в этой строке.
  3. Бежишь по строке и сравниваешь max с текущим элементом x[i,j].
  4. Если max < x[i,j] то max = x[i,j].
  5. Выводишь max (или записываешь куда-нибудь).
  6. Переходишь к следующей строке.

Nicolas Chabanovsky's user avatar

ответ дан 10 ноя 2014 в 12:14

whispeer's user avatar

whispeerwhispeer

8994 золотых знака12 серебряных знаков30 бронзовых знаков

2

Ну… Как что делать? Взять тетрадь у однокурсников и порешать задачи в ней, все.

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

Обновление

Ну хоть с однокурсницами, девочки с первой парты обычно с удовольствием всё объясняют.

Насколько я понял задание, B и Cразмеры матрицы, соответственно по иксу и по игреку. А числа в матрице любые.

Обновление 2

То есть вы

  • заводите матрицу размера «с запасом»: 10 на 15;
  • запрашиваете у юзера настоящие размеры. Проверяете, вылазят ли они за границы, если да, ругаетесь на юзера;
  • вводите матрицу поэлементно; :(
  • пробегаетесь по строкам, в каждой находите макс. элемент и выводите;
  • PROFIT!

Nicolas Chabanovsky's user avatar

ответ дан 10 ноя 2014 в 12:04

VladD's user avatar

VladDVladD

206k27 золотых знаков289 серебряных знаков521 бронзовый знак

Понравилась статья? Поделить с друзьями:
  • Как найти номера телефонов такси яндекс
  • Как исправить ошибку в хамачи туннель через ретранслятор
  • Как найти свои акции лукойл
  • Как найти мощность выделяющуюся на резисторе формула
  • Как найти человека с помощью спутников