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

последовательность (1+R)/(1+S) под DevC++ - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
22.05.2012, 21:54     последовательность (1+R)/(1+S) под DevC++ #1
Даны n, последовательность n x , x ,...x 1 2 . Получить (1+R)/(1+S), где R – сумма тех членов
последовательности, которые не превосходят 1, а S – сумма членов, больших 1. Использовать динамические
массивы.
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 <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;
}
------------------------------------------

не компилирует
ошибка в строчке
C++
1
std::copy(arr, arr + n, std::ostream_iterator<int>(std::cout, " "));
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.05.2012, 20:18     последовательность (1+R)/(1+S) под DevC++ #21
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
};
C++
1
std::for_each(arr, arr + n, predicate(R, Rn, S, Sn));
Добавлено через 44 секунды
Было бы проще просто цикл написать, кстати.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
23.05.2012, 20:24  [ТС]     последовательность (1+R)/(1+S) под DevC++ #22
блин опять не то.
выдает ошибку:
redefinition of `struct main():redicate'
previous definition of `struct main():redicate'
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.05.2012, 20:26     последовательность (1+R)/(1+S) под DevC++ #23
Вроде ясно всё написано, переопределение predicate. Назовите по другому.
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
23.05.2012, 20:28  [ТС]     последовательность (1+R)/(1+S) под DevC++ #24
вот этот DevC++
http://ifolder.ru/30669895

Может ты в нем разберешься и заставишь его компилироваться?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.05.2012, 20:37     последовательность (1+R)/(1+S) под DevC++ #25
Весь код в студию.
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
23.05.2012, 20:40  [ТС]     последовательность (1+R)/(1+S) под DevC++ #26
изначальный код

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 <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;
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.05.2012, 20:46     последовательность (1+R)/(1+S) под DevC++ #27
Я имел ввиду последний вариант. Ну да ладно. Так?
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
#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;
}
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
23.05.2012, 21:08  [ТС]     последовательность (1+R)/(1+S) под DevC++ #28
большое спасибо все заработало.
последняя прозьба
[IMG]http://s019.***********/i607/1205/7c/4f231681610c.jpg[/IMG]

правильно ли блок-схема составлена?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.05.2012, 21:19     последовательность (1+R)/(1+S) под DevC++ #29
Цитата Сообщение от e73t4ph Посмотреть сообщение
правильно ли блок-схема составлена?
Без понятия.
e73t4ph
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 34
23.05.2012, 21:25  [ТС]     последовательность (1+R)/(1+S) под DevC++ #30
еще раз спасибо за такую работу
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2012, 01:25     последовательность (1+R)/(1+S) под DevC++
Еще ссылки по теме:

C++ Запись формулы в DevC++
одномерный массив в devC++ C++
C++ А компилятор DevC++ поддерживает С++11?

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
24.05.2012, 01:25     последовательность (1+R)/(1+S) под DevC++ #31
На самом деле вот, без всяких понтов и простенько. Для Dev-a:
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
#include <iostream>
#include <conio.h>
 
int main()
{
    const int n = 10;
    int arr[n] = {-5, 2, 5, -1, 4, 2, 4, 0, -1, 10}, Rn = 0, Sn = 0, *R, *S, Rsum = 0, Ssum = 0;
    for(int i=0; i < n; i++)
    {
        std::cout<< arr[i]<< " ";
        if (arr[i] <= 1) Rn++;
    }
    Sn = n - Rn;
    R = new int[Rn]; 
    S = new int[Sn];
    Rn = Sn = 0;
    for(int i=0; i < n; i++)
        arr[i] <= 1 ? R[Rn++] = arr[i]: S[Sn++] = arr[i];
    std::cout<< std::endl;
    for(int i=0; i < Rn; i++)
    {
        std::cout<< R[i]<< " ";
        Rsum += R[i];
    }
    std::cout<< std::endl;
    for(int i=0; i < Sn; i++)
    {
        std::cout<< S[i]<< " ";
        Ssum += S[i];
    }
    std::cout<< std::endl<< "(1 + R)/(1 + S) = " << (double) (1 + Rsum) / (1 + Ssum );
    getch();
    delete []R;
    delete []S;
    return 0;
}
Yandex
Объявления
24.05.2012, 01:25     последовательность (1+R)/(1+S) под DevC++
Ответ Создать тему
Опции темы

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