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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти значение выражения http://www.cyberforum.ru/cpp-beginners/thread1772253.html
Найти значение выражения если n>0, 1/2+2/4+3/8... что неправильно? #include <iostream> #include <clocale> int main () { setlocale (0, "");
C++ Как вывести номер строки вызова функции Здравствуйте! Подскажите, пожалуйста, как командой OutputDebugStringA((LPCSTR)__LINE__) вывести номер строки откуда вызывается функция void foo() { OutputDebugStringA((LPCSTR)__LINE__); return; } Вот так, почему то выдает ошибку. И интересно, а есть ли еще константы на подобии какая версия с++ используется или в каком компиляторе скомпилирована была программа и т.д. http://www.cyberforum.ru/cpp-beginners/thread1772244.html
C++ Вычисление геометрических характеристик сечений произвольной формы
Разработать алгоритм и программу вычисления геометрических характеристик сечений произвольной формы ( площадь, положение ЦТ, моменты инерции, моменты сопротивления)
C++ Удалить из текста все слова, оканчивающиеся группой букв "ing" и "ed"
Помогите пожалуйста с задачей на массив слов: Дан текст. Удалить все слова, оканчивающиеся группой букв ing и ed.
C++ Прокомментируйте программу побитового отрицания http://www.cyberforum.ru/cpp-beginners/thread1772196.html
Привет друзья,помогите пож-та разобраться в программе,завтра надо её защитить,рассказать как она работает. Если кому не сложно распишите действия через // и самое главное,от какого шага начали показываться биты в консоли? Спасибо #include <stdio.h> #include <conio.h> void printBits(unsigned int var); int main (void) {
C++ Как исправить: warning C4700: использована неинициализированная локальная переменная "a"? Задача: Дана целочисленная прямоугольная матрица. Определить количество строк, содержащих хотя бы один нулевой элемент. Примечание: Размеры массивов задаются именованными константами. Значения элементов массивов вводятся с клавиатуры, генерируются случайным образом или инициализируются в программе (значения по умолчанию). Способ задания элементов массива выбирается пользователем. Все операции... подробнее

Показать сообщение отдельно
narsky
2 / 2 / 1
Регистрация: 23.03.2016
Сообщений: 117
28.06.2016, 15:18  [ТС]
Программа не работает, если не было введено ни одного отрицательного числа, также вроде бы неверно исчисляет произведение. Может, нужно подключить директиву для 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 (нет варианта, если нет ни одного отрицательного числа), не могли бы вы посмотреть?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru