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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
bullin2d
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 22
#1

Произведение отрицательных элементов массива - C++

08.08.2012, 12:50. Просмотров 2986. Ответов 8
Метки нет (Все метки)

Помогите, пожалуйста с задачками по теме "Одномерные массивы".
Оформить каждую задачу в виде функции. Все необходимые данные для функций должны передаваться в качестве параметров. Использование глобальных переменнх в функциях не допускается.
. Найти:
Найти:
1) произведение отрицательных элементов массива;
2) сумму положительных элементов массива, расположенных до максимального элемента;
3) преобразовать массив так, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом все остальные.


Очень много задали на практику помимо этого, не успеваю. Плиииииииииииз, надеюсь, что найдутся добрые люди. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Произведение отрицательных элементов массива (C++):

Среднее арифметическое положительных элементов массива, произведение и количество отрицательных элементов - C++
в массиве X найти среднее арифметическое положительных элементов массива, произведение и кол-во отрицательных элементов массива.

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

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

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

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

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

8
nameless
Эксперт С++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
08.08.2012, 14:52 #2
bullin2d,

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
#include <iostream>
#include <algorithm>
#include <vector>
 
template <typename T, std::size_t STATE>
struct MyLess : public std::binary_function <T, T, T> {
   T operator()(const T & lhs, const T & rhs) const {
      return lhs < rhs ? lhs : STATE;
   }
};
 
template <typename T, std::size_t STATE>
struct MyGreater : public std::binary_function <T, T, T> {
   T operator()(const T & lhs, const T & rhs) const {
      return lhs > rhs ? lhs : STATE;
   }
};
 
template <typename T,
         template <typename TYPE,
                   typename = std::allocator <TYPE>> class CONT>
T MultNegativeElements(const CONT <T> & cont) {
   T result =
      std::accumulate(
         cont.begin(),
         cont.end(),
         1,
         std::bind(
            std::multiplies <T>(),
            std::placeholders::_1,
            std::bind(
               MyLess <T, 1>(),
               std::placeholders::_2,
               0
            )
         )
      );
   return result;
}
 
template <typename T,
         template <typename TYPE,
                   typename = std::allocator <TYPE>> class CONT>
T SumElements(const CONT <T> & cont) {
   T result =
      std::accumulate(
         cont.begin(),
         std::max_element(
            cont.begin(),
            cont.end()
         ),
         0,
         std::bind(
            std::plus <T>(),
            std::placeholders::_1,
            std::bind(
               MyGreater <T, 0>(),
               std::placeholders::_2,
               0
            )
         )
      );
   return result;
}
 
template <typename T,
         template <typename TYPE,
                   typename = std::allocator <TYPE>> class CONT>
void TransformArray(CONT <T> & cont) {
   T max_element =
      *std::max_element(
            cont.begin(),
            cont.end()
       );
   std::partition(
      cont.begin(),
      cont.end(),
      std::bind(
         std::greater_equal <T>(),
         std::placeholders::_1,
         max_element - max_element / 100.0 * 20.0
      )
   );
}
 
int main() {
   std::vector <int> v_numbers = { -2, 13, -5, 1, 15, -3, 16, -7, 1, -3 };
   
   std::cout << MultNegativeElements <int, std::vector>(v_numbers) << std::endl;
   std::cout << SumElements <int, std::vector>(v_numbers) << std::endl;
   TransformArray <int, std::vector>(v_numbers);
   
   for (const auto & val : v_numbers) {
      std::cout << val << " ";
   }
}
http://liveworkspace.org/code/7a7b665e4f0de3eda2e62a6b55a5a9e8
2
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.08.2012, 15:31 #3
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
#include <iostream>
#include <vector>
#include <iterator>
#include <numeric>
#include <algorithm>
 
