Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.11;
Скачать: CL | DM;

Вниз

Как найти большее значение в двухмерном массиве?   Найти похожие ветки 

 
NightRain ©   (2007-01-24 19:08) [0]

Нужно найти наибольшее значение (число) в массиве и узнать его адрес или адреса если их несколько одинаковых.


 
Джо ©   (2007-01-24 19:09) [1]

Два цикла (вложенных), оператор сравнения, оператор присваивания.


 
NightRain ©   (2007-01-24 19:16) [2]

А без циклов ни как? Может есть какая нибудь функция которая возвращает максимальное значение в массиве?


 
NightRain ©   (2007-01-24 19:17) [3]

А без циклов ни как? Может есть какая нибудь функция которая возвращает максимальное значение в массиве?


 
Palladin ©   (2007-01-24 19:21) [4]


> [3] NightRain ©

ага есть, но в ней цикл


 
Palladin ©   (2007-01-24 19:22) [5]

рекомендую порешать академические задачи, дурацкие вопросы отпадут


 
Джо ©   (2007-01-24 19:26) [6]

> [3] NightRain ©   (24.01.07 19:17)
> А без циклов ни как? Может есть какая нибудь функция которая
> возвращает максимальное значение в массиве?

Волшебства не бывает, это Вас кто-то обманул... Есть там функция или нет ее — с циклом будет.


 
NightRain ©   (2007-01-24 19:34) [7]

Только не смейтесь если я скажу глупость, просто я думал вдруг есть нечто подобное: x:=MAX(y[0..5])


 
Zeqfreed ©   (2007-01-24 19:34) [8]

uses
 Math;

type
 T2dArray = array of array of Integer;

function GetMaxValue(const a : T2dArray) : Integer;
var
 max : Integer;

 procedure GoDeeper(i, j : Integer; dir : Integer);
 begin
   if (i > High(a)) or (j > (High(a[Low(a)])) then Exit;
   max := Max(max, a[i, j]);

   case dir of
     0: begin
       GoDeeper(i + 1, j + 1, 0);
       GoDeeper(i + 1, j, 1);
       GoDeeper(i, j + 1, 2);
     end;
     1: GoDeeper(i + 1, j, 1);
     2: GoDeeper(i, j + 1, 2);
   end;
 end;

var
 mi, mj : Integer;
begin
 mi = Low(a);
 mj = Low(a[Low(a)]);

 max := a[mi, mj];
 GoDeeper(mi, mj, 0);
 Result := max;
end;


Фух. Вроде без циклов и теоретически должно работать, но я не проверял и не могу гарантировать :)


 
Джо ©   (2007-01-24 19:40) [9]

> [8] Zeqfreed ©   (24.01.07 19:34)
> Фух. Вроде без циклов и

Рекурсия — это тот же цикл, только хитро спрятанный. К тому же для данной задачи применение рекурсии вряд ли оправданно :)


 
Джо ©   (2007-01-24 19:41) [10]

> [7] NightRain ©   (24.01.07 19:34)
> Только не смейтесь если я скажу глупость, просто я думал
> вдруг есть нечто подобное: x:=MAX(y[0..5])

Ну, есть в модуле Math функция MaxValue (для одномерного массива Double). Смотришь реализацию, а там (сюрприз!) — цикл.


 
Zeqfreed ©   (2007-01-24 19:44) [11]

> Джо ©   (24.01.07 19:40) [9]

Я бы не назвал рекурсию циклом. В принципе не спорю, что мой код — «грязный хак», но тем не менее это не цикл :) Использовать же такой подход, разумеется, не стоит и даже крайне противопоказано.


 
NightRain ©   (2007-01-24 19:45) [12]

Zegfreed, я просто хотел сделать код как можно короче, а так уж лучше с циклами :)


 
Zeqfreed ©   (2007-01-24 19:53) [13]

«Зигфрид», герой древнескандинавских и немецких мифов, правильно пишется вот так: Siegfried. Откуда у людей такое желание поставить g вместо q в моем нике? :)


 
Джо ©   (2007-01-24 20:55) [14]

> [11] Zeqfreed ©   (24.01.07 19:44)
> > Джо ©   (24.01.07 19:40) [9]
>
> Я бы не назвал рекурсию циклом.

Надеюсь, меня не закидают помидорами :)
По-моему мнению, цикл — это последовательность действий, выполняемая циклически. То есть

Again:
DoSomething;
if not Condition then
 Goto Again;

— самый настоящий цикл, хотя ни одного оператора цикла в нем не использовано. Так и с рекурсией, ИМХО.


 
Zeqfreed ©   (2007-01-24 21:08) [15]

> Джо ©   (24.01.07 20:55) [14]

Вот такой код как раз и является циклом в чистом виде. Может быть рекурсия и является циклом, но я бы в любом случае ее так не стал называть :)
Если рассмотреть рекурсивные вызовы на уровне ассемблерного кода, то да, там можно увидеть, что код выполняется циклически параллельно наращивая стек. Но процесс идет не линейно и не одномерно как в циклах, при выходе из процедуры, мы как бы возвращаемся на уровень выше. Ладно, будем считать, что я почти сдался :)



Страницы: 1 вся ветка

Текущий архив: 2007.02.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.048 c
2-1169312841
NikNet
2007-01-20 20:07
2007.02.11
Клонировать всю структуру базы данных с данными(можно без данных)


4-1159525169
RoadStar
2006-09-29 14:19
2007.02.11
Получение данных об оперативной памяти


15-1169457949
vitv
2007-01-22 12:25
2007.02.11
Сервер на Linux или Win2003


1-1166603258
fishka
2006-12-20 11:27
2007.02.11
IdTelnet и получение ответов


4-1158081492
vidiv
2006-09-12 21:18
2007.02.11
Копирование выделенного текста с Активного окна.