Дано массивы A(N1,N1),B(N2,N2),C(N3,N3). найти в каждой строке исходного массива...

0 голосов
28 просмотров

Дано массивы A(N1,N1),B(N2,N2),C(N3,N3). найти в каждой строке исходного массива наименьший элемент и переставить его с элементом стоящим на главной диагонали. нахождение в каждой строке массива наименьшего элемента и его перестановку с элементом стоящим на главной диагонали оформить в виде подпрограммы


Информатика (33 баллов) | 28 просмотров
0

язык?

0

Паскаль

Дан 1 ответ
0 голосов
Правильный ответ

Type
  M = array[,] of integer;

procedure Swap(var a: M; i: integer; j: integer);
//обменивает местами элементы массива a[i,i] и a[i,j]
var
  buff: integer;
begin
  if i <> j then begin
    buff := a[i, i]; a[i, i] := a[i, j]; a[i, j] := buff
  end
end;

function GetColMin(a: M; i: integer): integer;
// возвращает номер столбца, в котором найден минимальный элемент
// по строке с номером i, т.е. a[i,?]=min
var
  j, vmin, jm: integer;
begin
  vmin := 32766;
  for j := 0 to Length(a, 1) - 1 do
    if vmin > a[i, j] then begin
      vmin := a[i, j]; jm := j
    end;
  Result := jm
end;

procedure SwapMatrix(var a: M);
// меняет местами в массиве a[n,n] минимальный по строке элемент с
// элементом, лежащим на главной диагонали.
// Обращается к функции GetColMin и процедуре Swap
var
  i: integer;
begin
  for i := 0 to Length(a, 0) - 1 do Swap(a, i, GetColMin(a, i))
end;

procedure WriteMas(a: M; title: string);
// выводит заголовок, а потом массив построчно
var
  i, j, n: integer;
begin
  n := Length(a, 0) - 1;
  writeln(title);
  for i := 0 to n do
  begin
    for j := 0 to n do write(a[i, j]:5);
    writeln
  end
end;

procedure CreateMas(var a: M; n: integer; p: integer; q: integer);
// Создает массив a[0..n-1,0..n-1] и заполняет его
// данными используя датчик случайных чисел с мощностью "р"
// и минимальным значением q
var
  i, j: integer;
begin
  Randomize;
  SetLength(a, n, n);
  for i := 0 to n - 1 do
    for j := 0 to n - 1 do
      a[i, j] := random(p) + q
end;

const
  n1 = 3;
  n2 = 5;
  n3 = 8;

var
  a, b, c: M;

begin
  CreateMas(a, n1, 100, -50);
  WriteMas(a, 'Исходный массив а');
  SwapMatrix(a);
  WriteMas(a, 'Результирующий массив а');
  CreateMas(b, n2, 300, -150);
  WriteMas(b, 'Исходный массив b');
  SwapMatrix(b);
  WriteMas(b, 'Результирующий массив b');
  CreateMas(c, n3, 500, -250);
  WriteMas(c, 'Исходный массив c');
  SwapMatrix(c);
  WriteMas(c, 'Результирующий массив c');
end.

Тестовый прогон:

Исходный массив а
   14   23    7
  -50   31   36
  -39  -43  -38
Результирующий массив а
    7   23   14
   31  -50   36
  -39  -38  -43
Исходный массив b
  -91    6  -21 -139 -141
  130  -99   44  131  143
   93    5   97 -111   43
 -113   15  125   88   31
 -115  -39   27  124  144
Результирующий массив b
 -141    6  -21 -139  -91
  130  -99   44  131  143
   93    5 -111   97   43
   88   15  125 -113   31
  144  -39   27  124 -115
Исходный массив c
 -234  211  207 -131  151 -228  197 -163
  147    5  180 -135 -181  217 -178   -3
  178 -142 -149  -44 -195 -224 -187 -173
  -24   62   28 -134  -11 -216  -59   83
   62  -86   48  152  -44  -49 -218   92
   91  -60  201  206 -160 -135 -131   77
  161 -184 -204  113 -181  199  223  240
  147  129  143 -162   -6   80   98  113
Результирующий массив c
 -234  211  207 -131  151 -228  197 -163
  147 -181  180 -135    5  217 -178   -3
  178 -142 -224  -44 -195 -149 -187 -173
  -24   62   28 -216  -11 -134  -59   83
   62  -86   48  152 -218  -49  -44   92
   91  -60  201  206 -135 -160 -131   77
  161 -184  223  113 -181  199 -204  240
  147  129  143  113   -6   80   98 -162


(142k баллов)