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

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

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

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

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

Здравствуйте. Есть программа, которая производит арифметическое кодирование и декодирование. но во время компиляции в 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);
                                           }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2014, 14:43     Реализация арифметического кодирования
Посмотрите здесь:

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

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

программа кодирования текста - C++
Всем добрый день :) Есть такая программа,по кодированию текста в файле, с помощью ключа,который находится в другом файле и сохранение...

Поцедура циклического кодирования - C++
Доброго дня! Помогите программно реализовать процедуру кодирования сообщения с использованием циклического кода, заданного порождающим...

Программа кодирования и декодирования - C++
Написать программу кодирования и декодирования последовательности символов длины N. Алгоритм кодирования заключается в следующем. Строится...

Нужен исходник кодирования base64 - C++
Нужен исходник программы, которая кодирует текст в base64 и декодирует base64 в текст. Помогите, пожалуйста.

Алгоритм кодирования имен цифрами - C++
Решил написать код для задачки из 3 класса на решение алгоритма. Но запутался в конце кода с 0 . Как сделать ,чтобы не было пробела в...

Оформление кода на С++ (стандарты кодирования) - C++
Добрый день, написал лабораторную на с++, а преподаватель не хочет принимать из-за стандартов оформления, дак вот, как привести программу к...

Написать программу кодирования/декодирования строки - C++
Требуется написать программу кодирования/декодирования строки (заданной с клавиатуры) и текстового файла используя ассиметричный алгоритм...

Реализовать алгоритм оптимального кодирования Хаффмана - C++
Добрый день! Нужно реализовать алгоритма Хаффмана. Помогите, пожалуйста.

Ребятушки, у кого-ниудь есть алгоритм кодирования и декодирования по Хаффману? - C++
декодирование у меня есть я как бы среднячок, но сама написать не осилю)

Найти ошибку в коде Алгоритм Плейфера (создания решетки кодирования) - C++
Задача: сделать двумерный массив в котором будет ключевое слово и алфавит с неповторяеммых символов. пробую реализовать алгоритм Плейфера...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CeJIbXo3
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 2
20.06.2014, 23:26  [ТС]     Реализация арифметического кодирования #2
Разобрался с model.h, теперь встал вопрос с arithmetic_coding.h - не знаю какую библиотеку надо использовать чтобы можно было подключить этот заголовочник. Подскажите пожалуйста
Yandex
Объявления
20.06.2014, 23:26     Реализация арифметического кодирования
Ответ Создать тему
Опции темы

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