Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.04.2017
Сообщений: 3

Среднее арифметическое элементов, расположенных после максимального элемента перед минимальным

05.04.2017, 04:46. Показов 1632. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать функцию коротая считает среднее арифметическое элементов, расположенных после максимального элемента та перед минимальным. Помогите пожалуйста.
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <conio.h> 
#include <cstdlib>
using namespace std;
void myFunctionInput(int* arr[],int rows,int cols) { 
     for(int i = 1;i <= rows;i++) 
     {      
         for(int j = 1; j <= cols;j++)
         { 
             cout << " Ввести елемент матрицi: " << i  << j << " " ;
             cin >>arr[i][j];
         }
         cout << endl;
     }
}
 
int myfunctionminandmax(int* arr[],int rows,int cols){
    int min=arr[1][1];
    int max=arr[1][1];
    for (int i = 1; i <= rows; i++) 
    {
        for (int j = 1; j <= cols; j++) 
        {
            if (arr[i][j] <= min) 
                min = arr[i][j]; /
            if (arr[i][j] >= max) 
                max = arr[i][j]; 
        }
    }
    cout <<"\t**Перший масив**"<< endl; 
    cout << "Минимальное значение массива: " << min << endl; 
    cout << "Максимальное значение массива: " << max << endl; 
    return 0;
}
 
int myfunctionsred(int* arr[],int rows,int cols){
    
return 0;
}
 
void  main () { 
    setlocale(LC_ALL,"Russian");
        int rows,cols,rows1,cols1,choice; 
        cout<< "\t**Матрица**" <<endl;
        cin >> rows;;
        cin >> cols;
        cout << endl;
        int ** arr = new  int *[rows];
         for(int i = 1;i <= rows;i++) 
         { 
             arr[i] = new int[cols];
         }
        cout <<"Матриця " <<endl;
 
          myFunctionInput(arr,rows,cols);
          for(int i = 1;i <= rows;i++) 
          { 
             for(int j = 1;j <= cols;j++) 
             { 
                 cout << arr[i][j] << "  " ;
             }
             cout << endl;
          }
          
        
          system("cls");
          cout<< "\t**Матрица**" <<endl;
          for(int i = 1;i <= rows;i++) 
          { 
             for(int j = 1;j <= cols;j++) 
             { 
                 cout << arr[i][j] << "  " ;
             }
             cout << endl;
          }
          do{
    cout << "\n Выберите действие: \n\n";
    cout << "1. Максимальный та минимальный элемент массиву\n";
    cout << "2. Среднее арифметическое элементов, расположенных после максимального элемента та перед минимальным.\n";
    cout << "3. Виход з програми\n";
    do{
        cin >> choice;
        if(choice < 1 || choice > 3) cout << "Некорректный выбор\n";
    } while(choice < 1 || choice > 3);
 
    switch(choice)
    {
        case 1:
           myfunctionminandmax(arr,rows,cols);
           break;
        case 2:
            myfunctionsred(arr,rows,cols);
            break;
        
    }
  }while(choice!=3);
  return;
          
        system("pause");
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.04.2017, 04:46
Ответы с готовыми решениями:

Найти среднее арифметическое модулей кратных пяти элементов массива, расположенных после максимального элемента
VC++ 6.0 10. Найти среднее арифметическое модулей кратных пяти элементов мас- сива, расположенных после максимального элемента. ...

Найти среднее арифметическое модулей кратных пяти элементов массива, расположенных после максимального элемента
помогите написать программу а то у меня выходит бред #include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include &lt;math.h&gt; #include...

Найти среднее арифметическое элементов массива, расположенных до максимального элемента
Написал программу.... при компиляции вроде ошибок нет.. но линкировщик далее пишет 1&gt;kr_4.obj : error LNK2019: unresolved external...

6
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
06.04.2017, 12:29
Вот пример. Не проверял , но по идее должно работать. В функцию будешь передавать массив, размер массива (rows,cols), min число, max число. Функция будет возвращать тип double.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Минимальное и максимальное в sum и count не учитывается!
double myFunctionSum(int* arr[], int rows, int cols, int min, int max){
    double sum = 0;
    size_t count = 0
    bool flag_one = true, flag_two = false;
    for( size_t i = 0; (i < rows) && flag_one; i++){
        for( size_t j = 0; (j < cols) && flag_one; j++){
            if (arr[i][j] == min){
                flag_two = true;
                ++j;
            }
            if (!flag_two) continue;
            if ((arr[i][j] != max) && flag_two){
                sum+=(double)arr[i][j];
                ++count;
            }
            else flag_one = false;
        }
    }
    return sum/(double)count;
}
А почему ты начинаешь считать везде с arr[1][1]? Первым элементов массива является же arr[0][0]
C++
1
2
int min=arr[1][1];
int max=arr[1][1];
И тут та же история
C++
1
2
3
4
5
6
7
for (int i = 1; i <= rows; i++) 
    {
        for (int j = 1; j <= cols; j++) 
        {
         ...
         }
     }
0
0 / 0 / 0
Регистрация: 05.04.2017
Сообщений: 3
06.04.2017, 16:11  [ТС]
anapshy, А можно не много по проще)Я только начал изучать с++, и не все понимаю что вы написали
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.04.2017, 16:17
Incognito555, вдумайтесь в условие. Если последовательность упорядочена (отсортирована) по возрастанию, то можете написать cout<<0;
Общее правило: Как только Вы поймёте то, что пишете то сможете, это переформулировать. То есть решить.
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
06.04.2017, 19:57
Лучший ответ Сообщение было отмечено Incognito555 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
double myFunctionSum(int* arr[], int rows, int cols, int min, int max){ // double т.к. при sum/count получится число с плавающей точкой
    double sum = 0;
    size_t count = 0;
    bool flag_one = true, flag_two = false;// flag_one - вышли или нет за максимальное; flag_two - зашли за минимальное или нет;
    for( size_t i = 0; (i < rows) && flag_one; i++){// Идем по строкам...если не вышли за максимальное
        for( size_t j = 0; (j < cols) && flag_one; j++){// Идем по столбцам... если не вышли за максимальное
            if (arr[i][j] == min){ // Если нашли минимальное..
                flag_two = true; // ..значит зашли за минимальное
                ++j; // ..переходи к след. символу
            }
            if (!flag_two) continue; // Если не зашли за минимальное - пропускаем нижеописанный код и j++
            if ((arr[i][j] != max) && flag_two){ // if(Число не равно максимальному)&&(Зашли за минимальное)
                sum+=(double)arr[i][j]; //..прибавляем к сумме
                ++count; //.. +1 у найденому числу
            }
            else flag_one = false; // Если число максимальное, то мы зашли за максимальное
// И дальше при проверке прервется цикл for(j...); а за ним и for(i..)
        }
    }
    return sum/(double)count; // Делим сумму на кол-во найденных элементов в промежутке min < число < max
}
Добавлено через 6 минут
P.s. сейчас попытаюсь разобраться в твоем коде и исправить

