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

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

Войти
Регистрация
Восстановить пароль
 
flames
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 34
#1

Последовательность Хэмминга - C++

13.06.2016, 09:32. Просмотров 407. Ответов 6
Метки нет (Все метки)

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

Последовательность Хэмминга - C++
1)Даны натуральные числа a,b (a<=b). Получить все простые числа p, удовлетворяющие неравенству a<=p<=b. 2)Дано натуральное число n....

Коды Хэмминга С++ - C++
Коды Хэмминга С++

Код Хэмминга - C++
Прошу объяснить как работает этот код Хэмминга и написать прогу по заданию. Задание. 1)Написать программу, реализующую код...

Код Хэмминга - C++
Всем привет, разбираю пример кода Хмминга, подскажите плз, что это за фрагменты void PackFile(char* in, char* out) { ifstream...

код Хэмминга - C++
требуется написать программу, (кодер/декодер) код хэмминга (15,11) вводим ошибку срочно

Декодер Хэмминга - C++
Пишу кодер и декодер Хэмминга (15,11). В начале это была одна программа и использовались одни и теже служебгые переменные. Count отвечает...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
13.06.2016, 16:25 #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
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
#include <iostream>
#include <functional>
using namespace std;
 
typedef std::pair<bool, int>  li_t;
typedef std::function<li_t()> fi_t;
 
int main() {
    fi_t nil  = []() -> li_t {return std::make_pair(false, 0);};
    auto null = [](li_t a) -> bool {return !a.first;};
    auto val  = [](li_t a) -> int  {return a.second;};
    
    auto cons = [](int a, const fi_t& l) -> fi_t {
        int p=0; return [=]() mutable -> li_t {
                    if (p) return l(); else {p=1; return std::make_pair(true, a);}};};
    
    auto map = [cons,nil,null,val](const auto& f, const fi_t& l) -> fi_t {
        auto go = [f,cons,nil,null,val](const fi_t& l, const auto& la) -> fi_t {
            li_t e=l(); return null(e) ? nil : cons(f(val(e)), la(l, la));};
        return go(l, go);};
        
    auto show = [null,val](const fi_t& l) -> int {
        auto go = [null,val](const fi_t& l, auto& la) -> int {
            li_t e=l(); if (null(e)) {cout<<'\n'; return 0;}
                        else {cout<<val(e)<<'\t'; return la(l, la);}};
        return go(l, go);};
     
    auto merge = [cons,nil,null,val](const fi_t& a, const fi_t& b) -> fi_t {
        auto go = [cons,nil,null,val](const fi_t& a, const fi_t& b, const auto& la) -> fi_t {
            li_t ea=a(), eb=b();
            return null(ea) && null(eb) ? nil :
                null(ea) ? cons(val(eb), b) : null(eb) ? cons(val(ea), a) :
                val(ea)<val(eb) ? cons(val(ea), la(a, cons(val(eb), b), la)) :
                val(ea)>val(eb) ? cons(val(eb), la(cons(val(ea), a), b, la)) :
                                  cons(val(ea), la(a, b, la));};
        return go(a, b, go);};
    
    auto take = [cons,nil,null,val](int n, const fi_t& l) -> fi_t {
        auto go = [cons,nil,null,val](int i, const fi_t& l, const auto& la) -> fi_t {
            li_t e=l(); return (!i) || null(e) ? nil : cons(val(e), la(i-1, l, la));};
        return go(n, l, go);};
        
    auto equal = [null,val](const fi_t& a, const fi_t& b) -> bool {
        auto go = [null,val](const fi_t& a, const fi_t& b, const auto& la) -> bool {
            li_t ea=a(), eb=b();
            return null(ea) && null(eb) ? true : null(ea) ? false : null(eb) ? false :
                val(ea)==val(eb) ? la(a, b, la) : false;};
        return go(a, b, go);};
   
    auto hammingList = [=](int n) -> fi_t {
        
        auto step = [merge,map,cons](const fi_t& l) -> fi_t {
            auto sc = [map](int n, const fi_t& l) -> fi_t {
                return map([n](int i)->int {return i*n;}, l);};
            fi_t l2=l, l3=l, l5=l;
            return cons(1, merge(sc(2, l2), merge(sc(3, l3), sc(5, l5))));};
            
        auto go = [n,step,take,equal](const fi_t& l, const auto& la) -> fi_t {
            fi_t l0=l, le0=l, l1=step(l), le1=l1;
            if (equal(take(n,le0), take(n,le1))) return take(n,l0);
            else return la(l1, la);};
 
        return go(cons(1,nil), go);};
    
    auto foldr = [cons,nil,null,val](const auto& f, auto a, const fi_t& l) -> fi_t {
        auto go = [f,cons,nil,null,val](auto a, const fi_t& l, const auto& la) -> fi_t {
            li_t e=l(); return null(e) ? a : f(val(e), la(a, l, la));};
        return go(a, l, go);};
    
    int N; cin >> N;
 
    fi_t h = hammingList(N);
    //show(h);
 
    cout << "Sum = " << val(foldr(
        [cons,nil,val](int a, const fi_t& b) -> fi_t {return cons(a+val(b()), nil);},
        cons(0,nil), h) ()) << '\n';
    
    return 0;
}
1
flames
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 34
13.06.2016, 17:13  [ТС] #3
Забыл сказать что программу нужно написать не через функции...
0
regio1961
108 / 108 / 49
Регистрация: 06.06.2016
Сообщений: 249
13.06.2016, 20:18 #4
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>
 
 bool is_Hamming( const unsigned &k )
 {
       if ( k < 2 )
         return false;
   unsigned test = k;
       while ( !(test % 2) )
         test /= 2;
       while ( !(test % 3) )
         test /= 3;
       while ( !(test % 5) )
         test /= 5;
   return ( test == 1 );
 }
 //-----------------------------------------------------------------
 unsigned long  sum_hamming_numbers( unsigned n )
 {
   unsigned long  sum = 0;
       for ( unsigned  i = 2, counter = 0; counter < n ; ++i  )
       {
             if ( is_Hamming( i ) )
             {
               sum += i;
               ++counter;
             }
       }
   return sum;
 }
 //-----------------------------------------------------------------
 int  main()
 {
   std::cout << sum_hamming_numbers( 5 ) << std::endl;
   //std::cin.get();
   return 0;
 }
0
flames
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 34
14.06.2016, 09:20  [ТС] #5
Не работает. А можно эту программу как бы просто линейно написать?
0
l_lenskaya
10 / 10 / 2
Регистрация: 02.07.2013
Сообщений: 52
14.06.2016, 10:18 #6
flames, Поиск же. Или с паскалем не дружны?
0
flames
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 34
14.06.2016, 17:39  [ТС] #7
Нет, не знаю.

Добавлено через 4 часа 18 минут
А вы можете написать?

Добавлено через 1 час 5 минут
Помогите кто нибудь, а то сдавать уже скоро...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 17:39
Привет! Вот еще темы с ответами:

Генерация чисел Хэмминга - C++
Задание 2.24. Генерация чисел Хэмминга Числами Хэмминга называются натуральные числа, которые среди своих делителей имеют только степени...

Код Хэмминга (Dev C++) - C++
всем добрый день; сможете помочь с кодом, надо написать код хэмминга в dev c++, плиииз. по братский

Расширенный код Хэмминга - C++
Всем привет!... Наткнулся на задачу... Сгенерируйте все возможные кодовые слова расширенного кода Хэмминга для n в диапазоне от 1 до...

Код Хэмминга кодер-декодер - C++
Требуется создать кодер-декодер по коду Хэмминга. Почитал, вроде ничего сложного. Теперь надо написать.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.06.2016, 17:39
Ответ Создать тему
Опции темы

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