нахождения максимального аргумента функции

Нужно найти максимальный аргумент функции, но вот не задача, выдает следующие ошибки : cout: необъявленный идентификатор endl: необъявленный идентификатор system: идентификатор не найден сам код -

#include <stdio.h>
#include <stdarg.h>
using namespace std;
int max(int razmer,...);
void main()
{
    cout<<max(3,4,11,24,-4,-1)<<endl;
    cout<<max(4,31,23,45,1,-1)<<endl;
    system("pause");
}
int max(int razmer,...)
{
    va_list param;
    va_start(param,razmer);
    int max = 0;
    int cur;
    for (int i = 0;i<razmer;i++)
    {
        cur=va_arg(param,int);
        if (cur>max) max=cur;
    }
    va_end(param);
    return max;
}

Ответы (1 шт):

Автор решения: Zhihar

У вас несколько ошибок в коде

#include <stdio.h>
#include <stdarg.h>

// 1. (ОШИБКА) - не хватает библиотеки для функции std::cout
#include <iostream> 

// 2. (РЕКОМЕНДАЦИЯ) - вообще на любителя - кто-то любит не использовать пространство имен и вызывать функции cout полностью как std::cout, std::endl
// в этом случае нижняя строчка не нужна

using namespace std;

// 3. (РЕКОМЕНДАЦИЯ) - опять же на любителя, но лучше все таки функцию main указывать ниже всех остальных функций, в этом случае нижняя строчка не нужна 
int max(int razmer,...);

void main()
{
    cout<<max(3,4,11,24,-4,-1)<<endl;
    cout<<max(4,31,23,45,1,-1)<<endl;
    system("pause");
}

// 4. (РЕКОМЕНДАЦИЯ) - лучше использовать принцип минимальной необходимости - т.е. код должен делать ровно то, что вы от него ждете и ничего большего
// например, переменная razmer не должна меняться в теле функции, значит ее лучше объявить как константу, т.е. int max(const int razmer,...)
int max(int razmer,...)
{
    va_list param;
    va_start(param,razmer);

    // 5. (ОШИБКА) - вот тут проблема алгоритма, числа у вас целые, т.е. могут быть и отрицательными, а вы сразу выставляете им значение 0, поэтому такой вызов
    // (-4,-31,-23,-45,-10000,-100)
    // выдаст 0, хотя должен был бы выдать -4
    // поэтому лучше определить max как минимально возможное целое число
    // int max = std::numeric_limits<int>::min()
    // Для чего потребуется подключить библиотеку #include <limits> 
    int max = 0;

    // 6. (РЕКОМЕНДАЦИЯ) - опять же из соображений минимальной необходимости - переменная cur используется только внутри цикла, поэтому и определите ее внутри цикла, причем поскольку она не меняется, то можно сразу определить ее как константу
    // const int cur = va_arg(param,int)
    int cur;
    for (int i = 0;i<razmer;i++)
    {
        cur=va_arg(param,int);
        if (cur>max) max=cur;
    }
    va_end(param);

    // 7. (РЕКОМЕНДАЦИЯ) по хорошему если в функцию не было передано ни одно значение, то хорошо бы об этом как-нибудь сигнализировать, а не выдавать какое-то значение
    return max;
}
→ Ссылка