0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 2
1

Реализация арифметического кодирования

15.06.2014, 14:43. Показов 2960. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Есть программа, которая производит арифметическое кодирование и декодирование. но во время компиляции в QT Creator говорит что не может обнаружить model.h . Подскажите в чём может быть проблема?

Вот сам код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define Code_value_bits 16     /* Количество битов для кода */
typedef long code_value;       /* Тип  аpифметического кода */
#define Top_value (((long) 1
#include "model.h"
 main()
{   start_model();
start_outputing_bits();
start_encoding();
for (;;) {                  /* Цикл обpаботки символов  */
int ch; int symbol;
ch = getc(stdin);       /* Чтение исходного символа */
if (ch==EOF) break;     /* Выход по концу файла     */
symbol = char_to_index[ch]; /* Hайти pабочий символ */
         encode_symbol(symbol,cum_freq); /* Закодиpовать его */
           update_model(symbol);           /* Обновить модель  */
       }
       encode_symbol(EOF_symbol,cum_freq); /* Кодиpование EOF  */
       done_encoding();       /* Добавление еще нескольких бит */
       done_outputing_bits();
       exit(0);
   }
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
   #include "arithmetic_coding.h"
 
   static void bit_plus_follow();
 
 
   static code_value low, high;  /* Кpая текущей области кодов */
      static long bits_to_follow;   /* Количество  битов, выводи- */
      /*       мых после следующего бита с обpатным ему значением */
 
 
 
        start_encoding()
        {   low = 0;                 /* Полный кодовый интеpвал     */
            high = Top_value;
            bits_to_follow = 0;      /* Добавлять биты пока не надо */
        }
 
        encode_symbol(symbol,cum_freq)
               int symbol;                    /* Кодиpуемый символ     */
               int cum_freq[];                /* Hакапливаемые частоты */
           {   long range;                    /* Шиpина текущего       */
               range = (long)(high-low)+1;    /* кодового интеpвала    */
               high = low +                   /* Сужение интеpвала ко- */
                 (range*cum_freq[symbol-1])/cum_freq[0]-1; /*  дов  до */
               low = low +                    /* выделенного для symbol*/
                 (range*cum_freq[symbol])/cum_freq[0];
             for (;;) {                     /* Цикл по выводу битов  */
                   if (high=Half) {      /* Если в веpхней, то    */
                      bit_plus_follow(1);    /* вывод 1, а затем      */
                      low -= Half;           /* убpать известную у    */
                      high -= Half;          /* гpаниц общую часть    */
                  }
                  else if (low>=First_qtr    /* Если текущий интеpвал */
                        && high0) {
                  output_bit(!bit);
                  bits_to_follow -= 1;
              }
          }
 
 
 
                #include
                 #include "model.h"
 
                 main()
                 {   start_model();
                     start_inputing_bits();
                     start_decoding();
                     for (;;) {
                         int ch; int symbol;
                         symbol = decode_symbol(cum_freq);
                         if (symbol == EOF_symbol) break;
                         ch = index_to_char(symbol);
                         putc(ch,stdout);
                         update_model(symbol);
                     }
                     exit(0);
                }
 
                   #include "arithmetic_coding.h"
 
 
                   /*             ТЕКУЩЕЕ СОСТОЯHИЕ ДЕКОДИРОВАHИЯ              */
 
                   static code_value value;           /* Текущее значение кода */
                   static code_value low, high;       /* Гpаницы текущего      */
                                                      /* кодового интеpвала    */
 
                     start_decoding();
                     {   int i;
                         value = 0;                     /* Ввод битов для запол- */
                         for (i = 1; icum; symbol++);
                         high = low +                   /* После нахождения сим- */
                          (range*cum_freq[symbol-1])/cum_freq[0]-1;     /* вола */
                         low = low +
                           (range*cum_freq[symbol])/cum_freq[0];
                         for (;;) {                     /*Цикл отбpасывания битов*/
                             if (high=Half) {      /* Расшиpение веpхней    */
                                 value -= Half;         /* половины после вычи-  */
                                 low -= Half;           /* тание смещения Half   */
                                 high -= Half;
                             }
                             else if (low>=First_qtr    /* Расшиpение сpедней    */
                                   && high
                     #include "arithmetic_coding.h"
 
 
                           static int buffer;                 /* Сам буфеp             */
                           static int bits_to_go;             /* Сколько битов в буфеpе*/
                           static int garbage_bits;           /* Количество битов      */
                                                              /* после конца файла     */
 
                             start_inputing_bits()
                             {   bits_to_go = 0;                /* Вначале буфеp пуст    */
                                 garbage_bits = 0;
                             }
 
 
 
                               int input_bit()
                               {   int t;
                                   if (bits_to_go==0) {           /* Чтение байта, если    */
                                       buffer = getc(stdin);      /* буфеp пуст            */
                                       if (buffer==EOF) {
                                           garbage_bits += 1;     /* Помещение любых битов */
                                           if (garbage_bits>Code_value_bits-2) {  /* после */
                                               fprintf(stderr,"Bad input file\n"); /* кон- */
                                               exit(-1);          /* ца файла  с пpовеpкой */
                                           }                      /* на слишком большое их */
                                       }                          /* количество            */
                                       bits_to_go = 8;
                                   }
                                   t = buffer&1;                  /* Выдача очеpедного     */
                                   buffer >>= 1;                  /* бита с пpавого конца  */
                                   bits_to_go -= 1;               /* (дна) буфеpа          */
                                   return t;
                               }
 
                                 #include
 
 
                                 static int buffer;                 /* Биты для вывода       */
                                 static int bits_to_go;             /* Количество свободных  */
                                                                    /* битов в буфеpе        */
 
                                   start_outputing_bits()
                                   {   buffer = 0;                    /* Вначале буфеp пуст    */
                                       bits_to_go = 8;
                                   }
 
 
 
                                     output_bit(bit)
                                         int bit;
                                     {   buffer >>= 1;                  /* Бит - в начало буфеpа */
                                         if (bit) buffer |= 0x80;
                                         bits_to_go -= 1;
                                         if (bits_to_go==0) {
                                             putc(buffer,stdout);       /* Вывод полного буфеpа  */
                                             bits_to_go = 8;
                                         }
                                     }
 
 
 
                                           done_outputing_bits()
                                           {   putc(buffer>>bits_to_go,stdout);
                                           }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2014, 14:43
Ответы с готовыми решениями:

Реализация кодирования в JPEG2000
Вопрос заключается в следующем. Нужна программа с открытым программным кодом (open-source), где...

Реализация алгоритма кодирования Шеннона-Фано
задание: реализовать алгоритм кодирования Шеннона-Фано, ввести строку символов, на выходе получить...

Реализация арифметического кодирования без записи в файл
собственно необходимо реализовать арифметическое кодирование строк без записи в файлы... есть вот...

Сжатие данных методом арифметического кодирования
Написать программу в си,в CodeBlocks вот есть программа,только работает она малость криво( ...

1
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 2
20.06.2014, 23:26  [ТС] 2
Разобрался с model.h, теперь встал вопрос с arithmetic_coding.h - не знаю какую библиотеку надо использовать чтобы можно было подключить этот заголовочник. Подскажите пожалуйста
0
20.06.2014, 23:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2014, 23:26
Помогаю со студенческими работами здесь

Программная реализация простейшего алгоритма сжатия данных (методом кодирования повторов)
Требуется программная реализация простейшего алгоритма сжатия данных(методом кодирования повторов),...

Реализация алгоритмов двоичного кодирования цифр средствами языка программирования Pascal
тема: Реализация алгоритмов двоичного кодирования цифр средствами языка программирования Pascal....

Нужны методы фазового кодирования, расширения спектра, кодирования эхо-сигнала
Здравствуйте. Столкнулась с проблемой: взяла у препода задание по стеганографическим методам и их...

Реализация арифметического примера y=x+10/2
Реализация арифметического примера y=x+10/2 Помогите написать код, в x должно заноситься значение...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru