не работает функция через указатели в C++
Одна функция работает нормально, а вторая нет. Суть задачи - найти произведение элементов массива с помощью функции, которая будет возвращать результат по указателям.
Код всей программы:
using namespace std;
int* FindMax(int *arr, int *n)
{
int* max = arr;
for (int i=0; i<(*n); i++)
{
if ((*max)<(*(arr + i))) {
(*max) = (*(arr + i)); }
}
return max;
}
int* FindProiz(int *arr, int *n)
{
int t = 1;
int* P = &t;
for (int i=1; i<(*n); i++)
{
(*P)= (*P) * (*(arr + i));
}
return P;
}
int main()
{
int n = 0;
cin>>n;
int *arr = new int [n];
for (int i=0; i<n; i++)
{
cout<<"arr["<<i<<"] = ";
cin>>(*(arr + i));
cout<<endl;
}
cout<<"Max = "<< *(FindMax(arr, &n))<<endl;
cout<<"Proiz = "<< *(FindProiz(arr, &n))<<endl;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Вобщем, так. Работа с указателями не означает, что надо делать через указатели всё. Если это учебное задание - то от вас явно ждут просто умения работать с массивом через указатель. Так что я бы исправил ваш код так:
int* FindMax(int *arr, int n) //функция для нах-ия максимума
{
int* max = arr;
for (int i = 1; i< n; i++)
if (*max < *(arr + i)) max = arr + i;
return max;
}
int FindProiz(int *arr, int n) //функция для нах-ия произведения
{
int P = 1;
for (int i = 0; i < n; i++)
P *= *(arr + i);
return P;
}
int main()
{
int n = 0; //вводим кол-во эл-ов,потом их сравним
cout<<"Размерность массива n = ";
while (!(std::cin >>n && n>0))
{
cin.clear();
while(cin.get()!='\n');
cout<<"ВВЕДЕНО НЕВЕРНОЕ ЗНАЧЕНИЕ"<<endl;
cin.clear();
}
cout << endl;
int * arr = new int[n]; //иниз-ем массив указателей
for(int i = 0; i < n; i++)
{
cout<<"arr["<<i<<"] = ";
while (!(std::cin >> *(arr + i)))
{
cin.clear();
while(cin.get()!='\n');
cout<<"ВВЕДЕНО НЕВЕРНОЕ ЗНАЧЕНИЕ"<<endl;
cin.clear();
}
}
cout<<"Max = " << *FindMax(arr, n) << endl;
cout<<"Proiz = "<< FindProiz(arr, n) << endl;
}