Э.В. НИЧИПУРЕНКО (г. Владивосток)

В журнале «ВТ» №12 за 1990 г. были опубликованы две программы А.В. Алексеева которые позволяют упаковывать программы в машинных кодах в операторы DATA. Файлы, выдаваемые этими программами, можно сократить тем самым сэкономив память БК.

Я предлагаю упаковывать коды в операторах DATA плотнее за счёт увеличения длины каждой строки с оператором DATA (максимальная длина строки 256 символов). Тем самым уменьшается количество номеров строк и слов «DATA».

Уплотнения также можно добиться за счёт применения десятичных чисел без %. В данном случае числа с % занимают больше памяти, чем числа без %. Убедиться в этом можно на следующем примере:

10 DATA 1%,1%
20 ?FRE(1)

После запуска ЭВМ выдаст число оставшихся байт памяти равное 14024, если теперь строку 10 заменить на:

10 DATA 1,1

то после запуска ЭВМ выдаст число 14028. То есть экономим по два байта на каждом %.

Немного изменив алгоритм упаковки «ПРОГРАММЫ 1» на стр. 37-38 я получил программу, которая работает по выше изложенному принципу. Текст программы прилагаю. Нумерацию строк я оставил прежнюю. Добавленные и изменённые строки обведены.

10 CLEAR 7700
20 DIM A$(30) 30 POKE &0400,&011505 40 POKE &O402, &O4737 50 POKE &O404, &0100536 60 POKE &O406, &O207 70 DEF USR=&0400 80 ? CHR$ (140)+CHR$ (140);
84 INPUT "НАЧАЛЬНЫЙ НОМЕР"; I% 86 INPUT "ШАГ СТРОК"; S% 88 LOCATE ,,1
90 A%=USR (&042000) 100 C%=&042000
110 DL%=C%+PEEK(&0266)-&02 120 V%=1% 130 ? AT(10%,22%)"*"V%"*" 140 A$(V%)=""+MID$(STR$(I%),2%,LEN(STR$(I%))-1 %)+"DATA"+CHR$ (32%) 150 W$=""+MID$ (STR$ (PEEK (C %)) ,2 %, LEN (STR$ (PEEK (C %)))-2%) 160 IF LEN(A$(V%))+LEN(W$)>255% THEN 200 ELSE A$(V%) =""+A$(V%)+ W$ 170 IF LEN(A$(V%))=255% THEN 220 ELSE A$(V%)=""+A$(V%)+"," 180 C%=C%+&O2 190 IF C%<DL% AND V%<31% THEN 150 200 A$(V%)=""+MID$(A$(V%),1%,LEN(A$(V%))-1%) 210 IF C%=DL% OR V%=30 THEN 250 220 V%=V%+1% 230 I%=I%+S% 240 GOTO 130
250 CLS 260 R$="" 270 INPUT "ИМЯ ФАЙЛА"; R$ 280 ? "ВКЛЮЧИТЕ МАГНИТОФОН." 290 IF INKEY$="" THEN 290 300 OPEN R$+".ASC" FOR OUTPUT 310 FOR J%=1 TO V% 320 PRINT #A$(J%) 330 NEXT J % 340 CLOSE 350 INPUT "БУДЕТЕ ПРОДОЛЖАТЬ";U$ 360 IF U$="D" OR U$="Д" THEN 80 370 CLS 380 END

 

Performed by © gid, 2012-2022.