Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
1

Найти среднее арифметическое элементов массива без учёта максимального и минимального элементов

09.01.2016, 19:23. Просмотров 931. Ответов 30

Нужно найти среднее арифметическое элементов массива без учёта максимального и минимального элементов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Middle arithmetic without min and max elements of array.
#include <iostream>
int main()
{
    int n, a[n], min, max, summ, z;
    float mid;
    printf("Middle arithmetic without min and max elements of array.\n");
    printf("Input quantity of elements in array: ");
    std::cin>>n;
    printf("Input an array: \n");
    for(int i=0; i<n; i++)
    {
        printf("n[%i] -> ", i);
        std::cin>>a[i];
//      summ += a[i];
        if(a[i] != 0) z++;      
        
    }
    for (int j=0; j<n; j++)
    {
        summ += a[j];
        if(a[j] > max ) max = a[j];
        if(a[j]< min ) min = a[j];
    }       
    printf("\nSumm of elements is %i.\n", summ);
//  summ -= min;
    summ -= max;
    mid = summ / (n-2);
    printf("\nEntered array: ");
    for  ( int l = 0; l<n; l++)
        printf("%i ", a[l]);    
//  printf("\nMinimum element is %i.\n", min);
    printf("Maximum elenent is %i.\n", max);
 
    printf("Numbers that are bigger then 0: %i\n", z);
    printf("\nMiddle atithmetic without min and max: %.3f", mid);
 
    std::cin.get();
    return 0;
}
Что здесь сложного? Отдельно друг от друга сумма, мин., и макс. работают, сумма и макс. вместе тоже работают, а мин. приходится комментировать. Но вместе не работают:
C++
1
Process exited after 0.0179 seconds with return value 3221225725
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2016, 19:23
Ответы с готовыми решениями:

