проще добавить структурку. . .и ею оперировать. . .например:
<...>
struct res {
int k1;
int k2;
int k3;
};
res* f_opr(int x[], int n) {
res* temp = new res; //создаем структуру и временный указатель на нее. . .
for (int i = 0; i < n; i++)
if (x[i] > 0) temp->k1++;
else if (x[i] < 0) temp->k2++;
else temp->k3++;
return (temp); // возвращаем указатель
}
int _tmain(int argc, _TCHAR* argv[]) {
res *myres; //создаем указатель на структурку
<...>
myres = f_opr(arr,n); // где arr - массив, n - размер массива
std::cout << myres->k1 << '\n';
std::cout << myres->k2 << '\n';
std::cout << myres->k3 << '\n';
<...>
delete [] myres; // удаляем структуру. . .
return 0;
}
ну и как вы наверное поняли структура может состоять из чего угодно.... и целочисленные переменные. . .и вещественные. . .и текст. . .и любые их комбинации.
замечания:
1) зачем setlocate во второстепенной функции? перенесите в главную. . .в начало. . .
2) for (i = 0; i <= n;i++) - почему "i<=n" ? нумерация идет от нуля, а не с единицы. . .таким условием вы проверяете еще 1 значение в памяти, которое не находится в массиве. . .
скажем у вас массив из 5 элементов. . .а вы проверяете
0 - первый
1 - второй
...
5 - шестой
Другие языки программирования и технологии
Возврат нескольких значений функции
если нужно вернуть несколько значений, создайие структуру в функции, заполните ее нужными значениями и вените указатель на эту структуру.
ну в конкретно вашем случае можно исхитриться и вернуть все в одном int,
например если нужно установить k1 то создаем некую переменную result, обнулим ее и прибавим к ней 1, если надо вернуть k2, то прибавим к ней 10, если надо вернуть k3, то прибавим к ней 100, таким образом у нас получатся как бы флаги, ну только не бинарные, а десятичные.
теперь после возвращения из функции мы можем однозначно сказать, какие переменные в функциии были установлены, а какие нет.
если итераций в цикле не более 9, если больше, то надо будет соответственно другие значения выбрать, чтобы не перекрывались, например 1, 100, 1000.
тогда потом можно однозначно сказать, сколько раз мы добавили 1, сколько 100 и сколько 1000.
то есть фактически надо придумать новую систему счисления, в которой разряд не превосходит количество итераций - 1, если кол-во итераций равно разрядности, то мы уже не сможем однозначно сказать, прибавили мы 100 раз единицу или 1 раз 100
ну в конкретно вашем случае можно исхитриться и вернуть все в одном int,
например если нужно установить k1 то создаем некую переменную result, обнулим ее и прибавим к ней 1, если надо вернуть k2, то прибавим к ней 10, если надо вернуть k3, то прибавим к ней 100, таким образом у нас получатся как бы флаги, ну только не бинарные, а десятичные.
теперь после возвращения из функции мы можем однозначно сказать, какие переменные в функциии были установлены, а какие нет.
если итераций в цикле не более 9, если больше, то надо будет соответственно другие значения выбрать, чтобы не перекрывались, например 1, 100, 1000.
тогда потом можно однозначно сказать, сколько раз мы добавили 1, сколько 100 и сколько 1000.
то есть фактически надо придумать новую систему счисления, в которой разряд не превосходит количество итераций - 1, если кол-во итераций равно разрядности, то мы уже не сможем однозначно сказать, прибавили мы 100 раз единицу или 1 раз 100
Добавить несколько параметров и потом в функции им присваивать значения.
void f_opr(int x[], int k[])
{setlocale(0, "Rus");
int i;
int k1=0, k2=0, k3=0;
for (i = 0; i <= n;i++)if (x[i] > 0)
k1++;
else
if (x[i] < 0) k2++;
else k3++;
k[0] = k1;
k[1] = k2;
k[2] = k3;
}
и ничего возвращать не надо. просто в программе создай еще один массив с тремя элементами . а потом просто массивом пользуйся.
{setlocale(0, "Rus");
int i;
int k1=0, k2=0, k3=0;
for (i = 0; i <= n;i++)if (x[i] > 0)
k1++;
else
if (x[i] < 0) k2++;
else k3++;
k[0] = k1;
k[1] = k2;
k[2] = k3;
}
и ничего возвращать не надо. просто в программе создай еще один массив с тремя элементами . а потом просто массивом пользуйся.
Похожие вопросы
- С++.Составить программу для определения таблицы значений функции у в произвольном диапазоне [a, b
- Для аргумента x, изменяющегося от –0.6 с шагом 0.05 вычислить 20 значений функций.
- как в с++ возвращать значение функции больше одного? допустим сразу несколько значений
- Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x)
- c++ возврат char из функции
- Что значит возвращение и невозвращение значения функции? И чем отличается void от int?
- Что значит возвращает значение функции? для чего нужен оператор return в си? как он работает?
- Вычислить значение функции y=sinx – cosAX + B, где Х изменяется от 1 до 10, А от 10 до 1, В=2, шаг равен 3. Составить
- помогите решить на паскале 3. Вычислить значение функции tg(x)/x2 на интервале от *-5, 5] c шагом h = 0.1.
- C#. Как прописать несколько одинаковых функций так, чтобы они возвращали результаты разных типов?