Dany jest program przekształcający plik binarny na tekstowy i na odwrót.
program bttb; var ile : Integer; kod : Word; procedure komunikat; begin writeln('Program przeksztalcajacy binaria na tekst i tekst na binaria'); writeln('Sposob wywolania:'); writeln(' bttb -bt PlikDanychBinarnych PlikWynikuTekstowego IleWWierszu'); writeln('lub:'); writeln(' bttb -tb PlikDanychTekstowych PlikWynikuBinarnego'); halt end; procedure binariaNaTekst(s1, s2 : String; ile : Integer); var f : file of Byte; g : Text; b : Byte; wAktualnym, i : Integer; begin assign(f, s1); assign(g, s2); reset(f); rewrite(g); wAktualnym := 0; while not eof(f) do begin read(f, b); for i := 1 to 8 do begin write(g, b div 128); b := 2 * (b mod 128) end; wAktualnym := wAktualnym + 1; if wAktualnym = ile then begin writeln(g); wAktualnym := 0 end else write(g, ' ') end; if wAktualnym > 0 then writeln(g); close(g); close(f) end; procedure tekstNaBinaria(s1, s2 : String); var f : Text; g : file of Byte; byloBitow : Integer; aktualnyBajt : Byte; c : Char; begin assign(f, s1); assign(g, s2); reset(f); rewrite(g); byloBitow := 0; aktualnyBajt := 0; while not eof(f) do if eoln(f) then readln(f) else begin read(f, c); if (c = '0') or (c = '1') then begin aktualnyBajt := 2 * aktualnyBajt; if c = '1' then aktualnyBajt := aktualnyBajt + 1; byloBitow := byloBitow + 1; if byloBitow = 8 then begin write(g, aktualnyBajt); aktualnyBajt := 0; byloBitow := 0 end end end; if byloBitow <> 0 then writeln('Niepoprawny plik danych'); close(g); close(f) end; begin if paramCount = 0 then komunikat; if paramStr(1) = '-bt' then begin if paramCount <> 4 then komunikat; ile := 1; val(paramStr(4), ile, kod); if (kod <> 0) or (ile <= 0) then komunikat; binariaNaTekst(paramStr(2), paramStr(3), ile) end else if paramStr(1) = '-tb' then begin if paramCount <> 3 then komunikat; tekstNaBinaria(paramStr(2), paramStr(3)) end else komunikat end.
Napisz program kompresujący i program dekompresujący plik binarny metodą RLE (run-lenght encoding, kodowanie długości serii).