Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
narsky
2 / 2 / 1
Регистрация: 23.03.2016
Сообщений: 117
#1

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - C++

28.06.2016, 14:09. Просмотров 700. Ответов 2
Метки нет (Все метки)

Спасибо! Можно еще вопрос: объявлен одномерный динамический массив b размером a, заполнен введенными пользователями числами, и нужно к нему написать функцию, которая находит произведение элементов массива, расположенных между максимальным и минимальным элементами. При наличии нескольких максимальных или минимальных элементов (равных друг другу) выбираются первые из них. Как это осуществить? Начало кода:
C++
1
2
3
4
5
6
7
8
9
10
11
void proiz (int a, double b[])
{
    int max = 0, min = 0;
    for (int i = 0; i < a; i++)
    {
        if (b[i] > max) max = b[i];
    }
    for (int i = 0; i < a; i++)
    {
        if (b[i] < min) min = b[i];
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2016, 14:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти произведение элементов массива, расположенных между максимальным и минимальным элементами (C++):

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - C++
Помогите, пожалуйста. Как найти произведение элементов массива, расположенных между максимальным и минимальным элементами? Заранее...

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - C++
в одномерном массиве,состоящем из n вещественных элементов,вычислить: 1)сумму отрицательных элементов массива 2)произведение элементов...

Найти произведение элементов массива , расположенных между максимальным и минимальным элементами - C++
Здравствуйте!:) Прошел несколько тем по C++ , а именно Базовые средства языка С++ и одномерные массивы . Решил по практиковаться , решил...

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - C++
Найти произведение элементов массива, расположенных между максимальным и минимальным элементами. #include &lt;iostream&gt; #include...

Найти произведение элементов массива, расположенных между минимальным и максимальным по модулю элементами - C++
ЗАДАНИЕ Б. Сделать по методичке с созданием класса, обьекта и вызовом деструктора и конструктора

Найти произведение элементов массива, расположенных между максимальным и минимальным по модулю элементами - C++
В одномерном массиве, состоящем из N вещественных элементов, вычислить: произведение элементов массива, расположенных между максимальным...

2
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,068
Завершенные тесты: 1
28.06.2016, 14:22 #2
тут все просто, нужно создать две переменные - позиция минимального элемента, и максимального элемента в массиве(min_i, max_i), в твоих двух циклах, кроме определения переменной max и min нужно запоминать еще и i - позицию в массиве (max_i = i , min_i = i), дальше нужно понимать, что максимальный элемент не обязательно будет стоять после минимального, так как значения рандомные - делаем такой цикл
C++
1
2
3
4
5
int mul = 1;
for( int i = std::min(max_i , min_i) ; i < std::max(max_i , min_i); ++i )
{
 mul *= b[i];
}
mul и будет искомым произведением

Цитата Сообщение от narsky Посмотреть сообщение
При наличии нескольких максимальных или минимальных элементов (равных друг другу) выбираются первые из них.
это не нужно, так как в твоих циклах не будет второго макс и мин из за условия > либо <
0
narsky
2 / 2 / 1
Регистрация: 23.03.2016
Сообщений: 117
28.06.2016, 15:18  [ТС] #3
Программа не работает, если не было введено ни одного отрицательного числа, также вроде бы неверно исчисляет произведение. Может, нужно подключить директиву для std? (ни разу не пользовался этим оператором)
Вот код, может увидите чего:
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
/*С одномерным динамическим массивом, состоящим из n вещественных элементов, произвести следующие операции:
1) вычислить сумму отрицательных элементов массива;
2) вычислить произведение элементов массива, расположенных между максимальным и минимальным элементами. При наличии нескольких максимальных или минимальных элементов (равных друг другу) выбираются первые из них;
3) упорядочить элементы массива по возрастанию.
*/
#include <iostream>
using namespace std;
 
void summa(int a, double b[])
{
    double sum = 0;
    for (int i = 0; i < a; i++)
        {
            if (b[i] < 0)
            {
                sum = sum + b[i];
            }
    }
    cout << "Сумма отрицательных элементов массива: " << sum;
}
 
void proiz (int a, double b[])
{
    double max = 0, min = 0;
    int max_i, min_i;
    for (int i = 0; i < a; i++)
    {
        if (b[i] > max) 
            {
                max = b[i];
                max_i = i;
        }
    }
    for (int i = 0; i < a; i++)
    {
        if (b[i] < min) 
            {
                min = b[i];
                min_i = i;
        }
    }
    double mul = 1;
    for( int i = std::min(max_i , min_i) ; i < std::max(max_i , min_i); ++i )
    {
        mul *= b[i];
    }
    cout << "Произведение элементов массива, расположенных между максимальным и минимальным элементами равно: " << mul << endl;
}
 
void poryadok (int a, double b[])
{
    for (int j = 0; j < a - 1; j++)
    {
        int i, k;
        k = j;
        for (i = j + 1; i < a; i++)
            if (b[i] < b[k])
                k = i;
        double buf = b[j];
        b[j] = b[k];
        b[k] = buf;
    }
    for (int i = 0; i < a; i++)
        cout << b[i] << endl;
}
 
 
int main(){
    int a;
    setlocale(LC_ALL, "Russian");
 
    cout << "Введите размер массива: " << endl;
    cin >> a;
    if (a < 1) cout << "Ошибка! Введен неверный размер массива" << endl;
    else
    {
        double *b = new double[a];
 
        for (int i = 0; i < a; i++)
        {
            cout << "Введите " << i + 1 << " элемент массива" << endl;
            cin >> b[i];
        }
 
        cout << "Ваш массив:" << endl;
        for (int i = 0; i < a; i++)
        {
            cout << b[i] << " ";
        }
 
        summa(a, b);
        proiz(a, b);
        poryadok(a, b);
 
        delete(b);
        system("pause");
    }
        return 0;
}
Добавлено через 29 минут
Подключил директиву <algorithm> (Если это директива), произведение вроде бы получается верное, но программа прерывает работу, если не введено ни одного отрицательного числа. Есть подозрение на то, что что-то не так написано в void summa (нет варианта, если нет ни одного отрицательного числа), не могли бы вы посмотреть?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2016, 15:18
Привет! Вот еще темы с ответами:

Найти произведение элементов массива, расположенных между минимальным и максимальным по модулю элементами - C++
Здравствуйте. Помогите, пожалуйста, решить задачу. Вот текст: В одномерном массиве, состоящем из n ещественных элементов, вычислить: 1)...

Одномерный массив. Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - C++
Всем доброго времени суток! Дан одномерный массив, состоящий из N вещественных элементов. Найти произведение элементов массива,...

Произведение элементов массива, расположенных между максимальным и минимальным элементами - C++
Добрый вечер. Помогите разобраться с массивами. Поиск изал но толком ничего понятного для себя не нашел. Делать программу пытался сам но...

Произведение элементов массива, расположенных между максимальным и минимальным элементами - C++
В динамическом массиве, состоящем из n вещественных величин. А. Сумму отрицательных элементов массива В. Произведение элементов...


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

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

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