Модераторы: gambit, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вычисли max / avg / min значения массива? 
:(
    Опции темы
Resident
  Дата 3.4.2010, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Не нашел таких методов в .NET. Есть только Math.Min() / Max() но они возвращают результат из двух чисел. Есть ли подобные функции для работы с массивами?

Это сообщение отредактировал(а) Resident - 3.4.2010, 21:23
PM   Вверх
Fortnox
Дата 3.4.2010, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



Resident, нет.

Да и не нужны они. Нахождение минимального/максимального/среднего значения пишутся за 10 секунд.
PM MAIL   Вверх
Resident
Дата 3.4.2010, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Сама функция то несложная. Я просто думал может есть в стандартной библиотеке. В PHP например есть такая функция. Поскольку таких функций стандартно нет, то как перегрузить System::Math::Max? Точнее наверное где именно нужно писать код перегрузки?

PS: Я только начинаю .NET изучать.
PM   Вверх
diadiavova
Дата 3.4.2010, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142





--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Resident
Дата 4.4.2010, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Цитата(diadiavova @ 3.4.2010,  23:58)
http://msdn.microsoft.com/ru-ru/library/bb...5(v=VS.90).aspx

Я так понимаю класс Enumerable находится в пространстве имен System.Linq, но у меня почему то нет такого пространства имен.

Код

1>.\Bid Checker.cpp(17) : error C2039: Linq: не является членом "System"
1>.\Bid Checker.cpp(17) : error C2065: Linq: необъявленный идентификатор


 smile 

Это сообщение отредактировал(а) Resident - 4.4.2010, 00:09
PM   Вверх
Fortnox
Дата 4.4.2010, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



Resident, LINQ нет в .Net Framework 2.0, он появился в 3 версии. 
Нужно изменить версию .Net Framework проекта с 2.0 на 3.0 и добавить ссылку (Reference) на System.Data.Linq.
PM MAIL   Вверх
diadiavova
Дата 4.4.2010, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Цитата(Fortnox @  4.4.2010,  01:37 Найти цитируемый пост)
 с 2.0 на 3.0

Точнее на 3.5


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Resident
Дата 4.4.2010, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



В свойствах проекта стоит версия .NET Framework 3.5. Студия 2008. Добавил ссылку на System.Data.Linq - появилось пространство имен System::Data::Linq, но класса Enumerable там нет. 

Это сообщение отредактировал(а) Resident - 4.4.2010, 00:58
PM   Вверх
diadiavova
Дата 4.4.2010, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Добавь ссылку на System.Core.dll
И импортируй пространство System.Linq в код, тогда все методы появятся у в всех коллекций.

Это сообщение отредактировал(а) diadiavova - 4.4.2010, 01:00


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Fortnox
Дата 4.4.2010, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



Resident, он в пространстве System.Linq (System.Linq.Enumerable)

diadiavova, точно smile 
PM MAIL   Вверх
Resident
Дата 4.4.2010, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Цитата(diadiavova @ 4.4.2010,  01:59)
Добавь ссылку на System.Core.dll
И импортируй пространство System.Linq в код, тогда все методы появятся у в всех коллекций.

Это помогло, спасибо!

Это сообщение отредактировал(а) Resident - 4.4.2010, 01:13
PM   Вверх
Resident
Дата 4.4.2010, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Правда, как использовать это дальше непойму. Метод System::Linq::Enumerable::Max() принимает не массив, а System::Collections::Generic::IEnumerable<double> ^ surce. Что это такое и как это использовать пока не разобрался. Создал переменную и передал ее в функцию Enumerable::Max() 
Код

System::Collections::Generic::IEnumerable<double> ^ x;
double y = System::Linq::Enumerable::Max(x);


Скомпилировалось без ошибок, но как данные добавить я что то не пойму.
PM   Вверх
diadiavova
Дата 4.4.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



В массивах реализован этот интерфейс, поэтому используй обычное приведение типов.

Вообще, если бы это писалось на шарпе, то там всё совсем просто, если массив называется x, то выражение выглядело бы так
Код

double y = x.Max();
Как на плюсах не знаю. Видимо как-то так
Код

double y = Enumerable::Max((IEnumerable<double>)x);


Это сообщение отредактировал(а) diadiavova - 4.4.2010, 11:47


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Resident
Дата 4.4.2010, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 25.9.2006

Репутация: нет
Всего: 0



Не получается так в C++, как только не пробовал уже. :(
PM   Вверх
Fortnox
Дата 4.4.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



Resident, System::Collections::Generic::IEnumerable - это интерфейс. 
В качестве аргумента для методов класса Enumerable нужно указывать объект, который реализует данный интерфейс (грубо говоря, если у объекта есть метод GetEnumerator())
Не надо прямо создавать объект типа IEnumerable, можно просто объявить массив.
Пример:
Код

    Console::Write("Array size: ");
    int n = int::Parse(Console::ReadLine()); // размер массива
    array<int>^ ar = gcnew array<int>(n); // объявление массива
    
    // добавляем элементы в массив
    for (int i=0; i<=n-1;++i)
    {
        Console::Write("Enter a[{0}]= ", i);
        ar[i] = int::Parse(Console::ReadLine());
    }
    
    // ищем максимальный элемент
    int max = System::Linq::Enumerable::Max(ar);
    Console::WriteLine(max);
    Console::ReadLine();

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.