Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2012, 20:46   #1
dollemika
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 29
По умолчанию Алгоритм сжатия LZW

Помогите разобраться!
Мы должны в "таблице строк" каждому символу начального алфавита и каждой новой строке, при добавлении в таблицу, поставить в соответствие код, который в последствии мы записываем в файл.
Алгоритм понятен, программа написана, но она у меня работает так, что коды - int'овские числа, которые я записываю в файл через пробел. Но ведь нормальный алгоритм должен работать с битовыми кодами? Не пойму, как это организовать.
Не могли бы вы мне подсказать, как должен быть устроен "правильный" lzw?
dollemika вне форума Ответить с цитированием
Старый 19.06.2012, 21:06   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Не знаю, что именно Вы делаете, но подозреваю, что пишете в файл типа text.
Если у Вас целые числа, то и пишите их а file of integer.
s-andriano вне форума Ответить с цитированием
Старый 19.06.2012, 21:11   #3
dollemika
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 29
По умолчанию

А не могли бы вы мне подсказать, что значит file of integer? пожалуйста
dollemika вне форума Ответить с цитированием
Старый 19.06.2012, 21:21   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Это бинарный файл, в котором хранятся целые числа во внутреннем формате.
Если Вы пишете на Паскале, то так и описываете файловую переменную.
Если пишете через WinAPI, то просто передаете процедуре записи указатель на массив целых.
s-andriano вне форума Ответить с цитированием
Старый 19.06.2012, 21:30   #5
dollemika
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 29
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Это бинарный файл, в котором хранятся целые числа во внутреннем формате.
А если я пишу на с++? (наверное надо было сразу уточнить, извиняйте)
dollemika вне форума Ответить с цитированием
Старый 19.06.2012, 21:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да, и код неплохо бы увидеть, который в файл пишет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.06.2012, 21:44   #7
dollemika
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да, и код неплохо бы увидеть, который в файл пишет.
Код:
void codeLZW(ifstream& in, ofstream& out)
{
	int I=0;
	char symb;
	string str="";
	map <string,int> A;
	for (I=0; I<256; ++I)
	{
		str=char(I);
		A[str]=I;
	}
	str="";
	while(in.peek()!=EOF){
		in.get(symb);
		if (A.find(str+symb)!=A.end()) str+=symb;
		else
		{
			out<<A.find(str)->second;
			str+=symb;
			A.insert(pair<string,int>(str,I));
			++I;
			str=symb;
		}
	}
	out<<A.find(str)->second;
}

Последний раз редактировалось Stilet; 19.06.2012 в 22:11.
dollemika вне форума Ответить с цитированием
Старый 19.06.2012, 22:10   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
out<<A.find(str)->second;
Хм... out.write() тут пожалуй больше подойдет.
И сам поток открыть лучше как ios_base::binary
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.06.2012, 22:18   #9
dollemika
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Хм... out.write() тут пожалуй больше подойдет.
И сам поток открыть лучше как ios_base::binary
Но out.write() не хочет печатать int, просит char* ? В этом то и проблема, не пойму, как в бинарный файл записывать int... Или может нужно коды делать другого типа? У меня вообще правильный lzw или нет? :D
dollemika вне форума Ответить с цитированием
Старый 19.06.2012, 22:24   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
просит char* ?
Это не значит что он символ будет печатать.
char это представление байта в Си. В данном случае он просит указатель на массив байт - char*
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм сжатия jpeg VARCHUN Помощь студентам 0 08.05.2012 17:01
Алгоритм сжатия двумерного массива! jmeka Помощь студентам 2 26.05.2011 13:13
Алгоритм сжатия Хаффмана onryo Общие вопросы Delphi 0 10.04.2011 16:08
алгоритм сжатия информации LZW на Java sagnio Общие вопросы по Java, Java SE, Kotlin 1 09.12.2009 21:11
Алгоритм сжатия+ zlib Воин-Леший Общие вопросы Delphi 1 09.12.2007 15:05