Найти среднее значение элементов массива (без учёта максимального и минимального) и вывести результат на экран
Условие задачи (добавлено спустя сутки после начала обсуждения, так что не...

Найти среднее арифметическое элементов массива без учета минимального и максимального элементов
Написать программу, которая вычисляет среднее арифметическое элементов массива...

Среднее арифметическое элементов массива без учета минимального и максимального элементов
Написать программу, которая вычисляет среднее арифметическое элементов массива...

Вычислить среднее арифметическое элементов массива без учета минимального и максимального элементов массива
Написать программу, которая вычисляет среднее арифметическое элементов массива...

Найти среднее арифметическое максимального и минимального элементов массива
Всем доброго времени суток. Нужна ваша помощь, с C++ только начал знакомится,...

30
jonson
234 / 207 / 84
Регистрация: 18.03.2010
Сообщений: 750
09.01.2016, 19:36 2
уверен что это вообще скомпилится?

int n, a[n], min, max, summ, z;
0
marat_miaki
149 / 138 / 86
Регистрация: 08.04.2013
Сообщений: 558
09.01.2016, 19:36 3
Не работает потому что нет первоначальных значении min=max=a[0];
0
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
09.01.2016, 19:39 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
#include <algorithm>
 
int main(int argc, char ** argv)
{
  std::vector<int> v {1, 2, 3, 4, 5, 6, 7, 8, 9};
  
  int sum = std::accumulate(v.begin(), v.end(), 0);
  int min = *(std::min_element(v.begin(), v.end() ));
  int max = *(std::max_element(v.begin(), v.end()));
 
  sum -= min - max;
 
  std::cout << "sum = " << ((double) sum) / v.size() << std::endl;
  std::cout << "min = " << min << std::endl;
  std::cout << "max = " << max << std::endl;
 
  return 0;
}
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
#include <algorithm>
 
int main(int argc, char ** argv)
{
  std::vector<int> v {1, 2, 3, 4, 5, 6, 7, 8, 9};
  
  int sum = std::accumulate(v.begin(), v.end(), 0);
  auto minmax = std::minmax_element(v.begin(), v.end());
 
  sum -= *minmax.first - *minmax.second;
 
  std::cout << "sum = " << ((double) sum) / v.size() << std::endl;
  std::cout << "min = " << *minmax.first << std::endl;
  std::cout << "max = " << *minmax.second << std::endl;
 
  return 0;
}
0
Даценд
Модератор
Эксперт .NET
4163 / 3942 / 2611
Регистрация: 20.04.2015
Сообщений: 7,149
09.01.2016, 19:41 5
Также нет начальных значений summ и z.
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 19:58  [ТС] 6
С закомментированным мин. наличие или отсутствие инициализации int n, a[n], min, max, summ, z не играет никакой роли - программа запускается, считает что-то.
0
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
09.01.2016, 20:00 7
Цитата Сообщение от Salah_Addin Посмотреть сообщение
инициализации int n, a[n], min, max, summ, z не играет никакой роли
каков размер *массива* a[n]?
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 20:02  [ТС] 8
Если проверять каждую функцию отдельно, например, сумму, а остальное в комментарий, то работает и правильно считает. Всё вместе - нет.

Добавлено через 1 минуту
Размер массива задаётся пользователем. Но я более 5 пока не использую.
0
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
09.01.2016, 20:03 9
Цитата Сообщение от Salah_Addin Посмотреть сообщение
Размер массива задаётся пользователем.
Так ты уже объявил массивл a[n], а n еще не инициализировал.
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 20:13  [ТС] 10
C++
1
2
printf("Input quantity of elements in array: ");
    std::cin>>n;
После этих двух строк мы уже знаем размер массива. Если вы скомпилируете код в том виде, как он дан, получите ошибку. Далее кидаем в комментарий
C++
1
2
    
//  if(a[j]< min ) min = a[j];
И получаем программу с урезанной функциональностью.

Добавлено через 1 минуту
Отсутствие инициализации a[n], повторяю, не мешает запуску.
0
Даценд
Модератор
Эксперт .NET
4163 / 3942 / 2611
Регистрация: 20.04.2015
Сообщений: 7,149
09.01.2016, 20:14 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Middle arithmetic without min and max elements of array.
#include <iostream>
int main()
{
    const int n=5;
    int a[n], min, max, summ=0, z=0;
    float mid;
    //printf("Middle arithmetic without min and max elements of array.\n");
    //printf("Input quantity of elements in array: ");
    //std::cin>>n;
    printf("Input an array: \n");
    for(int i=0; i<n; i++)
    {
        printf("n[%i] -> ", i);
        std::cin>>a[i];
        if(a[i] > 0) z++;      
    }
    min=a[0];
    max=a[0];
    for (int j=0; j<n; j++)
    {
        summ += a[j];
        if(a[j] > max ) max = a[j];
        if(a[j]< min ) min = a[j];
    }       
    printf("\nSumm of elements is %i.\n", summ);
    summ -= min;
    summ -= max;
    mid = summ / (n-2);
    printf("\nEntered array: ");
    for  ( int l = 0; l<n; l++)
        printf("%i ", a[l]);    
    printf("\nMinimum element is %i.\n", min);
    printf("Maximum elenent is %i.\n", max);
 
    printf("Numbers that are bigger then 0: %i\n", z);
    printf("\nMiddle atithmetic without min and max: %.3f", mid);
 
    std::cin.get();
    return 0;
}
0
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
09.01.2016, 20:15 12
Salah_Addin, ты хорошо подумал? Если работает, это еще не значит что всё хорошо. Переменная n не проинициализирована, а ты уже объявляешь *массив* a[n]. Он может быть какого угодно размера, хоть нулевого. Независимо от того что ты там в твою n ввел.
<fix>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
#include <algorithm>
 
int main(int argc, char ** argv)
{
  std::vector<int> v {1, 2, 3, 4, 5, 6, 7, 8, 9};
  
  int sum = std::accumulate(v.begin(), v.end(), 0);
  auto minmax = std::minmax_element(v.begin(), v.end());
 
  sum -= *minmax.first + *minmax.second;
 
  std::cout << "sum = " << ((double) sum) / v.size() << std::endl;
  std::cout << "min = " << *minmax.first << std::endl;
  std::cout << "max = " << *minmax.second << std::endl;
 
  return 0;
}
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 20:16  [ТС] 13
"Так ты уже объявил массивл a[n], а n еще не инициализировал."
То, о чём вы говорите, мы можем получить так:
C++
1
int a[n], n,  min=2, max=0, summ=0, z;
А вот так ошибки нет:
C++
1
int n, a[n],  min=2, max=0, summ=0, z;
0
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
09.01.2016, 20:20 14

Не по теме:

рукалицо



Добавлено через 41 секунду
в чем разница между словами "инициализация" и "декларация"?
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 20:25  [ТС] 15
Даценд, можно подробнее, почему в вашем случае всё работает. Заменяю
C++
1
const int n=5;
на
C++
1
2
3
4
5
6
7
    int n;
    ...
    printf("Middle arithmetic without min and max elements of array.\n");
    printf("Input quantity of elements in array: ");
    std::cin>>n;
    printf("Input an array: \n");
    ...
И дальше не работает. Почему?
0
jonson
234 / 207 / 84
Регистрация: 18.03.2010
Сообщений: 750
09.01.2016, 20:26 16
Цитата Сообщение от Salah_Addin Посмотреть сообщение
А вот так ошибки нет:
Цитата Сообщение от Salah_Addin Посмотреть сообщение
int n, a[n], *min=2, max=0, summ=0, z;
В какой среде удалось это скомпилировать?
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 20:34  [ТС] 17
"В чем разница между словами "инициализация" и "декларация"?"
"декларация":
C++
1
int i;
"инициализация":
C++
1
int i=0;
Проверка знаний это хорошо, но много не спрашивайте, я ничего не знаю.

Добавлено через 1 минуту
"В какой среде удалось ..."
Dev-C++
Win7

Добавлено через 5 минут
cyber-satyr, ваш пример у меня не запускается:

список ошибок

c++\Help from forum.cpp In function 'int main(int, char**)':
7 20 c++\Help from forum.cpp [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
7 48 с++\Help from forum.cpp [Error] in C++98 'v' must be initialized by constructor, not by '{...}'
7 48 c++\Help from forum.cpp [Error] no matching function for call to 'std::vector<int>::vector(<brace-enclosed initializer list>)'
7 48 c++\Help from forum.cpp [Note] candidates are:
64 0 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\vector In file included from c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\vector
2 c++\Help from forum.cpp from c++\Help from forum.cpp
398 9 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] template<class _InputIterator> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&)
398 9 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] template argument deduction/substitution failed:
7 48 c++\Help from forum.cpp [Note] cannot convert '3' (type 'int') to type 'const allocator_type& {aka const std::allocator<int>&}'
64 0 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\vector In file included from c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\vector
2 c++\Help from forum.cpp from c++\Help from forum.cpp
310 7 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = int; _Alloc = std::allocator<int>]
310 7 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] candidate expects 1 argument, 9 provided
295 7 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::size_type = long long unsigned int; std::vector<_Tp, _Alloc>::value_type = int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<int>]
295 7 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] candidate expects 3 arguments, 9 provided
256 7 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<int>]
256 7 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] candidate expects 1 argument, 9 provided
248 7 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] std::vector<_Tp, _Alloc>::vector() [with _Tp = int; _Alloc = std::allocator<int>]
248 7 c:\program files (x86)\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\bits\stl_vector.h [Note] candidate expects 0 arguments, 9 provided
9 13 с++\Help from forum.cpp [Error] 'accumulate' is not a member of 'std'
10 8 c++\Help from forum.cpp [Error] 'minmax' does not name a type
12 11 c++\Help from forum.cpp [Error] 'minmax' was not declared in this scope
0
Даценд
Модератор
Эксперт .NET
4163 / 3942 / 2611
Регистрация: 20.04.2015
Сообщений: 7,149
09.01.2016, 20:41 18
Цитата Сообщение от Salah_Addin Посмотреть сообщение
почему в вашем случае всё работает.
Потому что у меня размер массива известен до его создания.
0
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
09.01.2016, 20:42 19
Цитата Сообщение от Salah_Addin Посмотреть сообщение
ваш пример у меня не запускается
флаг компиляции --std=c++14
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 20:59  [ТС] 20
"флаг компиляции --std=c++14"
Что делать с этой информацией?

