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