C/C++

Не работает программа С++. Помогите, пожалуйста, найти и решить проблему!

Задание:

В одномерном массиве найти среднее арифметическое для элементов,
расположенных между максимальным и минимальным. Если они следуют один за
другим, считать его равным нулю. Количество элементов в массиве не более 200.
Формат числа цц.ц. Массив распечатывать по десять элементов на строке.

Я написала программу, но на строке "sum = sum + arr[i];" компилятор ругается на i:
"error: invalid types ‘float [10][float]’ for array subscript"

Программа:

#include <stdio.h>
#include <iostream>
#include <limits>

using namespace std;

int main()
{
setlocale(LC_ALL, "ru");

const int n = 10;
float arr[n];

srand(time(0));
const size_t size = 10;
cout << "Целочисленный массив из " << n << " случайных чисел:\n";


for (int i = 0; i < n; i++)
{
arr[i] = (rand() % 2000) / 10.;
printf("%.1f ", arr[i]);
}
printf("\n");

float min = numeric_limits<float>::max();
for(int i = 0; i < n; i++)
{
if(arr[i] < min)
min = arr[i];
}
printf("Минимум = %.1f", min);
printf ("\n");

float max = numeric_limits<float>::min();
for(int i = 0; i < n; i++)
{
if(arr[i] > max)
max = arr[i];
}
printf("Максимум = %.1f", max);
printf ("\n");

float sum, k, i;
sum = 0;
k = 0;
for(i = min + 1; i < max; i++)
{
sum = sum + arr[i];
k = k + 1;
}
printf("Среднее арифметическое = %.1f", sum / k);

system("PAUSE");
return 0;
}
 #include  
#include
#include
#include

#define RAND(min, max) (rand() % ((max) - (min)) + (min))

using namespace std;

int main() {
system("chcp 1251 > nul");
srand(unsigned(time(nullptr)));
constexpr size_t limit = 200;
double box[limit]{};
cout > length;
puts("");
if (length > limit) length = limit;
for (size_t i = 0; i < length; ++i) {
box[i] = RAND(100, 1000) / 10.0;
}
cout
Руслан Ошлаков
Руслан Ошлаков
90 510
Лучший ответ
Естественно. Индекс не может быть типа float
float sum, k, i; ... sum = sum + arr[i];
Но в программе еще много чего не так :( И массив должен быть не из десяти элементов, и суммируются элементы между максимальным и минимальным элементами. а не их значениями.

#include "iostream"
#include "numeric"
#include "ctime"
#include "cstdlib"
#include "algorithm"
using namespace std;
int main(){
int n; cout<<"N: "; cin>>n; float *a=new float[n],s; srand(time(NULL));
for(int i=0;i<n;i++){cout<<(a[i]=rand()%1000/10.)<<'\t'; if(i%10==9)cout<<endl;}
float *i=max_element(a,a+n), *j=min_element(a,a+n); cout<<endl;
if(j>i)swap(i,j); s=accumulate(j+1,i,0.); int m=i-j-1;
cout<<"\nav="<<(m?s/m:0.)<<endl;}
Серик Аежанов Спасибо большое! Странно, что сама не заметила, хотя думала, что перебрала уже всё...
А не подскажите: среднее арифметическое я верно начала считать? В ответе околесица получается, боюсь, опять упустила где-то деталь, из-за чего всё идёт не так.
Леди Дарья, выше правильно заметили, что проблема на этапе компиляции - неверный тип переменной для индексируемого типа данных - массива: индекс - целое число, никак не дробное. Также вижу путаницу с индексом и значением минимума и максимума

Могу предложить следующее решение задачи:
 #include  

using namespace std;


int main(){
int n;
cout > n;
double arr[n], sum[n + 1];
sum[0] = 0;
pair mx, mn;
cout > arr[i];
if(i == 0){
mx = {arr[i], i};
mn = mx;
}
else{
if(arr[i] < mn.first) mn = {arr[i], i};
if(arr[i] > mx.first) mx = {arr[i], i};
}
sum[i + 1] = sum[i] + arr[i];
}
if(mx.second < mn.second) swap(mx.second, mn.second);
if(mx.second - mn.second < 2) cout
M Hafizov
M Hafizov
282
Серик Аежанов Благодарю за помощь!
В данном случае ошибка возникает из-за того, что вы используете переменную i как индекс массива, но она объявлена как тип float. Индексами массива могут быть только целые числа, так что вам нужно объявить i как int. В данном случае это можно сделать, заменив строку

Copy code
float sum, k, i;
на

Copy code
float sum, k;
int i;
После этого ошибка должна исчезнуть.

Некоторые дополнительные рекомендации:

В C++ рекомендуется использовать стандартную библиотеку <algorithm> для поиска максимума и минимума в массиве. Это будет более эффективно, чем проходить по всему массиву в цикле и сравнивать каждый элемент с текущим максимумом или минимумом. Например, для поиска минимума можно использовать функцию std::min_element, а для поиска максимума - std::max_element.