Текущий архив: 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.48 MB
Время: 0.053 c