- 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;
}
public double FindMax(double num1, double num2, double num3)
{
return new[] {num1, num2, num3}.Max();
}
:D
Тока using System.Linq не забудь добавить ))
а чем плох вараргс?
Только не говорите что он тормозит: ни за что не поверю, что он у в ас боттлнек
Да и с "max" документированность лучше.
Хотя в данном случае и так всё ясно.
Всё относительно. В мелких функциях, почему бы и нет.
Ладно, пошутили и хватит. Принципиально по другому максимум 3 чисел не напишется, значит не говнокод.
Я надеюсь, ты не это назвал человеческим решением?
Сортировать массив, чтобы узнать его максимум?!
И работать будет на любое кол-во аргументов, ага)
Индус, уходи.
а вообще когда ты узнаешь что кроме учебных бывают еще и бизнес-приложения, то тебе откроется страшная истина: не нужно оптимизировать то, что занимает менее 20% выполнения. Сортировка массива из десяти элементов на современном железе это ничто.
* strong optimisation skills
а ты все говнокод пишешь, и наверное еще ругаешься почему даже индусы с китайцами зарабатывают больше...
а вообще, нельзя так плохо относиться к своей работе...
начался учебный год, студенты вернулись с каникул и прямиком на говнокод.
для поиска большего числа можно все закинуть в базу и сделать select с сортировкой... а ченам? оно же меньше 20% времени займет...
еще раз: оптимизировать надо то, что занимает минимум 20% времени. Я не верю что есть в мире приложение на C# в котором 20% времени занимает сортировка массива.
Ты веришь?
Читабельный код лучше нечитабельного. Гибкий код лучше не гибкого.
Потому код "someArray.sort().max()" лучше приведенного в этом примере кода в тысячу раз, хотя и требует лишней сортировки.
Еще раз напоминаю что речь идет о не драйвере сетевой карты и не о ядре крупной реляционной бд, а о приложении на C#, которое скорее всего энтерпрайз, и в нем наверняка есть linq2sql, который кушает намного больше ресурсов, чем этот сраный сорт.
ЗЫ: Самое смешное что я изначально предложил прямой перебор, который товарищ внизу преподнес как откровение)
Программа сортировки массива. Занимает ~100%. Хе-хе :))
Так что костыль красив, но когда понадобится им воспользоваться - всё равно придется переписать нормально :-)
И почему элементов не более десяти? А если программист Вася захочет применить твою функцию для массива из 100500 элементов?
а насчет CLR - не знаю насколько там принято создавать депенденси из-за элементарных операций, в ЯВУ обычно стараются избегать этого
В дельфах можно так делать:
Вызывается так: x := max([1,2,3]);
Можно любое число параметров через запятую передавать. Параметры пихаются в стек, количество, уменьшенное на единицу, пихается в edx, всё достаточно оптимально.
но мне не очень нравится использование динамического массива где можно было бы обойтись открытым
> ...на шутки про дельфи после одного...
общий уровень дельфистов в среднем по больнице мягко говоря оставляет желать лучшего
Result := X[0]; может вылететь на пустом массиве, хотя молчаливое result := 0 мне тоже не нравится...
Хм, динамический массив мне здесь приглючился, да. На пустом динамическом свалилось бы (что правильно), а на открытом не свалится, но вернет мусор из стека, так что надо if Length(X) = 0 then raise EInvalidOperation.Cre... или что-то типа
В оригинале проверка на нулевой индекс в каждой итерации - говно
а вообще, мы только что изобрели библиотечную процедуру Math.MaxValue, если принять последние поправки - они будут идентичны :-D
Блин, есть такое :) Кстати, Low() не спасает (да и не должна) от Access vioaltion на пустом динамическом массиве, а на открытом MaxValue([]) возвращает 0.
> открытом MaxValue([]) возвращает 0
Это - мусор из стека, они не обрабатывают эту ситуацию
Result := Data[Low(Data)]; // вот так инициализируется
Low и High я предложил использовать исключительно ради улучшения читаемости, они будут всегда соответствовать 0 и Length-1
Тогда надо отдельно разобрать случай нулевого массива.
> но мне не очень нравится использование динамического массива где можно было бы обойтись открытым
Читай полностью:
> Параметры пихаются в стек, количество, уменьшенное на единицу, пихается в edx, всё достаточно оптимально.
> общий уровень дельфистов в среднем по больнице мягко говоря оставляет желать лучшего
Я с программистами вообще мало общался, сказать ничего ни про чей уровень (включая свой) не могу. Было бы интересно посмотреть.
вот перфекционизированный вариант
динамический массив мне приглючился, говорю. в любом случае здесь это будет субоптимально и по универсальности и по скорости
я к себе в кабинку кладу собранное по всяким сообществам, но смешные - редкость, обычно унылая копипаста
Правда, если разрешить такие числа и НАНы, то функция нахождения минимума усложнится.
Это я для калькулятора такое мутил: http://tarasber.narod.ru/MiniCalc.rar
Он на max() даёт -inf
PS: у тебя код допускает сравнение с NaN результат которого всегда false
1<=nan даёт 1.0 (то есть тру). Надо поправить.
на пятерку нужно было в функции БИ3 использовать функцию БИ2...
Привыкай, детка :))
Начинается все вот с этого, а заканчивается Рунге-Куттами и симоляторами молеколы кислорода в емкости фалообразной формы.
{
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 простейших метода всё просто)вот и все что мне нужно было сделать)
Я твой пёс в шаверма клал!!1
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;
}
лучший - LINQ
LINQ ругает только тот, кто не знает LINQ
ути-пути, какая величайшая сложность. LINQ ругает еще тот, кто на настоящих монадах гоняет.