int main()
{
   std::vector<int> v = {1,-1,2,3,-4,5,6,7,8};
   std::cout << std::accumulate(v.begin(), v.end(), 1, [](int res, int current)
   {
      return current < 0 ? res * current : res;
   }) << std::endl;
   auto max_pos = std::max_element(v.begin(), v.end());
   std::cout << std::accumulate(v.begin(), max_pos, 0, [](int res, int current)
   {
      return current > 0 ? res + current : res;
   }) << std::endl;
   int max = *max_pos;
   std::cout << "max: " << max << std::endl;
   std::stable_partition(v.begin(), v.end(), [max](int current)
   {
      return current >= (max - max / 100.0 * 20.0);
   });
   std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));
}
http://liveworkspace.org/code/3c47852696ffc711ceeff8b8d9d3e17d
1
bullin2d
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 22
08.08.2012, 15:40  [ТС] #4
Спасибо огромное, ребят, за помощь!!! Правда эти решения сложноваты для меня, вот бы попроще как нить. Всё равно миллион благодарностей за старания!
0
nameless
08.08.2012, 15:52
  #5

Не по теме:

Жаль, что boost::compose был выпилен в последних версиях. Очень удобен был для композиции функторов.

0
ForEveR
08.08.2012, 15:57
  #6

Не по теме:

nameless, Так лямбды ж поудобнее будут, чем через композицию функторов делать, разве нет?

0
nameless
08.08.2012, 16:04
  #7

Не по теме:

ForEveR, лямбды удобней конечно. Просто сам факт того, что compose был выпилен немного расстраивает.
Хотя вариант с

C++
1
std::bind(f, std::bind(g, _1))(x);
тоже вполне юзабельный.

0
Andrey.K
342 / 263 / 15
Регистрация: 14.11.2010
Сообщений: 482
08.08.2012, 16:23 #8
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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
using namespace std;
void fill_rnd(int* mas)
{
    int max=10,min=-10;
    srand((unsigned)time(NULL));
    for(int i=0;i<15;i++)
        mas[i]=rand() % (max - min + 1) + min;
}
 
void show_mas(int* mas)
{
    for(int i=0;i<15;i++)
        cout<<mas[i]<<" ";
    cout<<endl;
}
double mul_mas(int* mas)
{
    double mul=1;
    for(int i=0;i<15;i++)
        if(mas[i]<0) mul*=mas[i];
    return mul;
}
int sum_mas(int* mas)
{
    int max=mas[0],pos_max=0,sum=0;
    for(int i=0;i<15;i++)
    {
        if(mas[i]>max) { max=mas[i];pos_max=i; }
    }
    for(int i=0;i<pos_max;i++)
        sum+=mas[i];
    return sum;
}
void swap_mas(int* mas)
{
    int max=mas[0],pos=0,buf[15];
    for(int i=0;i<15;i++)
    {
        if(mas[i]>max) max=mas[i];
    }
    for(int i=0;i<15;i++)
    {
        if(mas[i]>=(max-max*0.2)) { buf[pos]=mas[i];pos++; }
    }
    for(int i=0;i<15;i++)
    {
        if(mas[i]<(max-max*0.2)) { buf[pos]=mas[i];pos++; }
    }
    for(int i=0;i<15;i++)
        mas[i]=buf[i];
}
int main()
{
    setlocale(0,"rus");
    int* mas=new int[15];
    fill_rnd(mas);
    cout<<"Массив: "<<endl;
    show_mas(mas);
    cout<<"Произведение отрицательных элементов: "<<mul_mas(mas)<<endl;
    cout<<"Сумма: "<<sum_mas(mas)<<endl;
    cout<<"Меняет местами: "<<endl;
    swap_mas(mas);
    show_mas(mas);
    delete[] mas;
    getch();
    return 0;
}
1
bullin2d
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 22
08.08.2012, 18:26  [ТС] #9
всё понял, тут три задачи в одной, да ещё и с функциями. шикарно!!! Огромное благодарстие!!!
0
08.08.2012, 18:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 18:26
Привет! Вот еще темы с ответами:

Найти произведение отрицательных элементов массива - C++
Ребята я болел когда в институте мы проходили массивы... Может мне кто то с этим помочь? Исходные данные для всех вариантов - n...

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

Вычислить произведение отрицательных элементов массива - C++
В одномерном массиве, состоящем из вещественных элементов, вычислить: 1.произведение отрицательных элементов массива; 2.сумму...

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


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

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

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