ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1821  
Старый 12.11.2008, 00:34
NetSter
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме:
4275992

Репутация: 1188


По умолчанию

Цитата:
Сообщение от Lee_fx  
Доброго времени суток, появилась такая проблемка c алгоритмом Хаффмана:
Имеется массив содержащий набор двоичныч кодов ( пр. char a[3][3] = {{'0','0','0'},{'1','0','1'},{'1','1','1'}}; ) для букв a, b, c. Как в файле поменять каждую a, b и c на ее двоичный код? Совсем чего-то запутался, ведь нет же переменных, которые хранят двоичный код? А с этим чаром что так 8 байт что так =(
если я тебя правильно понял то те нужно открыть файл и читать посимвольно. если встречается тот символ что нужен то заменить на код..
почему бы не использовать код из 3-х цифр как строку? а сделать поиск по файлу и использовать замену строк (типа как replacestr() )...
 
Ответить с цитированием

  #1822  
Старый 12.11.2008, 01:05
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

Цитата:
Сообщение от NetSter  
независимо от того какое значение Number получает функция RUN от листбокса диалога (а получает постоянно точно то же что я выбрал в диалоге, я проверял без подключения DLL простым выводом) получаем постоянно в результате НОЛЬ...
...
я уже хз где я мог втыкануть.... может тому кто долго не втыкал этот бред на свежую голову все покажется просто и укажет на траблу..
Заранее спасибо за любой ответ.
ты там написал:
sprintf(s,"%f", res);
но res вообще-то целого типа. Попробуй
sprintf(s,"%d", res);
 
Ответить с цитированием

  #1823  
Старый 12.11.2008, 01:07
Lee_fx
Познающий
Регистрация: 27.09.2008
Сообщений: 57
Провел на форуме:
265628

Репутация: 23
По умолчанию

Код:
FILE *MyFile, *OUT;
char temp;
Symbols[3] = {'a', 'b', 'c'};
......

MyFile = fopen("1.txt", "r");
OUT = fopen("2.txt", "wb");
while(!feof(MyFile))
{
  fread(&temp, 1, sizeof(char), MyFile);
  for(i=0; i<3; i++)
    if(temp == Symbols[i])
	fwrite((const char*)&a[i], 1, sizeof(a[i]), OUT);
}
Получается файл намного больше по размеру, немогу понять как функция fwrite пишет =(
 
Ответить с цитированием

  #1824  
Старый 12.11.2008, 01:28
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

код не весь. Если ты объявлял так:
char a[3][3] = {{'0','0','0'},{'1','0','1'},{'1','1','1'}};
то переменная `a[i]` будет размером в 4 байта. Соответственно fwrite будет записывать немного больше чем ожидалось

Последний раз редактировалось bons; 12.11.2008 в 01:31..
 
Ответить с цитированием

  #1825  
Старый 12.11.2008, 08:55
Lee_fx
Познающий
Регистрация: 27.09.2008
Сообщений: 57
Провел на форуме:
265628

Репутация: 23
По умолчанию

Цитата:
Сообщение от bons  
код не весь. Если ты объявлял так:
char a[3][3] = {{'0','0','0'},{'1','0','1'},{'1','1','1'}};
то переменная `a[i]` будет размером в 4 байта. Соответственно fwrite будет записывать немного больше чем ожидалось
На этот ляп ладно, можно [4][4] сделать, мня интересует как вместо символа размером 8 байт записать двоичный код размером 4?
 
Ответить с цитированием

  #1826  
Старый 12.11.2008, 11:11
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

ага, я наконец врубился что ты хочешь.
кстати символ скорее 1 байт чем 8.
программа твоя ..гхм.. замечательна, но работать правильно она будет только если ты изменишь там пару строчек:

Код:
FILE *MyFile, *OUT;
char temp;
Symbols[3] = {'a', 'b', 'c'};
......

MyFile = fopen("1.txt", "r");
OUT = fopen("2.txt", "wb");
while((temp=fgetc(MyFile))!=EOF)
{
  for(i=0; i<3; i++)
    if(temp == Symbols[i])
	fwrite((const char*)&a[i], 1, sizeof(a[i]), OUT);
}
 
Ответить с цитированием

  #1827  
Старый 12.11.2008, 13:16
groupby
Познающий
Регистрация: 21.09.2008
Сообщений: 42
Провел на форуме:
127017

Репутация: 61
По умолчанию

Цитата:
Сообщение от Lee_fx  
Получается файл намного больше по размеру, немогу понять как функция fwrite пишет =(
Вы не понимаете саму суть битов. Бит - 1/8 часть байта, которая может быть либо 0 либо 1. Отдельный бит записать в файл нельзя. Записать его можно только в виде байта. Соответственно перед записью битов необходимо их паковать в байты, и при накоплении количества битов кратному 8ми, записывать их в выходной файл. Вот накатал небольшое решение для вашего вопроса:

Код:
#include <stdio.h>

void main()
{
	FILE *in, *out;

	//кодирование 3мя битами
	int ar[3] = {0x00, 0x05, 0x07}; //коды 'a', 'b', 'c'
	char buf; //тут сидит считанный байт с файла

	in = fopen("f1.txt", "rb");
	out = fopen("f2.bin", "wb");

	int count = 0;

	union {
		int out_buf;
		char b[4];
	} data;

	data.out_buf = 0;

	while(fread(&buf, 1, 1, in))
	{
		if(count < 8)
		{ //не записываем, пока не наберем кратное 8ми
			//количество битов
			data.out_buf = (data.out_buf<<3) + ar[buf - 'a'];
			count++;
		}
		else
		{ //запись битов			
			fwrite(&data.b[2], 1, 1, out);
			fwrite(&data.b[1], 1, 1, out);
			fwrite(&data.b[0], 1, 1, out);
			data.out_buf = ar[buf - 'a'];
			count = 1;
		}
	}

	if(count > 0)
	{ //запись остатков
		fwrite(&data.b[2], 1, 1, out);
		fwrite(&data.b[1], 1, 1, out);
		fwrite(&data.b[0], 1, 1, out);
	}

	fclose(out);
	fclose(in);
}
Вот пример файла для кодирования (f1.txt) 22 байта:

Код:
bacbabcabcbacbabcbacba
После ужатия получили 12 байт, но в конце есть лишние байты, т.к. количество битов не кратно 8ми (22*3 = 66), соответственно в начале файла нужно хранить ещё выходной размер файла, чтобы опустить лишнюю информацию в конце файла, но это уже за рамками поста (пиши в ПМ, если что).

Следует учитывать, что по Хаффману для каждого символа должен быть свой код, т.е. во входном файле все возможные символы должны быть предугаданы тобой, то бишь быть в массиве ar.
 
Ответить с цитированием

  #1828  
Старый 12.11.2008, 23:36
NetSter
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме:
4275992

Репутация: 1188


Question

кто шарит реализовать звучание звука в MFC приложении..
уже пару постов создавал но так и не получилось..
посоветуйте плиз кто что знает)
смотрите посты ЗДЕСЬ и ЗДЕСЬ
спасибо.
 
Ответить с цитированием

  #1829  
Старый 13.11.2008, 00:05
groupby
Познающий
Регистрация: 21.09.2008
Сообщений: 42
Провел на форуме:
127017

Репутация: 61
По умолчанию

Цитата:
Сообщение от NetSter  
кто шарит реализовать звучание звука в MFC приложении..
уже пару постов создавал но так и не получилось..
посоветуйте плиз кто что знает)
смотрите посты ЗДЕСЬ и ЗДЕСЬ
спасибо.
http://depositfiles.com/files/pizib527l
 
Ответить с цитированием

  #1830  
Старый 13.11.2008, 03:29
n4e/\@
Участник форума
Регистрация: 06.05.2008
Сообщений: 161
Провел на форуме:
1289087

Репутация: 59
По умолчанию

Есть код.
Код:
struct list{int elem;
            list *next;
            list *down;};

int main() {
	list *curr, *head;
	head = NULL;
	curr = NULL;

	cin >> stolb;
	cin >> strok;

	for (int j=0; j<strok; j++){
		for(int i=0; i<stolb; i++) {
			curr = (list*) new int [strok];
			curr->elem = rand()%10+1;
			curr->next = head;
			head = curr;
		}
		curr->down = head;
	}
return 0;
}
Как можно добавить еще одну строку в конец, без создание еще одной такой же структуры, переноса туда данных, потом переопределение этой и возврата данных+новая строка.
Я уже все перепробовал. Максимум что удалось это добавить строку в начало. А все остальное что я пробовал заставляет вылетать программу с ошибкой при выводе структуры(залезаю где то за границы)
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP, PERL, MySQL, JavaScript 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