Добавлено через 3 часа 22 минуты
Готово!
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <iostream>
#include <conio.h> 
#include <Windows.h> // Sleep(..);
 
using namespace std;
 
struct info_matrix {
    // [0] - хранит число
    // [1] - хранит номер строки
    // [2] - хранит номер столбца
    int min[3] = { 0 },
        max[3] = { 0 };
    int rows,
        cols;
    double average_amount = 0; // среднее арифм-е
};
 
// Будем передавать массив и структуру по ссылке с нужными параметрами
void myFunctionInput(int* arr[], struct info_matrix &m);
void  myfunctionminandmax(int* arr[], struct info_matrix &m);
int myFunctionAverage(int* arr[], struct info_matrix &m);
 
void main(void) {
    setlocale(LC_ALL, "Russian");
    struct info_matrix m; // Создаем структуру
    cout << "\t**Матрица**" << endl;
    cout << "Кол-во строк: ";
    cin >> m.rows;
    cout << "Кол-во столбцов: ";
    cin >> m.cols;
    cout << endl;
    int ** arr = new  int *[m.rows];
    for (int i = 0; i < m.rows; i++){
        arr[i] = new int[m.cols];
    }
    cout << "Матриця " << endl;
 
    myFunctionInput(arr, m);
    for (int i = 0; i < m.rows; i++){
        for (int j = 0; j < m.cols; j++){
            cout << arr[i][j] << "  ";
        }
        cout << endl;
    }
 
    system("cls");
    cout << "\t**Матрица**" << endl;
    for (int i = 0; i < m.rows; i++){
        for (int j = 0; j < m.cols; j++){
            cout << arr[i][j] << "  ";
        }
        cout << endl;
    }
    unsigned choice = EOF;
    bool flag = false; // Была ли проверка на максимальный и минимальный элемент
    do {
        system("color 07");
        cout << "\n\nВыберите действие:\n";
        cout << "1. Максимальный та минимальный элемент массиву\n";
        cout << "2. Среднее арифметическое элементов, расположенных после максимального элемента та перед минимальным.\n";
        cout << "3. Виход з програми\n";
        do {
            system("color 07"); //
            cout << ">> Ввод: ";
            cin >> choice;
            if (choice < 1 || choice > 3) {
                system("color C7"); //
                cerr << " Некорректный выбор!" << endl;
                Sleep(500);//
            }
        } while (choice < 1 || choice > 3);
 
            switch (choice){
            case 1:
                flag = true;
                system("cls"); system("color 0A"); //
                myfunctionminandmax(arr, m);
                Sleep(2000); //
                break;
            case 2:
                if (!flag) { // Если проверки не было - Ошибка!
                    system("color C7"); //
                    cerr << " Максимальный и минимальный элементы массива не опеределены!" << endl;
                    Sleep(2000); system("cls"); //
                    break;
                }
                system("cls"); system("color 0A"); //
                if(myFunctionAverage(arr, m)) cout << " Среднее арифметическое элементов: " << m.average_amount << endl;
                else {
                    system("cls"); system("color 0A"); //
                    cout << " Нет чисел которые можно было бы сложить!" << endl;
                }
                Sleep(2000); //
                break;
            }
    } while (choice != 3);
    return;
    system("pause");
}
 
void myFunctionInput(int* arr[], info_matrix &m) {
    for (int i = 0; i < m.rows; i++){
        for (int j = 0; j < m.cols; j++){
            cout << " Ввести елемент матрицi [" << i + 1 << ";" << j+1 << "]: ";
            cin >> arr[i][j];
        }
        cout << endl;
    }
}
 
void myfunctionminandmax(int* arr[], struct info_matrix &m) {
    m.min[0] = arr[0][0];
    m.max[0] = arr[0][0];
    for (int i = 0; i < m.rows; i++){
        for (int j = 0; j < m.cols; j++) {
            if (arr[i][j] <= m.min[0]) {
                m.min[0] = arr[i][j];
                m.min[1] = i; m.min[2] = j; // Сохраняем позицию
            }
            if (arr[i][j] > m.max[0]) {
                m.max[0] = arr[i][j];
                m.max[1] = i; m.max[2] = j; // Сохраняем позицию
            }
        }
    }
    cout << "\t**Перший масив**" << endl;
    cout << " Минимальное значение массива: " << m.min[0] << endl;
    cout << " Максимальное значение массива: " << m.max[0] << endl;
}
 
int myFunctionAverage(int* arr[], struct info_matrix &m) {
    if (m.min[0] == m.max[0]) return 0; // if (min==max) Ошибка! Нет чисел, которые можно было бы сложить!
    size_t i, j, count = 0;             // count - считает кол-во элементов
    bool flag = true;                   // Проверка на первый заход
    for ( i = m.min[1]; i < m.cols; i++) {
        for (flag ? (j = m.min[2] + 1),flag=false : (j = 0); j < m.cols; j++) {
            // Если flag = true, то j = (позиция минимального + 1)
            // Если flag = false, то j = 0
            if (arr[i][j] != m.max[0]) {
                m.average_amount += (double)arr[i][j];
                ++count;
            }
            else {
                if (!count) return 0;           // if (count == 0) Ошибка! Нет чисел, которые можно было бы сложить!
                else {
                    m.average_amount /= count;
                    return 1;                   // else (count != 0) Есть числа, которые можно было бы сложить!
                }
            }
        }
    }
}
1
0 / 0 / 0
Регистрация: 05.04.2017
Сообщений: 3
07.04.2017, 07:09  [ТС]
anapshy, Спасибо Вам большое, Вы мне очень сильно помогли
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
07.04.2017, 08:35
Если компилятор будет ругаться на эту строчку и return в main():
C++
1
unsigned choice = EOF;
То сделай так:
C++
1
2
3
4
5
6
7
8
#include <cstdio> // for EOF
 
int main() { // void -> int
    .
    .
    .
    return 0; // return; -> return 0;
}
P.s. Visual Studio ошибки не выдавал, а CodeBlocks выдал...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.04.2017, 08:35
Помогаю со студенческими работами здесь

В массиве определить среднее арифметическое отрицательных элементов, расположенных после минимального элемента
Написать программу на языке С++. Элементы массива ввести с клавиатуры. В массиве В, содержащем 12 элементов, определить среднее...

Массивы. Найти среднее арифметическое элементов массива, расположенных до максимального элемента (найти ошибку в задании)
Препод говорит что тут есть ошибка, но где не говорит, прошу если кото-нибуть заметит сообщите. Ввести одномерный статический массив...

Найти среднее арифметическое элементов массива, расположенных между максимальным и минимальным
Помогите пожалуйста я не фига не понимаю с си. Ps если можно распишите по подробней. В одномерном массиве найти среднее...

Найти среднее арифметическое элементов массива расположенных между максимальным и минимальным элементами
Дан вещественный массив А в котором не повторяются значения элементов. Найти среднее арифметическое элементов массива расположенных между...

Вычислить среднее арифметическое элементов массива, расположенных между максимальным и минимальным элементами
Мое условие: Дан вещественный массив A, в котором не повторяются значение элементов. Вычислить среднее арифметическое элементов массива,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru