Страница 1 из 1

Нахождение максимума

Добавлено: 18 апр 2007, 15:31
Хыиуду
Приближается сессия - начинается новый наплыв школьников и студентов в разделе "Решите мне задачку". Функция нахождения максимума в одномерном массиве А[1..N]:

Код: Выделить всё

function max(A:array of integer):integer;
var i:byte; maxi:byte;
begin
  maxi:=1;
  for i:=2 to N do
    if A[i]>A[maxi] then maxi:=i;
  max:=maxi;
end;
Функции передается массив, она возвращает индекс максимального элемента. Сам максимальный элемент - А[max(A)].
То же самое для двухмерного массива A[1..N,1..M]:

Код: Выделить всё

type pair=record
    i,j:integer;
end;
function max(A:array of array of integer) :p air;
var i,j:byte; maxi,maxj:byte; result :p air;
begin
  maxi:=1;
  maxj:=1;
  for i:=2 to N do
  for j:=2 to N do
    if A[i,j]>A[maxi,maxj] then begin maxi:=i; maxj:=j; end;
  result.i:=maxi;
  result.j:=maxj;
  max:=result;
end;
Поскольку Паскаль не может возвращать два значения из одной функции, вводится тип pair - запись с полями i,j. Функция возвращает переменную типа pair, у которой поле i соответствует абсциссе максимального значения, а поле j - ординате. Сам максимальный элемент - A[max(A).i, max(A).j]
При использовании этого второго варианта описание типа pair тоже нужно скопировать себе в программу (как показала практика, некоторые этого не знают)

Re: Нахождение максимума

Добавлено: 19 апр 2007, 09:59
somewhere
Хыиуду, все это хорошо, но

- переменная N не определена, вместо нее советую ставить High(A) которая возвратит индекс последнего элемента массива
- массивы желательно передавать по ссылке через Var, т.к. при больших массивах будут сильные тормоза и может крякнуть стек (Stack overflow)

Re: Нахождение максимума

Добавлено: 19 апр 2007, 10:27
Хыиуду
Логично. Я здесь имел в виду, что N задана константой, а первый элемент имеет индекс 1. В противном случае вообще писать придется так:
maxi:=low(A);
for i:=low(A) to high(A) do
...

Re: Нахождение максимума

Добавлено: 02 май 2007, 17:54
Начинающая
Хыиуду писал(а):Функции передается массив, она возвращает индекс максимального элемента. Сам максимальный элемент - А[max(A)].
То же самое для двухмерного массива A[1..N,1..M]:

Код: Выделить всё

type pair=record
    i,j:integer;
end;
function max(A:array of array of integer) :p air;
var i,j:byte; maxi,maxj:byte; result :p air;
begin
  maxi:=1;
  maxj:=1;
  for i:=2 to N do
  for j:=2 to N do
    if A[i,j]>A[maxi,maxj] then begin maxi:=i; maxj:=j; end;
  result.i:=maxi;
  result.j:=maxj;
  max:=result;
end;
Поскольку Паскаль не может возвращать два значения из одной функции, вводится тип pair - запись с полями i,j. Функция возвращает переменную типа pair, у которой поле i соответствует абсциссе максимального значения, а поле j - ординате. Сам максимальный элемент - A[max(A).i, max(A).j]
а это подойдет для задачи. где нужно найти номер строки и столбца двумерного массива для мах элемента этого массива?

Re: Нахождение максимума

Добавлено: 03 май 2007, 06:28
Oleg_Rus
а если количество таковых максимумов больше 1? например 2. и надо найти индекс первого, ведь во многих задачах вопрос так и стоит.

можно просто обратить цикл, предложенный Хыиуду
for i:=n-1 donto 1 do
if a>a[maxi] then maxi:=i;

или можно через цикл repeat
i:=n;
Repeat
if a>a[maxi] then maxi:= i;
dec(i);
until i>1;

Re: Нахождение максимума

Добавлено: 03 май 2007, 06:37
Oleg_Rus
собственно тут и до минимума рукой подать:

for i:=1 to n do
if a<a[maxi] then maxi:= i;

Re: Нахождение максимума

Добавлено: 08 май 2007, 14:05
Хыиуду
начинающая писал(а):а это подойдет для задачи. где нужно найти номер строки и столбца двумерного массива для мах элемента этого массива?
это и называется "найти максимум"

Re: Нахождение максимума

Добавлено: 08 май 2007, 17:07
DeeJayC
cat | sort | head -1

Re: Нахождение максимума

Добавлено: 16 дек 2008, 12:05
Хыиуду
Поднимаю. Слишком часто на эту тему приходится ссылаться.

Нахождение максимума

Добавлено: 02 авг 2009, 22:04
ruifut
Здравтсвйте
Интересует меня такая тема, как задержка дыхания под водой
В бассейне могу переплыть 25 м. Хочу больше
Кто знает, есть ли методики дыхалки для максимального нахождения под водой?

з.ы. Вообще интересует все, что связано с дыханием...
Спасибо
а кстати не сочтите за рекламу друг пригласил в новую онлайн игру http://netassault.ru - это даже не игра, netassault.ru - просто бомба ;)