Задание:
В одномерном массиве найти среднее арифметическое для элементов,
расположенных между максимальным и минимальным. Если они следуют один за
другим, считать его равным нулю. Количество элементов в массиве не более 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;
}
C/C++
Не работает программа С++. Помогите, пожалуйста, найти и решить проблему!
#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
Естественно. Индекс не может быть типа 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;}
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
Серик Аежанов
Благодарю за помощь!
В данном случае ошибка возникает из-за того, что вы используете переменную 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.
Copy code
float sum, k, i;
на
Copy code
float sum, k;
int i;
После этого ошибка должна исчезнуть.
Некоторые дополнительные рекомендации:
В C++ рекомендуется использовать стандартную библиотеку <algorithm> для поиска максимума и минимума в массиве. Это будет более эффективно, чем проходить по всему массиву в цикле и сравнивать каждый элемент с текущим максимумом или минимумом. Например, для поиска минимума можно использовать функцию std::min_element, а для поиска максимума - std::max_element.
Похожие вопросы
- Помогите пожалуйста написать программу на Си
- Помогите пожалуйста решить программу на языке СИ!!!
- Помоги пожалуйста с программой в С++
- Помогите пожалуйста с программой
- Помоги пожалуйста написать программу на C++
- Помогите пожалуйста составить задачу на программе С++
- Помогите пожалуйста составить правильную программу на C++ 12 вариант
- Помогите пожалуйста написать программу!
- Помогите пожалуйста написать программу на С++
- Здравствуйте! Помогите, пожалуйста, с программой С++
А не подскажите: среднее арифметическое я верно начала считать? В ответе околесица получается, боюсь, опять упустила где-то деталь, из-за чего всё идёт не так.