| 
| 
 | Вопрос # 1 714/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Помогите пожалуйста решить следующую задачу:
 Дана целочисленная прямоугольная матрица. Определить:
 Максимальное из чисел, встречающихся в заданной матрице более одного раза.
 (Матрица задается случайно или вводится с клавиатуры).
 
|  |   Вопрос задал: Baimer (статус: Посетитель)Вопрос отправлен: 22 июня 2008, 11:47
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: min@y™ Россия - чемпион!
 Лови готовую программу:
 
 program p1714;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
const
  Rows = 5;      // Кол-во строк матрицы
  Cols = 6;      // Кол-во столбцов матрицы
  Limit = 100;   // 0..(Limit - 1) - интервал значений элементов матрицы
 
type
  TMatrix = array[0..Rows - 1, 0..Cols - 1] of Integer; // Тип матрицы
  TMeaning = array[0..Limit - 1] of Integer; // Количество встречающихся значений
 
var
  i, j: Integer;
  M: TMatrix;
  Max: Integer; // Максимальный элемент
  V: TMeaning;  // Вектор встречающихся значений
 
begin
  // Формирование случайной матрицы и вывод на экран,
  // а также формирование количественного вектора
  Randomize();
  FillChar(V, SizeOf(V), 0);
 
  for i:= 0 to Rows - 1 do
    begin
      for j:= 0 to Cols - 1 do
        begin
          M[i, j]:= Random(Limit);
          Inc(V[M[i, j]]);
          Write(' ', M[i, j]: 3);
        end;
      WriteLn;
    end;
 
  // Поиск максимального элемента, встречающегося больше 1 раза
  Max:= -1;
  for i:= 0 to Rows - 1 do
    for j:= 0 to Cols - 1 do
      if (M[i, j] > Max) and (V[M[i, j]] > 1)
        then Max:= M[i, j];
 
  // Вывод максимального элемента и количества раз его присутствия в матрице
  if Max <> -1
    then WriteLn('  Max = ', Max, ' (', V[Max], ' times).')
    else WriteLn('  Not found.'); // Все элементы разные
 
  Write('  Press Enter...');
  ReadLn;
end.
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 22 июня 2008, 13:41
 
 |  Ответ #2. Отвечает эксперт: Мережников Андрей Здравствуйте, Baimer!Ответ №1 довольно прост, но не совсем отвечает условиям задачи, во-первых матрица ЦЕЛОЧИСЛЕННЫХ, а не целочисленных положительных чисел. В случае присутствия отрицательных чисел, данный способ вызовет ошибку; во-вторых, как быть в том случае, если значения не ограничены сверху?
 Решение поиска необходимо разбить на две части: 1) найти все повторяющиеся значения в матрице; 2)среди этих значений искать максимальное;
 Приложение:Переключить в обычный режим  var Vector:array of integer;      Matrix:array of array of integer;............functionvar col1,col2,row1,row2,cnt:integer;      ll:boolean;begin  for col1:=0 to high(Matrix)-1  do for row1:=0 to high(Matrix[0])-1      do for col2:=col1+1 to high(Matrix)          do for row2:=row1+1 to high(Matrix[0])              do if Matrix[col1,row1]=Matrix[col2,row2]                  then begin                            ll:=false;                            for cnt:=0 to high(Vecotr)                            do if Vector[cnt]=Matrix[col1,row1]                                then begin                                           ll:=true;                                           break;                                       end;                            if not(ll)                            then begin                                     setlength(Vector,high(Vector)+2);                                     Vector[high(Vector)]:=Matrix[col1,row1];                                   end;                         end; end;
|  | Ответ отправил: Мережников Андрей (статус: Абитуриент)Время отправки: 22 июня 2008, 21:54
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 2; последнее сообщение — 22 июня 2008, 21:58; участников в обсуждении: 2. 
|   | Baimer (статус: Посетитель), 22 июня 2008, 19:47 [#1]:Спасибо за помощь, но мне нужно чтобы матрицу вводить можно было и с клавиатуры тоже. |  
|   | Мережников Андрей (статус: Абитуриент), 22 июня 2008, 21:58 [#2]:Для того, чтобы реализовать два способа заполнения матрицы, надо разбить на отдельные процедуры ввод элементов матрицы и поиск решения задачи по матрице. Способ ввода зависит от того, какое Вы реализуете приложение - консольное или с использованием VCL |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |