Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
narsky
1 / 1 / 0
Регистрация: 23.03.2016
Сообщений: 115
28.06.2016, 14:09     Найти произведение элементов массива, расположенных между максимальным и минимальным элементами #1
Спасибо! Можно еще вопрос: объявлен одномерный динамический массив 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];
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2016, 14:09     Найти произведение элементов массива, расположенных между максимальным и минимальным элементами
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 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 Посмотреть сообщение
При наличии нескольких максимальных или минимальных элементов (равных друг другу) выбираются первые из них.
это не нужно, так как в твоих циклах не будет второго макс и мин из за условия > либо <
narsky
1 / 1 / 0
Регистрация: 23.03.2016
Сообщений: 115
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 (нет варианта, если нет ни одного отрицательного числа), не могли бы вы посмотреть?
Yandex
Объявления
28.06.2016, 15:18     Найти произведение элементов массива, расположенных между максимальным и минимальным элементами
Ответ Создать тему
Опции темы

Текущее время: 11:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru