![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
FENIX |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Репутация: ![]() ![]() ![]() |
Задание такое:
Распаковка сжатого файла. Файл представляет собой последовательность цепочек вида: <Число><Символ>. Переписать содержимое файла в очередь и преобразовать последовательность по правилу: каждую цепочку заменить на указанное число символов. Например: ‘7a12c4d’ заменяется на ‘aaaaaaaccccccccccccdddd’. Результат записать в выходной файл. Сделал очередь, из файла читается все нормально. Но абсолютно не могу представить даже приблизительной реализации алгоритма задачи. Help plz ![]() Код Uses Crt; Type Inf = String; Ptr = ^EL; EL = record Dn : Inf; Nx : Ptr; end; Queue = object p : ptr; Constructor Init; Function Empty : boolean; Procedure Push(D : Inf); Procedure Print; Function Pop : Inf; Destructor Done; end; Constructor Queue.Init; begin p := nil end; Destructor Queue.Done; var q : Ptr; begin while p <> nil do begin q := p; p := p^.Nx; dispose(q); end; p := nil; end; Function Queue.Empty : boolean; begin If p = nil then Empty := false else Empty := true; end; Procedure Queue.Push(D : Inf); var q : Ptr; begin New(q); q^.Dn := D; q^.Nx := p; p := q; end; Function Queue.Pop : Inf; var q : Ptr; begin q := p; If q^.Nx = nil then begin Pop := q^.Dn; dispose(q); p := nil; end; While q^.Nx^.Nx <> nil do q := q^.Nx; Pop := q^.Dn; dispose (q^.Nx); q^.Nx := nil; end; Procedure Queue.Print; var q : Ptr; begin q := p; while q <> nil do begin write(q^.Dn : 4, ' '); q := q^.Nx; end; writeln; end; var Q1 : Queue; input, output : text; s, sl : string; i, code : integer; BEGIN ClrScr; assign(input, 'input.txt'); reset(input); assign(output, 'output.txt'); rewrite(output); Q1.Init; writeln('DO= ',MemAvail); writeln; While not EOF(input) do begin sl := ''; readln(input, s); If s[length(s)] <> ' ' then s := s + ' '; For i := 1 to length(s) do If s[i] <> ' ' then sl := sl + s[i] else If length(sl) <> 0 then begin Q1.Push(sl); sl := ''; end; end; Q1.Print; Q1.Done; Close(input); writeln; writeln('POSLE= ',MemAvail); readkey; END. |
![]() ![]() |
FENIX |
![]()
Сообщение
#2
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Репутация: ![]() ![]() ![]() |
Блин, полдня пытался сделать, ничего не получилось
![]() Никак не могу преобразовать код под мою прогу... |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:25 |