- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
public double FindMax(double num1, double num2, double num3)
{
double max = num1;
if (num2 > max)
{
max = num2;
}
if (num3 > max)
{
max = num3;
}
return max;
}
zheka 02.09.2010 12:08 # +6
Nagg 02.09.2010 13:05 # −1
Nagg 02.09.2010 21:36 # +1
ErmineMD 02.09.2010 12:32 # 0
zheka 02.09.2010 13:25 # +1
public double FindMax(double num1, double num2, double num3)
{
return new[] {num1, num2, num3}.Max();
}
:D
Тока using System.Linq не забудь добавить ))
Анонимус 02.09.2010 13:59 # +1
zheka 02.09.2010 14:00 # 0
Анонимус 02.09.2010 14:04 # 0
а чем плох вараргс?
Только не говорите что он тормозит: ни за что не поверю, что он у в ас боттлнек
zheka 02.09.2010 14:07 # 0
Анонимус 02.09.2010 15:13 # 0
Stalker 02.09.2010 12:41 # +1
absolut 02.09.2010 13:01 # −2
Да и с "max" документированность лучше.
Хотя в данном случае и так всё ясно.
Stalker 02.09.2010 13:13 # +1
Всё относительно. В мелких функциях, почему бы и нет.
abatishchev 16.11.2010 15:57 # 0
TarasB 02.09.2010 18:55 # 0
bugmenot 02.09.2010 19:34 # +3
Анонимус 02.09.2010 20:03 # +4
bugmenot 02.09.2010 20:10 # +3
TarasB 02.09.2010 20:19 # −3
Ладно, пошутили и хватит. Принципиально по другому максимум 3 чисел не напишется, значит не говнокод.
Анонимус 02.09.2010 20:22 # +1
TarasB 02.09.2010 20:55 # −1
Я надеюсь, ты не это назвал человеческим решением?
Анонимус 02.09.2010 20:57 # −1
TarasB 02.09.2010 21:14 # +1
Сортировать массив, чтобы узнать его максимум?!
Анонимус 02.09.2010 21:24 # −2
И работать будет на любое кол-во аргументов, ага)
TarasB 02.09.2010 22:04 # +7
Индус, уходи.
Анонимус 02.09.2010 22:12 # −2
а вообще когда ты узнаешь что кроме учебных бывают еще и бизнес-приложения, то тебе откроется страшная истина: не нужно оптимизировать то, что занимает менее 20% выполнения. Сортировка массива из десяти элементов на современном железе это ничто.
pushkoff 02.09.2010 23:43 # −1
* strong optimisation skills
а ты все говнокод пишешь, и наверное еще ругаешься почему даже индусы с китайцами зарабатывают больше...
а вообще, нельзя так плохо относиться к своей работе...
Анонимус 03.09.2010 00:07 # −1
начался учебный год, студенты вернулись с каникул и прямиком на говнокод.
pushkoff 03.09.2010 00:08 # −2
Анонимус 03.09.2010 00:11 # −1
pushkoff 03.09.2010 00:13 # −2
для поиска большего числа можно все закинуть в базу и сделать select с сортировкой... а ченам? оно же меньше 20% времени займет...
Анонимус 03.09.2010 00:21 # 0
еще раз: оптимизировать надо то, что занимает минимум 20% времени. Я не верю что есть в мире приложение на C# в котором 20% времени занимает сортировка массива.
Ты веришь?
Читабельный код лучше нечитабельного. Гибкий код лучше не гибкого.
Потому код "someArray.sort().max()" лучше приведенного в этом примере кода в тысячу раз, хотя и требует лишней сортировки.
Еще раз напоминаю что речь идет о не драйвере сетевой карты и не о ядре крупной реляционной бд, а о приложении на C#, которое скорее всего энтерпрайз, и в нем наверняка есть linq2sql, который кушает намного больше ресурсов, чем этот сраный сорт.
ЗЫ: Самое смешное что я изначально предложил прямой перебор, который товарищ внизу преподнес как откровение)
absolut 03.09.2010 07:31 # +5
Программа сортировки массива. Занимает ~100%. Хе-хе :))
bugmenot 03.09.2010 00:18 # 0
Так что костыль красив, но когда понадобится им воспользоваться - всё равно придется переписать нормально :-)
Анонимус 03.09.2010 00:30 # 0
bugmenot 03.09.2010 07:17 # −1
TarasB 03.09.2010 10:57 # +4
И почему элементов не более десяти? А если программист Вася захочет применить твою функцию для массива из 100500 элементов?
bugmenot 04.09.2010 19:08 # +1
bugmenot 02.09.2010 20:50 # +2
а насчет CLR - не знаю насколько там принято создавать депенденси из-за элементарных операций, в ЯВУ обычно стараются избегать этого
TarasB 02.09.2010 21:00 # 0
В дельфах можно так делать:
Вызывается так: x := max([1,2,3]);
Можно любое число параметров через запятую передавать. Параметры пихаются в стек, количество, уменьшенное на единицу, пихается в edx, всё достаточно оптимально.
TarasB 02.09.2010 21:01 # −2
bugmenot 02.09.2010 22:05 # +2
но мне не очень нравится использование динамического массива где можно было бы обойтись открытым
> ...на шутки про дельфи после одного...
общий уровень дельфистов в среднем по больнице мягко говоря оставляет желать лучшего
Stalker 02.09.2010 23:13 # +2
Result := X[0]; может вылететь на пустом массиве, хотя молчаливое result := 0 мне тоже не нравится...
bugmenot 03.09.2010 00:12 # +2
Хм, динамический массив мне здесь приглючился, да. На пустом динамическом свалилось бы (что правильно), а на открытом не свалится, но вернет мусор из стека, так что надо if Length(X) = 0 then raise EInvalidOperation.Cre... или что-то типа
В оригинале проверка на нулевой индекс в каждой итерации - говно
bugmenot 03.09.2010 07:22 # 0
а вообще, мы только что изобрели библиотечную процедуру Math.MaxValue, если принять последние поправки - они будут идентичны :-D
Stalker 03.09.2010 11:20 # 0
Блин, есть такое :) Кстати, Low() не спасает (да и не должна) от Access vioaltion на пустом динамическом массиве, а на открытом MaxValue([]) возвращает 0.
bugmenot 03.09.2010 12:02 # 0
> открытом MaxValue([]) возвращает 0
Это - мусор из стека, они не обрабатывают эту ситуацию
Result := Data[Low(Data)]; // вот так инициализируется
Low и High я предложил использовать исключительно ради улучшения читаемости, они будут всегда соответствовать 0 и Length-1
TarasB 03.09.2010 10:59 # 0
Тогда надо отдельно разобрать случай нулевого массива.
> но мне не очень нравится использование динамического массива где можно было бы обойтись открытым
Читай полностью:
> Параметры пихаются в стек, количество, уменьшенное на единицу, пихается в edx, всё достаточно оптимально.
> общий уровень дельфистов в среднем по больнице мягко говоря оставляет желать лучшего
Я с программистами вообще мало общался, сказать ничего ни про чей уровень (включая свой) не могу. Было бы интересно посмотреть.
bugmenot 03.09.2010 12:26 # 0
вот перфекционизированный вариант
динамический массив мне приглючился, говорю. в любом случае здесь это будет субоптимально и по универсальности и по скорости
я к себе в кабинку кладу собранное по всяким сообществам, но смешные - редкость, обычно унылая копипаста
TarasB 03.09.2010 12:37 # 0
Правда, если разрешить такие числа и НАНы, то функция нахождения минимума усложнится.
Это я для калькулятора такое мутил: http://tarasber.narod.ru/MiniCalc.rar
Он на max() даёт -inf
bugmenot 04.09.2010 19:24 # 0
PS: у тебя код допускает сравнение с NaN результат которого всегда false
TarasB 04.09.2010 20:08 # 0
1<=nan даёт 1.0 (то есть тру). Надо поправить.
pushkoff 02.09.2010 20:34 # +2
на пятерку нужно было в функции БИ3 использовать функцию БИ2...
Stalker 02.09.2010 23:28 # +1
absolut 03.09.2010 07:33 # +5
bugmenot 03.09.2010 07:38 # +1
DooMer 03.09.2010 10:02 # −7
absolut 03.09.2010 10:06 # 0
Stalker 03.09.2010 11:22 # +6
Привыкай, детка :))
Desconocido 03.09.2010 15:24 # −2
Начинается все вот с этого, а заканчивается Рунге-Куттами и симоляторами молеколы кислорода в емкости фалообразной формы.
absolut 03.09.2010 15:37 # 0
NightCrime 04.09.2010 14:14 # −3
{
int count = 0;
if(max == num1 )
count++;
if(max == num2 )
count++;
if(max == num3 )
count++;
return(count == 1);
}
public double findMax()
{
double max = num1;
if( num2 > max )
max = num2;
if( num3 > max )
max = num3;
return max;
}
сначала был массив и сортировка, препод сказал убрать нах..мне надо быо найти максимум и сделать рповерку не являеться ли таковым несколько чисел, если да на екран вывести ошибку, и я пыталься сделать эту проверку кучами ифов и т.д, то был тру говнокод, а вот собстно 2 простейших метода всё просто)вот и все что мне нужно было сделать)
Desconocido 04.09.2010 15:01 # +3
Я твой пёс в шаверма клал!!1
pushkoff 04.09.2010 16:22 # +4
NightCrime 04.09.2010 18:27 # −3
LostPain 08.10.2010 23:32 # 0
public static double Max(double a, double b, double c)
{
if (a > b)
return a > c ? a : c;
else
return b > c ? b : c;
}
public static double Min(double a, double b, double c)
{
if (a < b)
return a < c ? a : c;
else
return b < c ? b : c;
}
abatishchev 16.11.2010 16:02 # 0
лучший - LINQ
LINQ ругает только тот, кто не знает LINQ
xXx_totalwar 16.11.2010 16:45 # +1
ути-пути, какая величайшая сложность. LINQ ругает еще тот, кто на настоящих монадах гоняет.