Добавлено через 2 минуты
" размер массива известен до его создания."
Это понятно, меняется всего лишь строка инициализации размера массива. А что под капотом? Почему в данном случае иные варианты неприемлемы?

Добавлено через 11 минут
cyber-satyr, я настаиваю на том, что мой вариант рабочий, и хочу знать, почему это не так. Вот программа, которая находит средне арифметическое, сумму элементов. Реализована также, половину я взял из неё, и всё работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Middle atithmetic of array elements that are bigger then zero.
#include <iostream>
 
int main()
{
    int n, a[n], i, summ = 0, z;
    float mid;
    printf("Middle atithmetic of array elements that are bigger then zero.\n");
    printf("Input quantity of elements in array: ");
    std::cin>>n;
    printf("Input an array: \n");
    for( i; i<n; i++)
    {
        printf("a[%i] -> ", i);
        std::cin>>a[i];
        if(a[i] != 0) z++;
        summ += a[i];
    }
    mid = summ / n;
    printf("\nEntered array: ");
    for  ( int l = 0; l<n; l++)
        printf("%i ", a[l]);    
    printf("\nSumm of elements is %i.\n", summ);
    printf("\nNumbers that are bigger then 0: %i\n", z);
    printf("Middle atithmetic of array elements: %.3f", mid);
    std::cin.get();
    return 0;
}
0
09.01.2016, 20:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2016, 20:59

Найти среднее арифметическое минимального и максимального элементов массива
найти среднее арифметическое минимального и максимального элементов массива...

Найти среднее арифметическое индексов минимального и максимального элементов массива
Определить среднее арифметическое индексов минимального и максимального...

Вычислите среднее арифметическое элементов последовательности без учета минимального и максимального
Дана последовательность из n целых чисел (n&lt;=200). Вычислите среднее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru