Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
1

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

23.03.2011, 17:29. Просмотров 2446. Ответов 26
Метки нет (Все метки)

есть програма
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;
}
как заставить работать (делать компресію)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2011, 17:29
Ответы с готовыми решениями:

Разработайте приложение rle.exe, выполняющее RLE-компрессию бинарных файлов
Разработайте приложение rle.exe, выполняющее RLE-компрессию бинарных файлов с...

Метод RLE
Написать программу сжатия полутонового bmp* файла по методу RLE

алгоритм RLE
Нужна помощь. Чтобы сделать алгоритм сжатия RLE на с++

Компрессия RLE
Здравствуйте. Требуется помощь по реализации кода. Задание следующее :...

Алгоритм RLE
Всех приветствую, нужна помощь, уже устал, суть такая: необходимо реализовать...

26
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
25.03.2011, 16:33  [ТС] 2
ну почему нет никаких идей
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
25.03.2011, 19:41 3
Судя по коду, не может быть более 128 одинаковых символов подряд.

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

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

Добавлено через 1 минуту
А декомпрессия работает с точностью до наоборот:
считываете символ, считываете количество повторений и помещаете этот символ в строку столько раз, сколько указано.
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.03.2011, 01:22 4
Deviaphan, EOF вообщем является макросом над -1(в основном) - так что тут все нормуль. fgetc может вертать EOF.
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
26.03.2011, 05:51 5
И правда.)

Но раз уж код на С++, следует использовать потоки, вместо FILE.
0
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 12:11  [ТС] 6
если можно про потоки поподробней
или силочку плз
0
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
27.03.2011, 12:17 7
Цитата Сообщение от mato Посмотреть сообщение
если можно про потоки поподробней
или силочку плз
курим iostream, fstream В любом учебнике или гугле
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 12:44 8
http://msdn.microsoft.com/en-us/library/aa248270%28v=VS.60%29.aspx
0
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 14:38  [ТС] 9
почему в 2 цикле после прохода указателя Pfile1 возвращающийся в первый цикл то указатель Pfile1 передает последний элемент, єсле я использую указатель в первом цикле то он не делает копию указателя в фторой цикл почему? и как ето можно сделать а то программа у меня сверяет сначала первое число и второе а потом 3 и 4 а мне надо чтоб 1 и 2 потом 2 и 3 или как реализовать чтоб брать число и сверять со всеми остатними но опять с указателями проблема помогите с реализацией
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 14:45 10
Сколько в код не смотрел, увидел только один цикл...
0
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 14:51  [ТС] 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;
}
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 14:53 12
Цитата Сообщение от mato Посмотреть сообщение
FILE *Pfile2 = fopen("test2.txt","rb"); if(Pfile1 == NULL) { cout <<"eror opening"<<endl; return 1; }
Афыпка
0
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
27.03.2011, 14:55  [ТС] 13
Цитата Сообщение от Deviaphan Посмотреть сообщение
Сколько в код не смотрел, увидел только один цикл...
просто я переделал и не виклал новий вариант программ извиняюсь, есле можете помогите с вторим вариантом уже 3 дня долблю и ни чего не получается

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

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

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

Добавлено через 11 минут
pt - ето символ
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
27.03.2011, 17:12 20
Цитата Сообщение от mato Посмотреть сообщение
FILE *Pfile = fopen("test.txt","wt");
Цитата Сообщение от mato Посмотреть сообщение
FILE *Pfile2 = fopen("test2.txt","rb");
НА запись открываешь в текстовом виде, а на чтение в бинарном.
Когда в текстовом виде пишешь символ с непечатаемым кодом получаешь кракозябру.
0
27.03.2011, 17:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2011, 17:12

Алгоритм RLE
Нужно закодировать введённый текст посредством алгоритма RLE Вот код...

Алгоритм RLE
Прошу помочь выйти мне из тупика) Подсказки,исправление ли направление что и...

ошибки для RLE
Пишу курсовую сжатие по методу рле, нужно предусмотреть ошибки для корректной...


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

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

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