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

Регистрация
17 Фев 2013
Сообщения
91
Репутация
10
Спасибо
0
Монет
0
Задание:



В одномерном массиве найти среднее арифметическое для элементов,

расположенных между максимальным и минимальным. Если они следуют один за

другим, считать его равным нулю. Количество элементов в массиве не более 200.

Формат числа цц.ц. Массив распечатывать по десять элементов на строке.



Я написала программу, но на строке "sum = sum + arr;" компилятор ругается на 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 = (rand() % 2000) / 10.;

printf("%.1f ", arr);

}

printf("\n");



float min = numeric_limits<float>::max();

for(int i = 0; i < n; i++)

{

if(arr < min)

min = arr;

}

printf("Минимум = %.1f", min);

printf ("\n");



float max = numeric_limits<float>::min();

for(int i = 0; i < n; i++)

{

if(arr > max)

max = arr;

}

printf("Максимум = %.1f", max);

printf ("\n");



float sum, k, i;

sum = 0;

k = 0;

for(i = min + 1; i < max; i++)

{

sum = sum + arr;

k = k + 1;

}

printf("Среднее арифметическое = %.1f", sum / k);



system("PAUSE");

return 0;

}
 
В данном случае ошибка возникает из-за того, что вы используете переменную 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.
 
Естественно. Индекс не может быть типа float
float sum, k, i; ... sum = sum + arr;
Но в программе еще много чего не так :( И массив должен быть не из десяти элементов, и суммируются элементы между максимальным и минимальным элементами. а не их значениями.

#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=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
#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 = RAND(100, 1000) / 10.0;
}
cout
 
Леди Дарья, выше правильно заметили, что проблема на этапе компиляции - неверный тип переменной для индексируемого типа данных - массива: индекс - целое число, никак не дробное. Также вижу путаницу с индексом и значением минимума и максимума

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

using namespace std;


int main(){
int n;
cout > n;
double arr[n], sum[n + 1];
sum[0] = 0;
pair mx, mn;
cout > arr;
if(i == 0){
mx = {arr, i};
mn = mx;
}
else{
if(arr < mn.first) mn = {arr, i};
if(arr > mx.first) mx = {arr, i};
}
sum[i + 1] = sum + arr;
}
if(mx.second < mn.second) swap(mx.second, mn.second);
if(mx.second - mn.second < 2) cout
 
Назад
Сверху