![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
BooM |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ребят подскажите пожалуйста что с кодом?
писал программу архиватор, проблемма с выводом самого архива кто шарит подскажите пожалуйтса const alpha: String = 'abcdefghijklmnopqrstuvwxyz0123456789-.:,;!? '#10#13; type TArchiveFile = file of Byte; var name , name2 , name3: string; f : text; procedure Archive(name, name2: string); var text_file: Text; arch_file: TArchiveFile; byte_a, byte_b: Byte; archive_byte, left, right: Byte; ch: Char; begin assign(text_file, name); reset(text_file); assign(arch_file, name2); rewrite(arch_file); if not eof(text_file) then begin left := 2; right := 4; repeat if (left = 2) and not eof(text_file) then begin read(text_file, ch); byte_a := Pos(ch, alpha); end else byte_a := byte_b; if not eof(text_file) then begin read(text_file, ch); byte_b := Pos(ch, alpha); end else byte_b := 0; archive_byte := byte(byte_a shl left) or byte(byte_b shr right); write(arch_file, archive_byte); if left < 6 then left := left + 2 else left := 2; if right > 0 then right := right - 2 else right := 4; until eof( text_file ); if (right <> 4) and (byte_b <> 0) then write(arch_file, byte(byte_b shl left)); end; close(text_file); close(arch_file); end; procedure UnArchive(name2, name3: String); var unarchive_byte, byte_a, byte_b, curr_unbyte_num, bytes_done: Byte; txt_file: Text; arc_file: TArchiveFile; last_readed_byte, file_size: LongInt; begin assign(txt_file, name2); rewrite(txt_file); assign(arc_file, name3); reset(arc_file); curr_unbyte_num := 0; last_readed_byte := -1; bytes_done := 0; repeat inc(bytes_done); if curr_unbyte_num < 4 then inc(curr_unbyte_num) else curr_unbyte_num := 1; if curr_unbyte_num = 4 then begin seek(arc_file, last_readed_byte); read(arc_file, byte_a); unarchive_byte := byte(byte(byte_a shl 2) shr 2); end else if curr_unbyte_num = 3 then begin seek(arc_file, last_readed_byte); read(arc_file, byte_a); seek(arc_file, last_readed_byte + 1); read(arc_file, byte_b); unarchive_byte := byte(byte(byte_a shl 4) shr 2) + byte(byte_b shr 6); inc(last_readed_byte); end else if curr_unbyte_num = 2 then begin seek(arc_file, last_readed_byte); read(arc_file, byte_a); seek(arc_file, last_readed_byte + 1); read(arc_file, byte_b); unarchive_byte := byte(byte(byte_a shl 6) shr 2) + byte(byte_b shr 4); inc(last_readed_byte); end else begin inc(last_readed_byte); seek(arc_file, last_readed_byte); read(arc_file, byte_a); unarchive_byte := byte(byte_a shr 2); end; if unarchive_byte <> 0 then write(txt_file, alpha[unarchive_byte]); until bytes_done = 8 * (filesize(arc_file)) div 6; close(txt_file); close(arc_file); end; begin writeln('Введите путь к файлу: '); readln(name); writeln('Введите путь, где будет сохранен будущий архив'); readln(name2); writeln('Введите куда разархивируется файл: '); readln(name3); begin Assign(f,name3) end; Archive(name, name2); UnArchive(name2, name3); Writeln('Done'); ReadLn; end. |
![]() ![]() |
![]() |
Текстовая версия | 19.04.2025 4:14 |