Как сделать чтобы возвращаемые значения из одной функции можно было использовать в другой функции?

Функция findMinMax возвращает min, max. Как сделать чтобы в функции production использовались значения min, max из первой функции?

#include <iostream>
#include <cstdlib>
#include <iomanip>

using namespace std;

void fillArray(int *A, int n)
{
    for (int i = 1; i < n; ++i)
    {
        A[i] = rand() % 50 + 1;
    }
}

void outputArray(int *A, int n)
{
    for (int i = 1; i < n; ++i)
    {
        cout << A[i] << " ";
    }
}

int findMinMax(int *A, int n, int min, int max)
{
    for (int i = 1; i < n; ++i)
    {
        min = A[1];
        max = A[1];
        if (A[i] > max) max = A[i];
        if (A[i] < min) min = A[i];
    }
    return min, max;
}

int production(int *A, int n, int min, int max)
{
    min = min / 2;
    max = max / 2;
    cout << "MIN: " << min << endl;
    cout << "MAX: " << max << endl;
    int P = 1;
    for (int i = 1; i < n; ++i)
    {
        if ((A[i] <= max) && (A[i] >= min)) P *= A[i];
        A[1] = P;
        A[n-1] = P;
    }
    return P;
}

int main()
{
    setlocale(LC_ALL, "RU");
    const int n = 10;
    int A[n];
    int min = A[1];
    int max = A[1];
    fillArray(A, n);
    cout << "Исходный массив A: ";
    outputArray(A, n);
    findMinMax(A, n, min, max);
    production(A, n, min, max);
    cout << "Преобразованный массив A: ";
    outputArray(A, n);
    return 0;
}

Выдаёт ошибки что использованы неинициализированные локальные переменные min, max. Пробовал ставить указатели, ссылки в параметрах функции, менял тип на void и т.п. но на данный момент не могу понять в чём проблема.


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

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

Просто передавайте из main параметры по ссылке

int findMinMax(int *A, int n, int& min, int& max) {}
int production(int *A, int n, int& min, int& max) {}

int main()
{
    int min = A[1];
    int max = A[1];
 
    findMinMax(A, n, min, max);
    production(A, n, min, max);
    return 0;
}
→ Ссылка
Автор решения: Harry

У вас функция неработающая. Потому что она не находит ни минимум, ни максимум, и возвращает только максимум между A[1] и A[N-1].

Начнем с того, что в вашем варианте непонятно, зачем вам вообще передавать min и max, а не объявлять их локально? Вы хотите получать в переданных аргументах возвращаемые значения? Тогда передавайте их по ссылке: не

int findMinMax(int *A, int n, int min, int max)

а

int findMinMax(int *A, int n, int& min, int& max)

Но если вы возвращаете значения через аргументы — то int не нужен:

void findMinMax(int *A, int n, int& min, int& max)

Поехали дальше:

    for (int i = 1; i < n; ++i)
    {
        min = A[1];
        max = A[1];

Т.е. на каждой итерации вы снова и снова присваиваете значение A[1] и сравнения выполняете только с ним. Зачем?

Логичнее

        min = A[0];
        max = A[0];

    for (int i = 1; i < n; ++i)
    {

Тем более что нумерация элементов массива начинается с 0. Правда, вы везде почему-то начинаете нумерацию с 1. Это имеет какой-то смысл?... Тогда замените в строках выше 0 на 1.

        if (A[i] > max) max = A[i];
        if (A[i] < min) min = A[i];
    }

Теперь

    return min, max;

не нужен, но он и раньше не работал — потому что возвращал только (читайте об операторе "запятая") одно значение — max, а не, как вам казалось, два...

→ Ссылка