![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Требуется разработать программу для сжатия и распаковки файлов. Для кодирования используется алгоритм Шеннона-Фано. Собственно, проблем с кодированием нет. Вопрос у меня относительно сжатия. Как от меня требуется, сообщение из исходного(входного файла) файла я должна записать в выходной файл (он по заданию двоичный), предварительно закодировав. Для сжатия требуется побайтовый вывод в файл..т.е. у нас есть схема кодирования..считываем очерёдный символ из входного сообщения..ищем для него код...нашли - готовы записывать..но здесь побайтовый вывод. Мы должны сначала набрать 8 бит ,и только потом выводить (но вот код найденный может занимать меньше 8 бит..может больше - у меня с предусмотрением этого проблема)
typedef struct structure {unsigned char id; int count; char code[10];} STRUCTURE; id - поле для символа count - число вхождений символа code[10] - сам код mas - массив структур перед выводом в выходной файл массив структур упорядочен по убыванию (убыванию поля count) как вспомогательный используется массив char mas_code[255][10] (массив содержит в нулевом столбце количество вхождений символа, в остальных коды из 0 и 1) а вот что делать с этим самым побайтовым выводом - не получается..... как бы попытки есть...но записывается несовсем правильно не совсем правильно...
Сообщение отредактировано: 18192123 - 6.12.2007 19:49 |
![]() ![]() |
18192123 |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Я конечно пониманию, что никому не хочется разбираться в чужом коде, но хоть посоветуйте, как можно осуществить побайтовый вывод в файл???
|
Malice |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я конечно пониманию, что никому не хочется разбираться в чужом коде, но хоть посоветуйте, как можно осуществить побайтовый вывод в файл??? Копить надо результат где-то и записывать первые накопившиеся 8 бит, затем их отрезать. Копить можно в строкой переменной, но понадобятся функции перевода Bin2Dec, dec2Bin. Или использовать для храниния числовую переменнную разрядностью 16 (можно и больше) бит + хранить колво значимых бит в этом числе. В этом случае придется оперировать битовыим операциями - сдвиги, сложения и т.п.) Второй вариант использовался вот здесь: Программа архиватор- разархиватор текстовых файлов Там задача похожая, запись по несколько бит. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата хоть посоветуйте, как можно осуществить побайтовый вывод в файл??? Вот имитация побайтного вывода закодированной информации. Теория взята здесь: СайтДанная программа отработает правильно только если коды символов имеют длину, не превышающую 7. Для других случаев могут быть проблемы, я не проверял на других данных... #include <stdlib.h>(не забывай о том, что после окончания работы программы в buffer-е может остаться не выведенная информация) |
18192123 |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
В соответствии с заданием нужно чтоб программа запускалась с командной строки...с 3-мя параметрами (имя входного файла, выходного файла и режим работы - кодирование или декодирование). В главной программе тогда две основных процедуры - кодирования и декодирования, которые будут вызываться в соответствии с параметром из командной строки, означающим режим работы....я знаю, что в void main передаются два стандартных параметра, как раз для работы с командной строкой....но как соотвести это - не знаю..объясните пожалуста, как делать...
|
18192123 |
![]()
Сообщение
#6
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
как просто запустить программу с командной строки - это ясно..а вот как задать там параметры и передать в программу - мне не понятно....
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Запускать программу с параметрами:
Start -> Run -> "G:\Vlady Documents\Programs\CBlock\console_c\console.exe" text.txt text2.txt code (замени на свои данные. Все, что НЕ в кавычках - это параметры) В программе должны анализироваться параметры командной строки... Что-то типа: int main(int argc, char *argv[]) { |
18192123 |
![]()
Сообщение
#8
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
![]() ![]() |
![]() |
Текстовая версия | 16.08.2025 1:59 |