Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 23:21   #1
e73t4ph
Новичок
Джуниор
 
Регистрация: 22.05.2012
Сообщений: 9
Восклицание последовательность (1+R)/(1+S) под DevC++

Даны n, последовательность n x , x ,...x 1 2 . Получить (1+R)/(1+S), где R – сумма тех членов
последовательности, которые не превосходят 1, а S – сумма членов, больших 1. Использовать динамические
массивы.
-----------
Код:
#include <iostream>
#include <algorithm>
#include <iterator>

int main()
{
const int n = 10;
int arr[n] = {-5, 2, 5, -1, 4, 2, 4, 0, -1, 10}, Rn, Sn, *R, *S;
std::copy(arr, arr + n, std::ostream_iterator<int>(std::cout, " ")); 
Rn = std::count_if(arr, arr + n, [](const int value) {return value <=1; } );
Sn = n - Rn;
R = new int[Rn]; 
S = new int[Sn];
Rn = Sn = 0; 
std::for_each(arr, arr + n, [R, &Rn, S, &Sn](const int value) 
{if (value <=1) R[Rn++] = value; else S[Sn++] = value; } );
std::cout<< std::endl;
std::copy(R, R + Rn, std::ostream_iterator<int>(std::cout, " ")); 
std::cout<< std::endl;
std::copy(S, S + Sn, std::ostream_iterator<int>(std::cout, " ")); 
std::cout<< std::endl<< "(1 + R)/(1 + S) = "
<< (double) (1 + std::accumulate(R, R + Rn, 0) ) / (1 + std::accumulate(S, S + Sn, 0) );
delete []R;
delete []S; 
return 0;
}


ругается на строчку
Rn = std::count_if(arr, arr + n, [](const int value) {return value <=1; } );

ошибка в следующем
`accumulate' is not a member of `std'

Последний раз редактировалось Stilet; 23.05.2012 в 07:27.
e73t4ph вне форума Ответить с цитированием
Старый 22.05.2012, 23:28   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Подключите <numeric>
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 22.05.2012, 23:36   #3
e73t4ph
Новичок
Джуниор
 
Регистрация: 22.05.2012
Сообщений: 9
По умолчанию

Мне сказали что надо передать с лямбда-функции на предикат. и она должно скомпилироваться. Как это перевести?
e73t4ph вне форума Ответить с цитированием
Старый 23.05.2012, 00:32   #4
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

по моему, эту проблему:
Цитата:
ошибка в следующем
`accumulate' is not a member of `std'
решит добавление
Код:
using namespace std;
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 23.05.2012, 00:47   #5
e73t4ph
Новичок
Джуниор
 
Регистрация: 22.05.2012
Сообщений: 9
По умолчанию

все равно ошибка в том же месте
e73t4ph вне форума Ответить с цитированием
Старый 23.05.2012, 06:42   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
решит добавление
Не решит. Вы сообщение об ошибке читали?

Во втором посте уже ответили.
p51x вне форума Ответить с цитированием
Старый 23.05.2012, 08:04   #7
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Мне сказали что надо передать с лямбда-функции на предикат. и она должно скомпилироваться. Как это перевести?
А по-русски?

И подключите вы уже <numeric>
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 23.05.2012, 12:01   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
А по-русски?
Это
Код:
 [](const int value) {return value <=1; }
заменить на
Код:
func
Где func и будет делать сравнение.
p51x вне форума Ответить с цитированием
Старый 23.05.2012, 21:31   #9
e73t4ph
Новичок
Джуниор
 
Регистрация: 22.05.2012
Сообщений: 9
По умолчанию

программа наконец-то написана под DevC++

Код:
#include <iostream>
#include <algorithm>
#include <numeric>
#include <iterator>
 
struct predicate : std::unary_function<void, int> {
 
   predicate(int * R, int & Rn, int * S, int & Sn) : R(R), Rn(Rn), S(S), Sn(Sn) {}
   
   void operator ()(int value) const {
      if (value <= 1) {
         R[Rn++] = value;
      } else {
         S[Sn++] = value;
      }
   }
 
private:
   int * R;
   int & Rn;
   int * S;
   int & Sn;
};
 
bool f(int value) {
    return value <= 1;
}
 
int main()
{
const int n = 10;
int arr[n] = {-5, 2, 5, -1, 4, 2, 4, 0, -1, 10}, Rn, Sn, *R, *S;
std::copy(arr, arr + n, std::ostream_iterator<int>(std::cout, " ")); 
Rn = std::count_if(arr, arr + n, f);//[](const int value) {return value <=1; } );
Sn = n - Rn;
R = new int[Rn]; 
S = new int[Sn];
Rn = Sn = 0; 
std::for_each(arr, arr + n, predicate(R, Rn, S, Sn));//[R, &Rn, S, &Sn](const int value) 
//{if (value <=1) R[Rn++] = value; else S[Sn++] = value; } );
std::cout<< std::endl;
std::copy(R, R + Rn, std::ostream_iterator<int>(std::cout, " ")); 
std::cout<< std::endl;
std::copy(S, S + Sn, std::ostream_iterator<int>(std::cout, " ")); 
std::cout<< std::endl<< "(1 + R)/(1 + S) = "
<< (double) (1 + std::accumulate(R, R + Rn, 0) ) / (1 + std::accumulate(S, S + Sn, 0) );
delete []R;
delete []S; 
return 0;
}
вопрос другой правильно ли собрана блок-схема предствленная ниже

Последний раз редактировалось ACE Valery; 23.05.2012 в 23:10.
e73t4ph вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DevC++ и wxFormBuilder(wxWidgets) interfeys Общие вопросы C/C++ 0 12.05.2011 11:56
графика на C++(Devc++) It is not me Помощь студентам 4 26.01.2011 20:11
Перебор значений (DevC++) InquisitorAles Помощь студентам 5 21.11.2010 23:26
DevC++ switch Диман56 Общие вопросы C/C++ 7 03.11.2010 11:08