нахождения максимального аргумента функции
Нужно найти максимальный аргумент функции, но вот не задача, выдает следующие ошибки : 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;
}