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

Вычислить произведение элементов массива по модулю - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
**KATY
 Аватар для **KATY
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 30
12.02.2012, 15:28     Вычислить произведение элементов массива по модулю #1
Дан одномерный массив состоящий из n целых чисел, надо: вычеслить произведение элементов по модулю, которые находятся между максимальным элементом и минимальным ( если возможно с обяснениями)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2012, 15:28     Вычислить произведение элементов массива по модулю
Посмотрите здесь:

Вычислить произведение элементов, находящихся между min и max по модулю элементами C++
C++ Произведение элементов массива расположенных после максимального по модулю элемента (С)
Произведение элементов массива, расположенных после максимального по модулю элемента C++
Найти произведение элементов массива, расположенных между минимальным и максимальным по модулю элементами C++
C++ В одномерном массиве, состоящем из n элементов, вычислить минимальный по модулю элемент массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
12.02.2012, 16:29     Вычислить произведение элементов массива по модулю #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
немного запутанно, но работать будет

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
#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
 
int main() {
    int n=rand()%30;            //берем случайное кол-во элементов от 0 до 30 
    int min=100, max=-100;      //пременные миним и макс
    int n_max=0, n_min=0;       //индексы минимума и максимума
    int P=1;                    //переменная произведения
    int a[n];                   //массив
    
    for (int i=0; i<n; i++) a[i]=rand()-50; //заполнение случ. числами
    
    for (int i=0; i<n; i++) 
        if (a[n]<min) { min=a[n]; n_min=n;} // нахождение максим и его индекса
            
    for (int i=0; i<n; i++) 
        if (a[n]>max) { max=a[n]; n_max=n;} // нахождение миним и его индекса
    
    if (n_min < n_max)      // максимум в массиве раньше стоит 
        for (int i=n_min; i<n_max; i++) P=P*a[i]; // расчет произ
    else                    // или позже в массиве
        for (int i=n_max; i<n_min; i++) P=P*a[i]; // расчет произ
    
    cout << abs(P) << endl; // модуль произведения
}
Добавлено через 54 секунды
Цитата Сообщение от **KATY Посмотреть сообщение
произведение элементов по модулю
это модуль произведения
**KATY
 Аватар для **KATY
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 30
12.02.2012, 16:38  [ТС]     Вычислить произведение элементов массива по модулю #3
можно еще вопрос, у нас в инклуде <stdlib.h> так пишется, а у вас <cstdlib>
есть разница?
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
12.02.2012, 17:36     Вычислить произведение элементов массива по модулю #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Пиши как хочешь
<stdlib.h> это по старому для С, а
<cstdlib> это по новому для С++

Добавлено через 59 секунд
Работать будет в любом случае

Добавлено через 54 минуты
Сори, первый алгоритм с некоторыми ошибками
Вот правильный
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 <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
 
int main() {
        int n=rand()%10+10;            //берем случайное кол-во элементов от 10 до 20 
        int min=100, max=-100;          //пременные миним и макс
        int n_max=0, n_min=0;           //индексы минимума и максимума
        int P=1;                                        //переменная произведения
        int a[n];                                       //массив
        
        for (int i=0; i<n; i++) a[i]=rand()%50-25; //заполнение случ. числами
        
        for (int i=0; i<n; i++) 
                if (a[i]<min) { min=a[i]; n_min=i;} // нахождение миним и его индекса
                        
        for (int i=0; i<n; i++) 
                if (a[i]>max) { max=a[i]; n_max=i;} // нахождение макс и его индекса
        
        if (n_min < n_max)      // максимум в массиве раньше стоит 
                for (int i=n_min+1; i<n_max; i++) P=P*a[i]; // расчет произ
        else                                    // или позже в массиве
                for (int i=n_max+1; i<n_min; i++) P=P*a[i]; // расчет произ
        
        for (int i=0; i<n; i++) cout << a[i] << "  "; //вывод массива
        cout << endl << abs(P) << endl; // модуль произведения
}
**KATY
 Аватар для **KATY
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 30
12.02.2012, 17:49  [ТС]     Вычислить произведение элементов массива по модулю #5
Spasibo bol'shoe
Vergil111
31 / 31 / 6
Регистрация: 30.11.2010
Сообщений: 81
12.02.2012, 20:29     Вычислить произведение элементов массива по модулю #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
С использованием stl и лямбда-функций это будет выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <numeric>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> test((istream_iterator<int>(cin)), istream_iterator<int>());
    cout << accumulate(max_element(test.begin(), test.end())+1, min_element(test.begin(), test.end()), 1, [](const int& total, const int& right){return total*abs(right);}) << endl;
    return 0;
}
Yandex
Объявления
12.02.2012, 20:29     Вычислить произведение элементов массива по модулю
Ответ Создать тему
Опции темы

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