fork download
  1. program MatrixProcessing;
  2.  
  3. {$MODE DELPHI}
  4.  
  5. uses
  6. SysUtils;
  7.  
  8. const
  9. N = 6; // строки
  10. M = 7; // столбцы
  11.  
  12. type
  13. TMatrix = array[1..N, 1..M] of Real;
  14.  
  15. // процедура заполнения матрицы
  16. procedure FillMatrix(var Matrix: TMatrix);
  17. var
  18. i, j: Integer;
  19. begin
  20. Randomize;
  21. for i := 1 to N do
  22. for j := 1 to M do
  23. Matrix[i, j] := Random * 100; // числа от 0 до 100
  24. end;
  25.  
  26. // процедура вывода матрицы на экран
  27. procedure PrintMatrix(const Matrix: TMatrix; const Caption: string);
  28. var
  29. i, j: Integer;
  30. begin
  31. Writeln(Caption);
  32. for i := 1 to N do
  33. begin
  34. for j := 1 to M do
  35. Write(Matrix[i, j]:8:2);
  36. Writeln;
  37. end;
  38. Writeln;
  39. end;
  40.  
  41. // функция поиска минимального элемента в строке и его индекса столбца
  42. function FindMinInRow(const Row: array of Real; RowSize: Integer): Integer;
  43. var
  44. i, MinIndex: Integer;
  45. MinValue: Real;
  46. begin
  47. MinIndex := 0;
  48. MinValue := Row[0];
  49. for i := 1 to RowSize - 1 do
  50. if Row[i] < MinValue then
  51. begin
  52. MinValue := Row[i];
  53. MinIndex := i;
  54. end;
  55. Result := MinIndex + 1; // +1 тк индексы в массиве начинаются с 0, а в матрице — с 1
  56. end;
  57.  
  58. // процедура поиска наибольшего среди минимальных элементов строк и его индексов
  59. procedure FindMaxAmongMins(const Matrix: TMatrix; var RowIndex, ColIndex: Integer);
  60. var
  61. i: Integer;
  62. CurrentMinCol: Integer;
  63. CurrentMin, MaxAmongMins: Real;
  64. begin
  65. MaxAmongMins := -MaxInt; // начальное значение очень маленькое число
  66.  
  67. for i := 1 to N do
  68. begin
  69. // создаём временный массив для строки
  70. CurrentMinCol := FindMinInRow(Matrix[i], M);
  71. CurrentMin := Matrix[i, CurrentMinCol];
  72.  
  73. if CurrentMin > MaxAmongMins then
  74. begin
  75. MaxAmongMins := CurrentMin;
  76. RowIndex := i;
  77. ColIndex := CurrentMinCol;
  78. end;
  79. end;
  80. end;
  81.  
  82. // процедура сортировки матрицы по убыванию
  83. procedure SortMatrixDescending(var Matrix: TMatrix);
  84. var
  85. FlatArray: array of Real;
  86. i, j, k: Integer;
  87. Temp: Real;
  88. begin
  89. // преобразуем матрицу в одномерный массив
  90. SetLength(FlatArray, N * M);
  91. k := 0;
  92. for i := 1 to N do
  93. for j := 1 to M do
  94. begin
  95. FlatArray[k] := Matrix[i, j];
  96. Inc(k);
  97. end;
  98.  
  99. // сортировка пузырьком
  100. for i := 0 to High(FlatArray) - 1 do
  101. for j := 0 to High(FlatArray) - i - 1 do
  102. if FlatArray[j] < FlatArray[j + 1] then
  103. begin
  104. Temp := FlatArray[j];
  105. FlatArray[j] := FlatArray[j + 1];
  106. FlatArray[j + 1] := Temp;
  107. end;
  108.  
  109. // возвращаем отсортированные значения в матрицу
  110. k := 0;
  111. for i := 1 to N do
  112. for j := 1 to M do
  113. begin
  114. Matrix[i, j] := FlatArray[k];
  115. Inc(k);
  116. end;
  117. end;
  118.  
  119. var
  120. Matrix: TMatrix;
  121. RowIndex, ColIndex: Integer;
  122.  
  123. begin
  124. try
  125. // заполняем матрицу
  126. FillMatrix(Matrix);
  127.  
  128. // выводим исходную матрицу
  129. PrintMatrix(Matrix, 'Original matrix:');
  130.  
  131. // находим наибольший среди минимальных элементов строк
  132. FindMaxAmongMins(Matrix, RowIndex, ColIndex);
  133. Writeln('The largest among the minimum elements is in the row ',
  134. RowIndex, ', col ', ColIndex, '.');
  135. Writeln('Value: ', Matrix[RowIndex, ColIndex]:8:2);
  136. Writeln;
  137.  
  138. // сортируем матрицу по убыванию
  139. SortMatrixDescending(Matrix);
  140.  
  141. // выводим отсортированную матрицу
  142. PrintMatrix(Matrix, 'Matrix after sorting in descending order:');
  143.  
  144. except
  145. on E: Exception do
  146. Writeln(E.ClassName, ': ', E.Message);
  147. end;
  148.  
  149. Readln;
  150. end.
  151.  
Success #stdin #stdout 0s 5320KB
stdin
7 21
1 2 547152
1 3 509157
1 4 539282
1 5 541645         
1 6 458433
1 7 385173

2 3 131528
2 4 92735
2 5 150511
2 6 94440
2 7 194542
3 4 216600
3 5 272401
3 6 157176
3 7 124077
4 5 57785
4 6 97323
4 7 242232
5 6 136663
5 7 283862
6 7 147426
stdout
Original matrix:
   88.11   66.51   12.83   66.37   21.25   89.04   14.71
   28.75   79.25   90.60   18.46   36.71    5.88    6.41
   93.76   76.02   19.24   85.42   61.94   47.09   37.87
    1.94   40.44   93.90   32.38   42.74   61.03   77.33
    5.14   55.81   37.84   76.44   85.10   39.40   90.06
   35.06   14.62   23.09   86.99   72.53   11.60   30.40

The largest among the minimum elements is in the row 3, col 3.
Value:    19.24

Matrix after sorting in descending order:
   93.90   93.76   90.60   90.06   89.04   88.11   86.99
   85.42   85.10   79.25   77.33   76.44   76.02   72.53
   66.51   66.37   61.94   61.03   55.81   47.09   42.74
   40.44   39.40   37.87   37.84   36.71   35.06   32.38
   30.40   28.75   23.09   21.25   19.24   18.46   14.71
   14.62   12.83   11.60    6.41    5.88    5.14    1.94