Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > использование функции maximum


Автор: ShadowC 28.8.2011, 17:07
собственно попытался использовать функцию maximum ничего не получилось,попытался использовать его в самом элементарном контексте 

Код

#inclide <iostream>
using namespace std;

int main()
{
int x,y,z;
int result;
cin>>x>>y>>z;
result=maximum(x,y,z);
cout<<result<<endl;
system("PAUSE");
return 0;
}


выдает ошибку "maximum undeclared (first use this function)" которая сообщает мне,что maximum необьявлена, собственно в чем заключается ошибка? и как её можно исправить?
P.S. копилятор Dev-C++ 

Автор: Чoо 28.8.2011, 19:04
я знаю функции нахождения максимума или минимума для двух аргументов. fmax и fmin
обе в cmath

Автор: ShadowC 28.8.2011, 19:12
не,эта функция предназначена для возврата наибольшего из 3 аргументов и в том что она называется maximum  в этом я уверен,но вот блин чего-то я недопонимаю в её использование и да использование библиотеки <cmath> не помогает уже пробовал...

Автор: Чoо 28.8.2011, 19:14
поиск максимума из с использованием fmax будет выглядеть так: 
Код

result = fmax(x,fmax(y,z));


Добавлено через 1 минуту и 4 секунды
ну не знаю тогда где функция максимум.. можно ее самому написать для n-го количества аргументов, если спользовать макросы

Автор: spyswamp 29.8.2011, 10:50
Чoо, не советуй никому использовать макросы для этих целей. Ты чего.

Автор: ShadowC 29.8.2011, 11:58
я кстате по поводу этой функции в и инете не смог ничего нарыть....

Автор: ZVano 29.8.2011, 12:04
http://liveworkspace.org/code/e292e7556a12c8fba38862ccf0fd23b6
GetMaxOfPositive - возвращает максимальное положительное целое из указаного списка значений. Последнее значение должно быть отрицательнвм и является признаком завершения списка аргументов.
GetMaxOfCount - возвращает максимальное целое из переданых аргументов. 1м аргументом следует передать количество передаваемых значений (без учета 1го аргумента).

Код

#include <iostream>
#include <stdarg.h>

int GetMaxOfPositive(int firstVal, ...) {
   int result = firstVal;
   int curVal = firstVal;

   va_list args;
   va_start(args, firstVal);
   do {
      if (curVal > result) {
         result = curVal;
      }
   } while ((curVal = va_arg(args, int)) >= 0);
   va_end(args);

   return result;
}

int GetMaxOfCount(int argsCount, ...) {
   int result = 0;

   va_list args;
   va_start(args, argsCount);
   for(int cnrArgs = 0; cnrArgs < argsCount; cnrArgs++){
     int curVal = va_arg(args, int);
      if (curVal > result) {
         result = curVal;
      }
   }
   va_end(args);

   return result;
}

int main(){
   std::cout << "GetMaxOfPositive(...)::" << GetMaxOfPositive(2, 4, 1, 10, 7, -1) << std::endl;
   std::cout << "GetMaxOfCount(3, ...)::" << GetMaxOfCount(3, 1, 2, 3) << std::endl;
   std::cout << "GetMaxOfCount(4, ...)::" << GetMaxOfCount(4, 4, 3, 2, 1) << std::endl;
}

Автор: xvr 29.8.2011, 12:23
Цитата(ShadowC @  28.8.2011,  17:07 Найти цитируемый пост)
попытался использовать функцию maximum

Откуда вы ее вообще взяли? Такой стандартной функции нет.

Автор: Чoо 29.8.2011, 12:31
spyswamp, имел ввиду что-то вроде этого:
Код

#include <iostream>
#include <cstdarg>

int maximum(const int count, ...){
    va_list p;
    va_start(p, count);
    int r = va_arg(p,int);
    for(int i = 2; i<=count; ++i)
        if(r<(int)*p)
            r = va_arg(p,int);
    va_end(p);
    return r;
}

int main(){
    std::cout<<maximum(4,2,10,1);
    return 0;
}

конечно лучше передавать список аргументов в массиве, в противном случае вся ответственность по передаче параметров на программисте

Добавлено @ 12:32
пока писал, мня опередили  smile 

Автор: spyswamp 29.8.2011, 12:47
Однако стоит учитывать, что эти функции нужны будут не только для int'ов. ;)

Автор: boostcoder 29.8.2011, 13:02
лучше написать шаблоны.
а еще лучше, один шаблон с variadic templates ;)

Автор: spyswamp 29.8.2011, 14:58
А еще лучше не страдать фигней. smile Ряд более чем из двух элементов - уже коллекция/массив, а ее/его можно отдать стандартному алгоритму.

Автор: mes 29.8.2011, 20:18
Цитата(boostcoder @  29.8.2011,  12:02 Найти цитируемый пост)
а еще лучше, один шаблон с variadic templates ;) 

ммм, это чтоб получать максимум для разнотипных переменных ?! азачем ?

Автор: boostcoder 30.8.2011, 02:47
Цитата(mes @  29.8.2011,  20:18 Найти цитируемый пост)
это чтоб получать максимум для разнотипных переменных ?!

угу

Цитата(mes @  29.8.2011,  20:18 Найти цитируемый пост)
азачем ? 

эм...щаподумаю..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)