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

RLE компресія на с++ - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
23.03.2011, 17:29     RLE компресія на с++ #1
есть програма
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
int main(int argc, char* argv[])
{ FILE *Pfile1 = fopen("test2.txt","rb");
        if(Pfile1 == NULL)
        {
            cout <<"eror opening"<<endl;
        return 1;
        }
    FILE *Pfile = fopen("test.txt","wt");
        if(Pfile == NULL)
        {
            cout <<"eror opening"<<endl;
        return 1;
        }
char ch;
        int ns =0,pt=0; char ch1=0;
        while((ch = fgetc(Pfile1))!=EOF)
        {  ch1 = fgetc(Pfile1);   
            if(ch==ch1)
        
            pt++;
         
            
                 
            else
                if(pt >0)
                {fputc(pt,Pfile);
                  fputc(ch1,Pfile);
                  pt=0;
                }
                if(pt==0)
                 fputc(ch,Pfile);
        }
        fclose(Pfile1);
        Pfile1 = NULL;
        fclose(Pfile);
        Pfile = NULL;
        return 0;
}
как заставить работать (делать компресію)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2011, 17:29     RLE компресія на с++
Посмотрите здесь:

Метод RLE C++
Реализация алгоритма RLE C++
C++ алгоритм RLE
C++ ошибки для RLE
C++ Кодирование длин серий RLE
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
25.03.2011, 16:33  [ТС]     RLE компресія на с++ #2
ну почему нет никаких идей
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
25.03.2011, 19:41     RLE компресія на с++ #3
Судя по коду, не может быть более 128 одинаковых символов подряд.

Добавлено через 33 секунды
И вообще, блоки ифов выдели нормально.

Добавлено через 2 минуты
Если память мне не изменяет, EOF - два символа. В один char он не влезет.

Добавлено через 1 минуту
А декомпрессия работает с точностью до наоборот:
считываете символ, считываете количество повторений и помещаете этот символ в строку столько раз, сколько указано.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.03.2011, 01:22     RLE компресія на с++ #4
Deviaphan, EOF вообщем является макросом над -1(в основном) - так что тут все нормуль. fgetc может вертать EOF.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.03.2011, 05:51     RLE компресія на с++ #5
И правда.)

Но раз уж код на С++, следует использовать потоки, вместо FILE.
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 12:11  [ТС]     RLE компресія на с++ #6
если можно про потоки поподробней
или силочку плз
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
27.03.2011, 12:17     RLE компресія на с++ #7
Цитата Сообщение от mato Посмотреть сообщение
если можно про потоки поподробней
или силочку плз
курим iostream, fstream В любом учебнике или гугле
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 12:44     RLE компресія на с++ #8
http://msdn.microsoft.com/en-us/libr...=VS.60%29.aspx
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 14:38  [ТС]     RLE компресія на с++ #9
почему в 2 цикле после прохода указателя Pfile1 возвращающийся в первый цикл то указатель Pfile1 передает последний элемент, єсле я использую указатель в первом цикле то он не делает копию указателя в фторой цикл почему? и как ето можно сделать а то программа у меня сверяет сначала первое число и второе а потом 3 и 4 а мне надо чтоб 1 и 2 потом 2 и 3 или как реализовать чтоб брать число и сверять со всеми остатними но опять с указателями проблема помогите с реализацией
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 14:45     RLE компресія на с++ #10
Сколько в код не смотрел, увидел только один цикл...
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 14:51  [ТС]     RLE компресія на с++ #11
новий вариант програми
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
int main(int argc, char* argv[])
{ FILE *Pfile1 = fopen("test2.txt","rb");
        if(Pfile1 == NULL)
        {
            cout <<"eror opening"<<endl;
        return 1;
        }
    FILE *Pfile = fopen("test.txt","wt");
        if(Pfile == NULL)
        {
            cout <<"eror opening"<<endl;
        return 1;
        }
char ch,ch1,pt =0;
 
        
        while((ch = fgetc(Pfile1))!=EOF)
        {
            
            FILE *Pfile2 = fopen("test2.txt","rb");
        if(Pfile2 == NULL)
        {
            cout <<"eror opening"<<endl;
        return 1;
        }
            while((ch1 = fgetc(Pfile2))!=EOF)
          { 
            if(ch==ch1)
        
            pt++;
         
           }fclose(Pfile2);
                 
        
                if(pt >1)
                {fputc(pt,Pfile);
                  fputc(ch,Pfile);
                  pt=0;
                }
                if(pt==0&&pt == 1)
                 fputc(ch,Pfile);
        }
        fclose(Pfile1);
        Pfile1 = NULL;
        fclose(Pfile);
        Pfile = NULL;
        return 0;
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 14:53     RLE компресія на с++ #12
Цитата Сообщение от mato Посмотреть сообщение
FILE *Pfile2 = fopen("test2.txt","rb"); if(Pfile1 == NULL) { cout <<"eror opening"<<endl; return 1; }
Афыпка
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 14:55  [ТС]     RLE компресія на с++ #13
Цитата Сообщение от Deviaphan Посмотреть сообщение
Сколько в код не смотрел, увидел только один цикл...
просто я переделал и не виклал новий вариант программ извиняюсь, есле можете помогите с вторим вариантом уже 3 дня долблю и ни чего не получается

Добавлено через 1 минуту
Цитата Сообщение от Deviaphan Посмотреть сообщение
Афыпка
виправил
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 14:55     RLE компресія на с++ #14
Я уже запутался. Ты же про декомпрессию спрашиваешь, а показываешь код компрессии.
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 15:02  [ТС]     RLE компресія на с++ #15
ну я и компресию не могу зделать
а декомпресію просто перепутал должин написать бил компресія

Добавлено через 3 минуты
просто изучаю с++ и тут попал на такую задачу с rle компресією и шо то ни как не могу решить и в google не могу найти ни чого подходящего там есть но через класи а я к ним ищо не дошол
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 15:05     RLE компресія на с++ #16
Ты не сможешь проверить работоспособность компрессии, пока не напишешь и декомпрессию.
Итак.
У тебя не компилируется или не работает?
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 15:15  [ТС]     RLE компресія на с++ #17
не работает

компилируетса нормально
1 не передаетса переменая pt в функции ( fputc(pt,Pfile))
передаю (8555000ccccc222233333)
получаю( 555000ccccc222233333)
а должен 835305с4253)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 15:22     RLE компресія на с++ #18
Так ты записывай не в текстовый, а в бинарный файл. Или pt приводи к символу.
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 16:53  [ТС]     RLE компресія на с++ #19
а как записать в бінарний файл

Добавлено через 11 минут
pt - ето символ
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2011, 17:12     RLE компресія на с++
Еще ссылки по теме:

Алгоритм сжатия RLE. От этого зависит зачет по предмету) C++
C++ Компрессия и декомпрессия RLE
C++ Компрессия RLE

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 17:12     RLE компресія на с++ #20
Цитата Сообщение от mato Посмотреть сообщение
FILE *Pfile = fopen("test.txt","wt");
Цитата Сообщение от mato Посмотреть сообщение
FILE *Pfile2 = fopen("test2.txt","rb");
НА запись открываешь в текстовом виде, а на чтение в бинарном.
Когда в текстовом виде пишешь символ с непечатаемым кодом получаешь кракозябру.
Yandex
Объявления
27.03.2011, 17:12     RLE компресія на с++
Ответ Создать тему
Опции темы

Текущее время: 10:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru