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

С под Linux

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.83
rubilnick_90
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
#1

Сжатие информации методом LZ77 - C Linux

09.12.2009, 23:23. Просмотров 3818. Ответов 11
Метки нет (Все метки)

Привет! Люди помогите, может у кого есть исходник программы сжатия информации методом LZ77??? Я тут нашел один на википедии, но он не особо хочет работать, компилятор ошибки выдает, я его подкорректировал немного, старые ошибки убрались и появились новые, может ктонибудь найдет ошибку там...заранее благодарю...
Вот код
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#include <stdio.h>
#include <sys/stat.h>
#define DICBITS   12             // Log(DICSIZE)
#define DICSIZE   (1<<DICBITS)   // 4-32kB Размер словаря
#define THRESHOLD 2              // Порог
#define STRBITS   6              // Log(STRMAX-THRESHOLD)
#define STRMAX    ((1<<STRBITS)+THRESHOLD) // Мах. длина строки
#define BUFSIZE   0xff00U        // Полный размер буфера
#define TEXTSIZE  (BUFSIZE-DICSIZE-STRMAX) // Размер буфера текста
#define YES       1
#define NO        0
 
FILE *first_file, *second_file;
long fileleng;
int srcleng=0;
unsigned char *srcbuf, *srcstart;
/*==============================
========Функция записи=========
==============================*/
int putbits(int data, int nbits)
{
    static int bitcounter=0;
    static int outdata=0;
    int bit, error;
    data<<=(16-nbits);
    for( ; nbits > 0 ; nbits-- )
    {
        if( bitcounter == 8 )
        {
            bitcounter=0;
            error=putc(outdata,second_file);
            if( error == EOF )
            { 
                printf("Error writing to Second file."); 
                return -5; 
            }
        }
    outdata<<=1;
    bit=( data & 0x8000 ) ? 1:0;
    outdata+=bit;
    bitcounter++;
    data<<=1;
    }
}
 
/*==============================
======Функция Архивирования=====
==============================*/
void compress_stud()
{
    struct stat buf;
    unsigned char  *position, *pointer; //байт в файле , байт в буфере
    int i, dist, offset=0, last=NO, cnt, maxleng;
 
    printf("Compress started.");
 
    // Записываем размер исходного файла
 
    stat(fileno(first_file),&buf);
    fileleng=buf.st_size;
    write(fileno(second_file), &fileleng, sizeof(long));
 
    // Читаем файл в буфер по частям размера TEXTSIZE 
    while((srcleng=fread(srcstart+offset, 1, TEXTSIZE, first_file))>0)
    {
        if(srcleng < TEXTSIZE ) // Последняя часть текста 
        {
            last=YES; 
        }
        position=srcstart;
        pointer=srcbuf;
        srcleng+=offset;
        while(srcleng>0)
        {
            printf("\n\nStep - %d\n",srcleng);
            maxleng=0;
 
            if((last == NO) && (srcleng < STRMAX)) // Если в буфере текста осталось мало символов, сдвигаем словарь и оставшийся текст в начало буфера и дочитываем следующую часть из файла 
            {
                memcpy(srcbuf,pointer,DICSIZE+(int)srcleng);
                offset=(int)srcleng; 
                break;
            }
 
            for( i=DICSIZE-1; i >= 0; i-- )// Ищем самую длинную совпадающую строку в словаре
            {
                for( cnt=0; cnt < STRMAX; cnt++ )
                if( *(position+cnt) != *(pointer+i+cnt) ) 
                break;
 
                if( cnt <= THRESHOLD )// Если длина меньше порога, отбрасываем 
                continue;
 
                if( cnt == STRMAX )// Если максимальная строка, дальше не ищем 
                {
                    dist=DICSIZE-1-i; //позиция
                    maxleng=STRMAX; //длина
                    break; 
                }
 
                if( cnt > maxleng ) // Если очередная строка длиннее уже найденных, сохраняеМ ее длину и позицию
                {
                    dist=DICSIZE-1-i; // позиция
                    maxleng=cnt; //длина
                }
            }
 
            if( (last == YES) && (maxleng > srcleng) ) // Проверяем, чтобы не было выхода за границы файла
            {
                maxleng=(int)srcleng; //обрезаем длину по границу буфера
            }
 
            if( maxleng > THRESHOLD )//Если строка достаточно длинная, формируем pointer-код
            {
                printf("link!\n");
                putbits(1,1); //помечаем как ссылку
                putbits(dist,DICBITS); //записываем позицию
                putbits(maxleng-THRESHOLD-1,STRBITS); //записываем длину
                position+=maxleng;
                srcleng-=maxleng;
                pointer+=maxleng;
            }
            else // Иначе - chr-код
            {   
                printf("Char!\n");
                putbits(0,1);  //помечаем как chr-код
                putbits(*position,8); //записываем чар код
                position++; 
                srcleng--; 
                pointer++;
            }
        }
    }
 
    // Записываем оставшиеся биты 
    putbits(0,8);
 
    printf("\nCompress compleated!\n",fileleng);
}
 
//Разархивирование Алгоритм  LZ77
 
/*==============================
======Функция считывания========
==============================*/
int getbits(int nbits)
{
    static int bitcounter=8;
    static int indata=0;
    int bit, data=0;
 
    for( ; nbits > 0 ; nbits-- )
    {
        if( bitcounter == 8 )
        { 
            bitcounter=0; 
            indata=getc(first_file); 
        }
 
        if( indata == EOF )
        { 
            printf("Error writing to First file."); 
            return -6; 
        }
 
        bit=( indata & 0x80 ) ? 1:0;
        data<<=1; 
        data+=bit; 
        bitcounter++; 
        indata<<=1;
    }
    return data;
}
 
/*==============================
=======Функция Извлечения=======
==============================*/
 
void decompress_stud()
{
    struct stat buf;
    unsigned char  *pos;
    int   i, dist, ch, maxleng;
 
    printf("Decompress started.\n");
 
    // Получаем длину исходного файла
    read(fileno(first_file),&fileleng,sizeof(long));
    pos=srcstart;
 
    while( fileleng > 0 )
        {
        if( (ch=getbits(1)) == 0 ) // Если chr-код, копируем в буфер текста символ 
        {
            ch=getbits(8); 
            putc(ch,second_file); 
            *pos=ch; 
            pos++; 
            fileleng--; 
        }
        else // Иначе - копируем maxleng символов из словаря, начиная с позиции dist
        {
            dist=getbits(DICBITS)+1; 
            maxleng=getbits(STRBITS)+THRESHOLD+1;
            for( i=0; i < maxleng; i++ )
            {
                *(pos+i)=*(pos+i-dist); 
                putc(*(pos+i-dist),second_file); 
            }
            pos+=maxleng; 
            fileleng-=maxleng;
        }
 
        if( pos > srcstart+TEXTSIZE ) // Если буфер заполнен, записываем его на диск и сдвигаем словарь в начало буфера
        {
            memcpy(srcbuf,pos-DICSIZE,DICSIZE);
            pos=srcstart;
        }
    }
    printf("\nDecompress compleated.");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2009, 23:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сжатие информации методом LZ77 (C Linux):

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

Написать программу кодировки файла методом LZ77 - Visual C++
Необходимо написать программу на visual c++ которая сжимает и кодирует файл. Метод сжатия: LZ77. Метод кодирования: кодировка сдвигом. С...

Сжатие данных методом LZW - C++ Builder
Народ помогите кто-нибудь!!! У кого-то есть исходник метода LZW сжатия данных, на C++ Builder 6? Народ, выручайте, очень надо...

Сжатие файла методом Хаффмана - PHP
Доброго всем! Пытаюсь на PHP реализовать метод Хаффмана. Нашел кучу примеров на Си, но мне это не помогло. Начальный код после...

Сжатие данных методом Хаффмана - Delphi
надо прогу сделать... самую простейшую... Задача: вводишь строку символов (можно ограничиться 50 символами думаю), программа сжимает...

Сжатие методом Шеннона-Фано (Pascal -> C++) - C++
Есть код на pascal может кто-нибудь помочь перевести на с++ ? uses crt; var c:char; s,s1,s2:string; i,n,j,j1:byte; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Harlequin
41 / 41 / 4
Регистрация: 08.11.2009
Сообщений: 167
10.12.2009, 00:10 #2
навскидку предположение:
возможно трабла в двойных кавычках
сталкивался с таким под никсами
нужно просто удалить все двойные кавычки и набрать их заново с клавы

фишка в том что символ по виду вроде один и тот же, но реально 2 разным символа с разными кода обозначают двойные кавычки
rubilnick_90
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
10.12.2009, 10:34  [ТС] #3
Цитата Сообщение от Harlequin Посмотреть сообщение
навскидку предположение:
возможно трабла в двойных кавычках
сталкивался с таким под никсами
нужно просто удалить все двойные кавычки и набрать их заново с клавы

фишка в том что символ по виду вроде один и тот же, но реально 2 разным символа с разными кода обозначают двойные кавычки
На вряд ли....так бы компилятор выдавал ошибки в printf (я так посмотрел быстренько, только там используются кавычки). Сейчас напишу что выдает компилятор с библиотекой sys/stat.h:
arch.c: In function ‘compress_stud’:
arch.c:65: warning: passing argument 1 of ‘stat’ makes pointer from integer without a cast
/usr/include/sys/stat.h:209: note: expected ‘const char * __restrict__’ but argument is of type ‘int’
arch.c:86: warning: incompatible implicit declaration of built-in function ‘memcpy’
arch.c: In function ‘decompress_stud’:
arch.c:222: warning: incompatible implicit declaration of built-in function ‘memcpy’
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
collect2: ld returned 1 exit status
А вот что выдает без библиотеки sys/stat.h:
arch.c: In function ‘compress_stud’:
arch.c:57: error: storage size of ‘buf’ isn’t known
arch.c:86: warning: incompatible implicit declaration of built-in function ‘memcpy’
arch.c: In function ‘decompress_stud’:
arch.c:187: error: storage size of ‘buf’ isn’t known
arch.c:222: warning: incompatible implicit declaration of built-in function ‘memcpy’
То есть ошибка гдето где идет определение размера исходного файла...
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.12.2009, 11:19 #4
Цитата Сообщение от rubilnick_90 Посмотреть сообщение
arch.c: In function ‘compress_stud’:
arch.c:65: warning: passing argument 1 of ‘stat’ makes pointer from integer without a cast
/usr/include/sys/stat.h:209: note: expected ‘const char * __restrict__’ but argument is of type ‘int’
arch.c:86: warning: incompatible implicit declaration of built-in function ‘memcpy’
arch.c: In function ‘decompress_stud’:
arch.c:222: warning: incompatible implicit declaration of built-in function ‘memcpy’
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
collect2: ld returned 1 exit status
Единственная ошибка, это отсутствие функции main()

Добавь в самый конец файла, это:
C
1
2
3
int main() {
   return 0;
}
rubilnick_90
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
10.12.2009, 11:24  [ТС] #5
Спасибо, одной ошибкой меньше....
rubilnick_90
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
10.12.2009, 17:53  [ТС] #6
Добавил библиотеку <string.h> и убралась еще одна ошибка...
осталась только эта
arch.c: In function ‘compress_stud’:
arch.c:66: warning: passing argument 1 of ‘stat’ makes pointer from integer without a cast
/usr/include/sys/stat.h:209: note: expected ‘const char * __restrict__’ but argument is of type ‘int’
rubilnick_90
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
10.12.2009, 21:39  [ТС] #7
Ура!!!!Компилятор замолчал!!!! Оказывается надо было в
stat(fileno(first_file),&buf);
вместо stat поставить fstat и все.....
только теперь вопрос.....а что дальше????надо makefile делать???я просто никогда таким не пользовался...в мане ничего не понял толком....
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.12.2009, 08:51 #8
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
...
...
 
void usage(const char* pn) {
   printf("usage:\n%s [cd] infile outfile\n   c - for compress\n   d - for decompress\n", pn);
}
 
int main(int argc, const char** argv) {
   if ( argc < 4 ) {
      usage(argv[0]);
      return 0;
   }
 
   int compress = (strcmp(argv[1], "c")) == 0;
   const char* in = argv[2];
   const char* out = argv[3];
 
   first_file = fopen(in, "rb");
   if ( !first_file ) return 1;
   second_file = fopen(out, "wb");
   if ( !second_file ) return 1;
 
   if ( compress ) {
      compress_stud();
   } else {
      decompress_stud();
   }
 
   (first_file) ? fclose(first_file) : (void)0;
   (second_file) ? fclose(second_file) : (void)0;
   
   return 0;
}
не проверял.
rubilnick_90
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
11.12.2009, 10:12  [ТС] #9
niXman, благодарю....очень круто....спасибо большое!!!!
rusgard
Сообщений: n/a
16.04.2010, 22:36 #10
rubilnick_90, Извени, но ты не мог бы выложить полный текст проги заново!!!!Заранее спасибо
rubilnick_90
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
17.04.2010, 13:16  [ТС] #11
ОК, без проблем, только все комменты там переведены на польский (т.к. учусь в польше), прога работает но не до конца, то есть там гдето проблема в #DEFINE'нах
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#include <stdio.h>
#include <sys/stat.h>
#include <string.h>
#define DICBITS   12             // Log(DICSIZE)
#define DICSIZE   (1<<DICBITS)   // Rozmiar slownika
#define THRESHOLD 2              // Prog
#define STRBITS   6              // Log(STRMAX-THRESHOLD)
#define STRMAX    ((1<<STRBITS)+THRESHOLD) // Maksymalny rozmiar wierszu
#define BUFSIZE   0xff00U        // Pelny rozmiar bufora
#define TEXTSIZE  (BUFSIZE-DICSIZE-STRMAX) // Rozmiar bufora teksta
#define YES       1
#define NO        0
 
FILE *first_file, *second_file;
long fileleng;
int srcleng=0;
unsigned char *srcbuf, *srcstart;
 
/*==============================
======Funkcja zapisywania=======
==============================*/
 
int putbits(int data, int nbits)
{
    static int bitcounter=0;
    static int outdata=0;
    int bit, error;
    data<<=(16-nbits);
    for( ; nbits > 0 ; nbits-- )
    {
        if( bitcounter == 8 )
        {
            bitcounter=0;
            error=putc(outdata,second_file);
            if( error == EOF )
            { 
                printf("Wystapil blad!!!"); 
                return -5; 
            }
        }
    outdata<<=1;
    bit=( data & 0x8000 ) ? 1:0;
    outdata+=bit;
    bitcounter++;
    data<<=1;
    }
}
 
/*==============================
============Kompresja===========
==============================*/
void compress_stud()
{
    struct stat buf;
    unsigned char  *position, *pointer; //bajt w pliku, bajt w buforze
    int i, dist, offset=0, last=NO, cnt, maxleng;
 
    printf("Proces kompresji sie rozpoczal.");
 
    //Zapisujemy rozmiar pliku nalezacego do kompresji
 
    fstat(fileno(first_file),&buf);
    fileleng=buf.st_size;
    write(fileno(second_file), &fileleng, sizeof(long));
 
    // Zapisujemy plik do buforu dzielac na czesci TEXTSIZE 
    while((srcleng=fread(srcstart+offset, 1, TEXTSIZE, first_file))>0)
    {
        if(srcleng < TEXTSIZE ) //Ostatnia czesc pliku
        {
            last=YES; 
        }
        position=srcstart;
        pointer=srcbuf;
        srcleng+=offset;
 
        printf("\n\nStep - %d\n",srcleng);
        maxleng=0;
        
        if((last == NO) && (srcleng < STRMAX)) // Jezeli w buforze textu zostalo za malo symbolow, przenosimy slownik i pozostaly tekst do poczatku bufora i dopisujemy nastepna czesc z pliku 
        {
            memcpy(srcbuf,pointer,DICSIZE+(int)srcleng);
            offset=(int)srcleng; 
            break;
        }
 
        for(i=DICSIZE-1; i >= 0; i--)//Szukamy najdluzszy powtarzajacy sie wiersz w slowniku
        {
            for( cnt=0; cnt < STRMAX; cnt++ )
            if( *(position+cnt) != *(pointer+i+cnt) ) 
            break;
 
            if( cnt <= THRESHOLD )//Jezeli dlugosc wierszu jest mniejsza niz prog, "wyrzucamy" 
            continue;
 
            if( cnt == STRMAX )//Jezeli to jest najdluzszy wiersz, nie szukamy dalej 
            {
                dist=DICSIZE-1-i; //pozycja
                maxleng=STRMAX; //dlugosc
                break; 
            }
 
            if( cnt > maxleng ) //Jezeli jakis wiersz jest dluzszy niz znalezione, zapisujemy jego dlugosc i pozycje
            {
                dist=DICSIZE-1-i; //pozycja
                maxleng=cnt; //dlugosc
            }
        }
        if( (last == YES) && (maxleng > srcleng) ) //Sprawdzamy, zeby nie bylo przekroczenia granicy pliku
            {
                maxleng=(int)srcleng; //zmniejszamy dlugosc do granicy bufora
            }
        if( maxleng > THRESHOLD )//Jezeli wiersz jest za dlugi, robimy pointer-kod
            {
                printf("link!\n");
                putbits(1,1); //zaznaczamy jako link
                putbits(dist,DICBITS); //zapisujemy pozycje
                putbits(maxleng-THRESHOLD-1,STRBITS); //zapisujemy dlugosc
                position+=maxleng;
                srcleng-=maxleng;
                pointer+=maxleng;
            }
            else // Inaczej - char-kod
            {   
                printf("Char!\n");
                putbits(0,1);  //zaznaczamy jako char-kod
                putbits(*position,8); //zapisujemy char-kod
                position++; 
                srcleng--; 
                pointer++;
            }
    }
//Zapisujemy pozostale bity
    putbits(0,8);
 
    printf("\nProces kompresji zostal skonczony!!!\n",fileleng);
}
 
 
/*==============================
=======Funkcja odczytu==========
==============================*/
int getbits(int nbits)
{
    static int bitcounter=8;
    static int indata=0;
    int bit, data=0;
 
    for( ; nbits > 0 ; nbits-- )
    {
        if( bitcounter == 8 )
        { 
            bitcounter=0; 
            indata=getc(first_file); 
        }
 
        if( indata == EOF )
        { 
            printf("Wystapil blad!!!"); 
            return -6; 
        }
 
        bit=( indata & 0x80 ) ? 1:0;
        data<<=1; 
        data+=bit; 
        bitcounter++; 
        indata<<=1;
    }
    return data;
}
 
/*==============================
==========Dekompresja===========
==============================*/
 
void decompress_stud()
{
    struct stat buf;
    unsigned char  *pos;
    int   i, dist, ch, maxleng;
 
    printf("Proces dekompresji sie rozpoczal\n");
 
    //Podieramy dlugosc pliku
    read(fileno(first_file),&fileleng,sizeof(long));
    pos=srcstart;
 
    while( fileleng > 0 )
        {
        if( (ch=getbits(1)) == 0 ) //Jezeli mamy char-kod, kopiujemy symbol do buforu tekstu 
        {
            ch=getbits(8); 
            putc(ch,second_file); 
            *pos=ch; 
            pos++; 
            fileleng--; 
        }
        else //Jezeli nie - kopiujemy maxleng symbolow ze slowniku, poczynajac z pozycji dist
        {
            dist=getbits(DICBITS)+1; 
            maxleng=getbits(STRBITS)+THRESHOLD+1;
            for( i=0; i < maxleng; i++ )
            {
                *(pos+i)=*(pos+i-dist); 
                putc(*(pos+i-dist),second_file); 
            }
            pos+=maxleng; 
            fileleng-=maxleng;
        }
 
        if( pos > srcstart+TEXTSIZE ) //Jezeli nie ma miejsca w buforze, zapisujemy go do dysku i stawiamy slownik do poczatku bufora
        {
            memcpy(srcbuf,pos-DICSIZE,DICSIZE);
            pos=srcstart;
        }
    }
    printf("\nProces dekompresji zostal skonczony!!!");
}
/*==============================
=========Funkcja main()=========
==============================*/
void usage(const char* pn) {
   printf("Jak uzywac program:\n%s [czynnosc] [plik infile] [plik outfile]\nzamiast [czynnosc] trzeba napisac\nc - dla kompresji\nalbo\nd - dla dekompresji\n", pn);
}
 
int main(int argc, const char** argv) {
   if ( argc < 4 ) {
      usage(argv[0]);
      return 0;
   }
 
   int compress = (strcmp(argv[1], "c")) == 0;
   const char* in = argv[2];
   const char* out = argv[3];
 
   first_file = fopen(in, "rb");
   if ( !first_file ) return 1;
   second_file = fopen(out, "wb");
   if ( !second_file ) return 1;
 
   if ( compress ) {
      compress_stud();
   } else {
      decompress_stud();
   }
 
   (first_file) ? fclose(first_file) : (void)0;
   (second_file) ? fclose(second_file) : (void)0;
   
   return 0;
}
redheadbrains
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 1
06.01.2017, 21:01 #12
rubilnick_90, у меня в ней read и write не работают, ошибка функция не определена, не знаешь почему?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2017, 21:01
Привет! Вот еще темы с ответами:

Сжатие кода методом Лемпела-Зива - Информатика
111100001011110000101111000011110000110101 Как это вообще делать?

Сжатие данных методом Лемпеля-Зива-Велча. Почему некоторые файлы увеличиваются в размере? - C++
Здравствуйте. Подскажите, пожалуйста, почему файлы с расширениями (mp3, djvu, pdf, avi) при использовании LZW-метода сжатия, только лишь...

Алгоритм LZ77 - C++
Интересует реализация на С++ В общем надо чтобы принимал строку, и возвращал закодированную. Потом принимал закодирванную ,...

Алгоритм LZ77 - Алгоритмы
объясните мне пожалуйста алгоритм архивации LZ77, я понял основную идею что добавляются блоки со смещением и длиной, но никак не могу...


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

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

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