Тема: Вказівники
Код і умова:
В одновимірному масиві, що складається з n дійсних елементів, знайдіть:
1) максимальний елемент масиву (3 бали);
2) суму елементів масиву, розташованих до останнього додатного елемента (+1 бал);
3) стисніть масив, видаливши з нього всі елементи, модуль яких знаходиться в інтервалі [a, b].
Елементи, що звільняються в кінці масиву, заповніть нулями (+1 бал).
#include "pch.h"
#include <iostream>
#include <ctime>
using namespace std;
int maximum(int *p, int n)
{
int max = *(p + 0);//нехай перший елемен - найбільший
for (int i = 0;i < n;i++)
{
if (max < *(p + i))//якщо найбільший елемент менший за поточний то
{
*(p + i) = max;//тепер поточний елемент найбільший
}
}
return max;
}
int summa(int *p, int n)
{
int sum = 0;
for (int i = n; i > 0;i--)// рухаємся з кінця до першого додатнього
{
if (*(p + i) > 0)//якщо додатній то:
{
for (int j = 0;j < i;j++)//сумуємо всі від першого елемента і до того, який задовільнив if (*(p + i) > 0)
{
sum += *(p + j);
}
break;//після додавання виходим з циклу
}
}
return sum;
}
int main()
{
srand(time(NULL));
setlocale(LC_CTYPE, "ukr");
int a, b, n;
cout << "Введiть кiлькiсть чисел:";
cin >> n;
int *arr = new int[n];
for (int i = 0;i < n;i++)
{
arr[i] = rand() % 50 - i;
cout << arr[i] << "\t";
}
cout << endl;
/*cout << "Введiть iнтервал стиснення масиву від ";
cin >> a;
cout << " до ";
cin >> b;*/
cout << " Максимальний елемент масиву:" << maximum(arr, n) << endl;
cout << "Сума значень масиву до отаннього додатнього елемента:" << summa(arr, n) << endl;
delete[]arr;
}
Результат:
Введiть кiлькiсть чисел:10
12 -1 47 17 24 40 25 35 28 2
Максимальний елемент масиву:12
Сума значень масиву до отаннього додатнього елемента:95
Максимальний завжди перший елемент, тобто цикл пошуку найбільшого числа не працює, і сума не зрозуміло яка виходить.
Допоміжіть знайти помилки будь-ласка