С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
mato
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 70
#1

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

23.03.2011, 17:29. Просмотров 2251. Ответов 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 компресія на с++ (C++):

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

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

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

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

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

ошибки для RLE - C++
Пишу курсовую сжатие по методу рле, нужно предусмотреть ошибки для корректной работы, 2 ошибки будут очевидны: 1) нет входного(а при...

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

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

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

Добавлено через 1 минуту
А декомпрессия работает с точностью до наоборот:
считываете символ, считываете количество повторений и помещаете этот символ в строку столько раз, сколько указано.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.03.2011, 01:22 #4
Deviaphan, EOF вообщем является макросом над -1(в основном) - так что тут все нормуль. fgetc может вертать EOF.
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 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
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
27.03.2011, 12:17 #7
Цитата Сообщение от mato Посмотреть сообщение
если можно про потоки поподробней
или силочку плз
курим iostream, fstream В любом учебнике или гугле
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 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 / 50
Регистрация: 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 / 50
Регистрация: 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 / 50
Регистрация: 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
27.03.2011, 15:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2011, 15:02
Привет! Вот еще темы с ответами:

Компрессия и декомпрессия RLE - C++
Всем привет. Ребята подскажите пожалуйста, что нужно изменить в этом коде, чтобы он расшифровывал символы, которые были зашифрованы с...

Реализация алгоритма RLE - C++
Есть задачка, надо реализовать две функции &quot;закодировать&quot; и &quot;раскодировать&quot; массив данных типа: char mass =...

Кодирование длин серий (RLE) - C++
Я уже полдня пытаюсь ошибку найти, всё 100 раз перепроверил и не могу всё равно найти в чем ошибка. У меня на входе файл 92,8 КБ, а на...

Кодирование длин серий RLE - C++
Есть код алгоритма кодирования длин серий RLE. Но есть траблы с декодированием:( Вот код #include &lt;iostream&gt; #include &lt;fstream&gt; ...


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

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

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