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

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

09.01.2016, 19:23. Просмотров 907. Ответов 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
Даценд
Модератор
Эксперт .NET
4099 / 3918 / 2593
Регистрация: 20.04.2015
Сообщений: 7,108
09.01.2016, 21:05 #21
Цитата Сообщение от Salah_Addin Посмотреть сообщение
А что под капотом?
Если в двух словах, то при создании массива выделяется память по смежным адресам под его элементы. У меня в коде количество элементов зависит от константы n=5. Память под 5 элементов выделяется и закрепляется, т.е. по выделенным адресам ничего другого записано не будет. Ваш компилятор позволяет объявить массив без указания его размера. При создании массива его идентификатор содержит адрес его нулевого элемента. Сдвигая через индексацию указатель к следующим адресам памяти можно получать значения в них хранящиеся. Но так как память не была выделена под элементы (а главное не закреплена), то по этим адресам хранится мусор, который интерпретируется как значения типа int. Поэтому программа работает неверно.
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 21:14  [ТС] #22
1)"Ваш компилятор позволяет объявить массив без указания его размера. "
Это свойство только моего компилятора?
2) Допустим, я признаю, что из-за отсутствия инициализации размера массива не была выделена и закреплена память. Как в таком случае, вы объясните, что программа работает, если нахождение минимального закомментировать? Функция нахождения макс. и суммы могут работать в суровых условиях отсутствия размера массива, а мин. особенная?
0
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
09.01.2016, 21:30 #23
Цитата Сообщение от Salah_Addin Посмотреть сообщение
Это свойство только моего компилятора?
А тут нет никакой синтаксической ошибки. Это семантическая ошибка. Компилятор такие и не должен отлавливать.
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 21:35  [ТС] #24
Среднее арифметическое элементов массива без учета минимального и максимального элементов
Здесь взял код от MILAN, заменил здесь:
C++
1
2
3
4
5
6
7
8
setlocale(LC_ALL,"Russian");
        int n, a[n];
        int sum=0, max,min;
        float sr;
        printf("Input quantity of elements in array: ");
    std::cin>>n;
        cout<<" Введите...
        ...
И тоже перестало работать. До замены запустилось и посчитало успешно. Но почему тогда, если код не работает из-за отсутствия инициализации размера массива, выделеной и закрепленой памяти, в моём коде мы убираем нахождение минимального и это самое отсутствие уже не мешает???
0
Даценд
Модератор
Эксперт .NET
4099 / 3918 / 2593
Регистрация: 20.04.2015
Сообщений: 7,108
09.01.2016, 21:37 #25
Цитата Сообщение от Salah_Addin Посмотреть сообщение
Это свойство только моего компилятора?
Мой бы такого не допустил.
Цитата Сообщение от Salah_Addin Посмотреть сообщение
Как в таком случае, вы объясните, что программа работает, если нахождение минимального закомментировать?
Есть предположение, но нужно проверять. Проведем эксперимент. В своей версии (код из первого сообщения темы, ничего не меняя) задайте размер массива 4, каждому элементу задайте значение 100, затем между 18 и 19 строкой выведите значения min, max, summ, z.
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 21:50  [ТС] #26
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
42
43
44
45
46
// Middle arithmetic without min and max elements of array.
#include <iostream>
int main()
{
        int n;
    int a[n];
    int 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++;      
        
    }
    printf("\nMinimum element is %i.\n", min);
    printf("Maximum elenent is %i.\n", max);
 
    printf("Numbers that are bigger then 0: %i\n", 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;
    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;
}
Получаем:

Middle arithmetic without min and max elements of array.
Input quantity of elements in array: 4
Input an array:
n[0] -> 100
n[1] -> 100
n[2] -> 100
n[3] -> 100

Minimum element is 0.
Maximum elenent is 0.
Numbers that are bigger then 0: 4

Summ of elements is 400.

Entered array: 100 100 100 100
Minimum element is 0.
Maximum elenent is 100.
Numbers that are bigger then 0: 4

Middle atithmetic without min and max: 75.000
0
marat_miaki
149 / 138 / 87
Регистрация: 08.04.2013
Сообщений: 557
09.01.2016, 21:51 #27
Пример когда n заранее не известен можешь переделать под себя
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
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL,"Rus");
int i, n, max;
do /*начало проверки условия*/
{
cout<<" Введите количество чисел в массиве (n>0) "; cin>>n;
}while (n<=0); /*конец проверки условия*/
int *mas=new int[n];
cout<<"Введите элементы массива:\n";
for (i=0; i<n; i++)
{
cin>>mas[i];
}
max=mas[0];
for (i=1; i<n; i++)
{
if (mas[i]>max)
{
max=mas[i];
}
}
cout<<" Максимальный элемент массива "<<max;
delete []mas;
return 0;
}
1
cyber-satyr
393 / 164 / 32
Регистрация: 10.12.2015
Сообщений: 717
09.01.2016, 21:59 #28
Цитата Сообщение от Даценд Посмотреть сообщение
Мой бы такого не допустил
а подробней с сообщениями об ошибках.
0
Даценд
Модератор
Эксперт .NET
4099 / 3918 / 2593
Регистрация: 20.04.2015
Сообщений: 7,108
09.01.2016, 22:24 #29
cyber-satyr,
Коды: C2057, C2466, C2133.
Описание долго набирать.

