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

Расчет суммы или количества элементов массива, удовлетворяющих некоторому условию - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определение максимального и минимального значений во время ввода данных http://www.cyberforum.ru/cpp-beginners/thread1070294.html
Даны натуральное число n и целые числа a1, a2,...,an. Найти номер максимального и номер минимального из чисел аi. Если чисел с максимальным или с минимальным значением несколько, то должны быть найдены номера последних из них. В заранее спасибо:)
C++ составить программу для вычисления конечных сумм а и добутков в составить программу для вычисления конечных сумм а и добутков в. выбрав функцию F(x)=2,574x. выбрав данные z=12a-b2. в результатах применить форматный вывод. извините если я пишу с ошибками я просто с Украины и не до конца умею правильно писать по-русски http://www.cyberforum.ru/cpp-beginners/thread1070282.html
C++ int glob уже определен в main.obj
Почему #ifndef не помогает? 1.h: #ifndef ONE_H #define ONE_H int glob; #endif
C++ Равнобедренная трапеция - найти точку пересечения боковых сторон
Равнобедренная трапеция задана координатами вершин. Найти точку пересечения боковых сторон. На С++. заранее благодарю.
C++ Провести программную реализацию расчета приблизительного значения функции y, разложив функцию в ряд Тейлора http://www.cyberforum.ru/cpp-beginners/thread1070258.html
Есть похожий код для задания: Провести программную реализацию расчета приблизительного значения функции y, разложив функцию f (x) в ряд Тейлора, при этом необходимо вывести и применить рекуррентное отношение для расчета общей части для каждого слагаемого ряда или его части. Аргумент функции должен изменяться в диапазоне с шагом Xdelta. Параметры Xbegin, Xend, Xdelta и точность (допустимая...
C++ X.509 Не удачный запрос: Cannot find the X.509 certificate using the following search criteria: StoreName "My" , StoreLocation "CurrentUser" , FindType "FindByIssuerName" ,FindValue "НУЦ РК (RSA)" Как разобрать и понять эту ошибку подробнее

Показать сообщение отдельно
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
13.01.2014, 18:23     Расчет суммы или количества элементов массива, удовлетворяющих некоторому условию
Ну, и для разнообразия:
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
#include <iostream>
#include <iterator>
#include <array>
#include <algorithm>
#include <functional>
 
template<typename InputIt, typename T,
         typename UnaryPredicate,
         typename BinaryOperation = std::plus<typename std::iterator_traits<InputIt>::value_type> >
T accumulate_if(InputIt first, InputIt last, T init, UnaryPredicate p,
             BinaryOperation op = std::plus<typename std::iterator_traits<InputIt>::value_type>())
{
   for (; first != last; ++first) {
      if (p(*first))
         init = op(init, *first);
   }
   return init;
}
 
namespace pl = std::placeholders;
 
template <typename T>
struct is_even
{
   bool value = true;
   bool operator ()(const T&)
   {
      value ? value = false : value = true;
      return value;
   }
};
 
template <typename T>
bool is_multiple(const T& lhs, const T& rhs)
{
   return (lhs % rhs) ? false : true;
};
 
int main()
{
   std::array<int, 7> ar {30,2,7,6,8,5,15};
 
   //а) сумму нечетных элементов;
   std::cout << accumulate_if(ar.begin(), ar.end(), 0u,
                              std::bind(std::logical_not<bool>(),
                              std::bind(is_even<int>(), pl::_1))
                              ) << "\n";
   //б) сумму элементов, кратных заданному числу;
   const int multiple = 2;
   std::cout << accumulate_if(ar.begin(), ar.end(), 0u,
                              std::bind(std::equal_to<bool>(),
                              std::bind(std::modulus<int>(), pl::_1, multiple), 0)
                              ) << "\n";
   //в) сумму элементов массива, кратных а или b.
   const int a = 3, b = 5;
   std::cout << accumulate_if(ar.begin(), ar.end(), 0u,
                              std::bind<bool>(std::logical_and<bool>(),
                              std::bind(is_multiple<int>, pl::_1, a),
                              std::bind(is_multiple<int>, pl::_1, b))
                              ) << "\n";
}
 
Текущее время: 04:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru