![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
-Антон- |
![]()
Сообщение
#1
|
Гость ![]() |
Задача такая:
Программа архиватор- разархиватор текстовых файлов на русском языке ( Применяются только буквы русского алфавита, знаки припенания и пробелы, сжатие должно быть максимальным). Примечание: Мне препод сказал, что как-то надо сделать так, чтобы на символ приходилось не 8 бит, а 5... можно 6. ( Сказал надо использовать SHL и SHR, а я только школу закончил, полтора месяца отучился, что такое бинарные операции и что с ними делать не представляю). |
![]() ![]() |
Гость |
![]()
Сообщение
#2
|
Гость ![]() |
Я бы поучавствовыл... но проблема, что с паскалем плохо, в школе почти не было, а тут в инсте сразу завал... мне моей головой пока не понять. А в книге че-то ничего не ту... Мне бы хотя бы только алгоритм сжатия, с открытием файла я разберусь.
|
Malice |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Алгоритм простой:
Выбираем используемый алфавит, читаем посимвольно из исходного файла и записаваем порядковые номера символов в конечный файл. Количество бит на представление порядкового номера будет меньше 8-и (6 с твоим алфавитом), чем и достигается сжатие. Единственная сложность - нельзя писать в файл по 6 бит, нужно накапливать результат и скидывать по 8. Небольшой пример.. Алфавит='0'..'9', необходимое колво бит = 4 (1001-максимальный номер в алфавите), исходная строка='0123456789'; 1. результат=0; полезных бит в результате 0 2. читаем символ, результат=0000; полезных бит =4; итоговая строка=''; записать пока нечего.. 3 читаем символ, результат=0000 0001; полезных бит =8, пишем.. итоговая строка='0000 0001'; 4 читаем символ, результат=0010; полезных бит =4; 5 читаем символ, результат=0010 0011; полезных бит =8, , пишем.. итоговая строка='0000 0001 0010 0011'; Ну и так далее, пока не кончится файл. SHL понадобится в момент сложения текущего результата с уже накопленным, т.е. результат=(результат SHL колво_бит) OR текущий_результат; Вот где то так ![]() |
![]() ![]() |
![]() |
Текстовая версия | 2.09.2025 9:52 |