Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 714

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, эксперты!
Помогите пожалуйста решить следующую задачу:
Дана целочисленная прямоугольная матрица. Определить:
Максимальное из чисел, встречающихся в заданной матрице более одного раза.
(Матрица задается случайно или вводится с клавиатуры).

Baimer Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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)среди этих значений искать максимальное;

Приложение:
  1.  
  2. var Vector:array of integer;
  3. Matrix:array of array of integer;
  4. ....
  5. ....
  6. ....
  7. function
  8. var col1,col2,row1,row2,cnt:integer;
  9. ll:boolean;
  10. begin
  11. for col1:=0 to high(Matrix)-1
  12. do for row1:=0 to high(Matrix[0])-1
  13. do for col2:=col1+1 to high(Matrix)
  14. do for row2:=row1+1 to high(Matrix[0])
  15. do if Matrix[col1,row1]=Matrix[col2,row2]
  16. then begin
  17. ll:=false;
  18. for cnt:=0 to high(Vecotr)
  19. do if Vector[cnt]=Matrix[col1,row1]
  20. then begin
  21. ll:=true;
  22. break;
  23. end;
  24. if not(ll)
  25. then begin
  26. setlength(Vector,high(Vector)+2);
  27. Vector[high(Vector)]:=Matrix[col1,row1];
  28. end;
  29. end;
  30.  
  31. end;


Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 22 июня 2008, 21:54
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 22 июня 2008, 21:58; участников в обсуждении: 2.
Baimer

Baimer (статус: Посетитель), 22 июня 2008, 19:47 [#1]:

Спасибо за помощь, но мне нужно чтобы матрицу вводить можно было и с клавиатуры тоже.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 22 июня 2008, 21:58 [#2]:

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

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.03 сек.