Добавлено через 16 минут
Salah_Addin,
Так и не понял, где хранятся элементы массива, но чтобы работало нужно после ввода массива инициализировать min не нулем, а значением нулевого элемента массива:
C++
1
min=a[0];
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
10.01.2016, 11:48  [ТС] #30
1)"флаг компиляции --std=c++14"
Что делать с этой информацией? Я понимаю, что ошибка с моей стороны. Как лечить?
2)"Ваш компилятор позволяет объявить массив без указания его размера. "
Это свойство только моего компилятора?
"А тут нет никакой синтаксической ошибки. Это семантическая ошибка. Компилятор такие и не должен отлавливать."
"Мой бы такого не допустил."
Подробнее кто виноват и почему. И если можно настроить компилятор, чтобы он находил такие ошибки, как это сделать?
3) Объясните эту строку:
C++
1
int *mas=new int[n];
Со звездочкой - указатели. А дальше?

Добавлено через 2 минуты
"Коды: C2057, C2466, C2133.
Описание долго набирать."
Где можно посмотреть что это значит?

Добавлено через 29 минут
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
42
43
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus");
    int i, n, max, min, summ=0, z; // Если не инициализировать
    // сумму, то он её не находит - мусор выдаёт.
    float mid;
    //do /*начало проверки условия*/
    //{
    cout<<" Введите количество чисел в массиве "; 
    cin>>n;
    //}while (n<=0); /*конец проверки условия*/
    int *mas=new int[n];
    cout<<"Введите элементы массива:\n";
    for (i=0; i<n; i++)
    {
        cin>>mas[i];
        if(mas[i] != 0) z++;
        summ += mas[i];
    }   
    max=mas[0];
    min=mas[0];
    for (i=1; i<n; i++)
    {
        if (mas[i]>max) max=mas[i];
        if (mas[i]<min) min=mas[i];
    }
    mid = (float)(summ-max-min) / (n-2);// Если не указать (float),
    // то среднее арифметическое сильно округляет. Почему?
    printf("\nEntered array: ");
    for  ( int l = 0; l<n; l++)
        printf("%i ", mas[l]);  
    printf("\nSumm of elements is %i.\n", summ);
    printf("Minimum 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);
//  cout<<" Максимальный элемент массива "<<max;
    std::cin.get();
    delete []mas; // Зачем удалять в конце?
    return 0;
}
Добавлено через 26 минут
При замене в коде из первого поста таких строк
C++
1
2
3
4
5
6
7
8
9
10
11
        ...
    std::cin>>a[i];
//      summ += a[i];
        if(a[i] != 0) z++;      
        
    }
    [I]max=a[0];
    min=a[0];[/I]
    for (int j=1; j<n; j++)
    {
        sum...
Программа всё равно выдаёт ошибку. Так что же это за объявление массива, и в чём его преимущество?
C++
1
int *mas=new int[n];
Добавлено через 10 минут

Не по теме:


На сайте есть тесты только по С#?

0
marat_miaki
149 / 138 / 87
Регистрация: 08.04.2013
Сообщений: 557
10.01.2016, 12:46 #31
Работает вроде правильно, компилируется без ошибок Dev c++ 4.8
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
42
43
44
45
46
47
#include <iostream>
 
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus");
    int i, n, max, min, summ=0, z=0; // Если не инициализировать
    // сумму, то он её не находит - мусор выдаёт.
    float mid;
    //do /*начало проверки условия*/
    //{
    cout<<" Введите количество чисел в массиве "; 
    cin>>n;
    //}while (n<=0); /*конец проверки условия*/
    int *mas=new int[n];
    cout<<"Введите элементы массива:\n";
    for (i=0; i<n; i++)
    {
        cin>>mas[i];
        if(mas[i] != 0) z++;
        summ += mas[i];
    }   
    max=mas[0];
    min=mas[0];
    for (i=1; i<n; i++)
    {
        if (mas[i]>max) max=mas[i];
        if (mas[i]<min) min=mas[i];
    }
    mid = (float)(summ-max-min) / (n-2);// Если не указать (float),
    // то среднее арифметическое сильно округляет. Почему?
    cout << "\nEntered array: ";
    for  ( int l = 0; l<n; l++)
     {
        cout.width (3);
        cout << mas[l];  
    }
    cout << "\nSumm of elements is " << summ << endl;
    cout << "Minimum element is " << min << endl;
    cout << "Maximum elenent is " << max << endl;
    cout << "Numbers that are bigger then 0: " << z << endl;
    cout << "Middle atithmetic without min and max:" << mid;
//  cout<<" Максимальный элемент массива "<<max;
    std::cin.get();
    delete []mas; // Зачем удалять в конце?
    return 0;
}
http://kpolyakov.spb.ru/school/c/faq.htm#rus ссылка для настройки на русский
0
10.01.2016, 12:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2016, 12:46

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

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

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


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

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

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