Главная страница
    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.48 MB
Время: 0.067 c
15-1169304400
vidiv
2007-01-20 17:46
2007.02.11
Не нравится


8-1150349926
Vasiliy
2006-06-15 09:38
2007.02.11
Управление выходом видеокарты ???


15-1169228956
vrem
2007-01-19 20:49
2007.02.11
Есть ли у Вас проблемы с головой?


2-1169823584
loword2
2007-01-26 17:59
2007.02.11
Запись в textfile


2-1169464956
Max.66RUS
2007-01-22 14:22
2007.02.11
Вопрос по цветопередаче монитора...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский