Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как найти большее значение в двухмерном массиве? [D7, XP]


NightRain ©   (2007-01-24 19:08:00) 

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


Zeqfreed   (2007-01-24 21:08:00) [1]

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

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


Джо   (2007-01-24 20:55:00) [2]

> [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 19:53:00) [3]

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


NightRain   (2007-01-24 19:45:00) [4]

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


Zeqfreed   (2007-01-24 19:44:00) [5]

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

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


Джо   (2007-01-24 19:41:00) [6]

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

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


Джо   (2007-01-24 19:40:00) [7]

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

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


NightRain   (2007-01-24 19:34:00) [8]

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


Zeqfreed   (2007-01-24 19:34:00) [9]

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:26:00) [10]

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

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


Palladin   (2007-01-24 19:22:00) [11]

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


Palladin   (2007-01-24 19:21:00) [12]


> [3] NightRain ©

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


NightRain   (2007-01-24 19:17:00) [13]

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


NightRain   (2007-01-24 19:16:00) [14]

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


Джо   (2007-01-24 19:09:00) [15]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо