Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/37: Рейтинг темы: голосов - 37, средняя оценка - 4.59
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7

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

09.12.2009, 23:23. Показов 7171. Ответов 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.");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.12.2009, 23:23
Ответы с готовыми решениями:

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

Оптимизация кода сжатие по алгоритму LZ77
Добрый день, форумчане! Есть некий код, осуществляющий сжатие по алгоритму LZ77. Он прекрасно справляется с небольшими файлами, но с чем...

Провести компрессию (сжатие) информации методом главных компонент (РСА) и на основе системы Э. Оя
Здравствуйте! Есть задание провести компрессию (сжатие) информации методом главных компонент (РСА) и на основе системы Э. Оя. Знаю, что...

11
 Аватар для Harlequin
42 / 42 / 7
Регистрация: 08.11.2009
Сообщений: 167
10.12.2009, 00:10
навскидку предположение:
возможно трабла в двойных кавычках
сталкивался с таким под никсами
нужно просто удалить все двойные кавычки и набрать их заново с клавы

фишка в том что символ по виду вроде один и тот же, но реально 2 разным символа с разными кода обозначают двойные кавычки
0
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
10.12.2009, 10:34  [ТС]
Цитата Сообщение от 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’
То есть ошибка гдето где идет определение размера исходного файла...
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.12.2009, 11:19
Цитата Сообщение от 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;
}
1
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
10.12.2009, 11:24  [ТС]
Спасибо, одной ошибкой меньше....
0
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
10.12.2009, 17:53  [ТС]
Добавил библиотеку <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’
0
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
10.12.2009, 21:39  [ТС]
Ура!!!!Компилятор замолчал!!!! Оказывается надо было в
stat(fileno(first_file),&buf);
вместо stat поставить fstat и все.....
только теперь вопрос.....а что дальше????надо makefile делать???я просто никогда таким не пользовался...в мане ничего не понял толком....
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.12.2009, 08:51
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;
}
не проверял.
1
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
11.12.2009, 10:12  [ТС]
niXman, благодарю....очень круто....спасибо большое!!!!
0
rusgard
16.04.2010, 22:36
rubilnick_90, Извени, но ты не мог бы выложить полный текст проги заново!!!!Заранее спасибо
2 / 2 / 0
Регистрация: 09.12.2009
Сообщений: 7
17.04.2010, 13:16  [ТС]
ОК, без проблем, только все комменты там переведены на польский (т.к. учусь в польше), прога работает но не до конца, то есть там гдето проблема в #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;
}
2
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 1
06.01.2017, 21:01
rubilnick_90, у меня в ней read и write не работают, ошибка функция не определена, не знаешь почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.01.2017, 21:01
Помогаю со студенческими работами здесь

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

Сжатие графической информации использую алгоритм Хаффмана
Здравствуйте, помогите составить алгоритм сжатия графической информации при помощи алгоритма Хаффмана для C#. Пишу курсовую работу...

Сжатие методом Хаффмана
Хочу реализовать алгоритм &quot;Сжатие методом Хаффмана&quot; но столкнулся с такой проблемой. Проблема вот в чём, в описании алгоритма говорится что...

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

Сжатие изображения методом RLE
При преобразовании массива байт в изображения выдает ошибку. Не могу понять в чем проблема. using System; using...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru