|
|
今回はコレです。
↓↓↓
http://ww5.tiki.ne.jp/~ochame/E500/TECH/OGE.HTM
いきなり他人のプログラムを理解出来る様な頭脳は持っていないため、まず自分で作って〔※1〕理解してから見させて頂きました。てか、、、ようやくこういうプログラムが組める様になりました~ o(^-^)o
でも、同じものなハズなのに結構違ったプログラムになっちゃいましたねぇ。。。 !?(゜Q。)!?
さて、おちゃめさんの作成した圧縮プログラムで、10行から開始するとすると20行目のP(I)=0は不要かな!?っていうツッコミは軽~く置いておくとしまして、質問です。
ソートをしている30行目の ループで、STEP -1というようにわざわざ リストが長くなる様な作り方をしていますが、何故でしょうか?
普通は私が作成した〔※1〕150行目みたいにSTEP +1的な作り方をすると思うのですが。。。
やっぱり他人のプログラムを解読するのは難しいものです (-_- ...
〔※1〕
【圧縮】《H$にグラフィックデータを代入しておき、実行するとC$に圧縮データが格納されます。》
100 CLEAR C$,D$
110 ERASE H,D:DIM H(15),D(15)
120 FOR I=1 TO 15:D(I)=I:NEXT
130 L=LEN H$
140 FOR I=1 TO L:H=VAL ("&"+MID$ (H$,I,1)):H(H)=H(H)+1:NEXT
150 FOR I=0 TO 14:FOR J=I+1 TO 15
160 IF H(I)<H(J) LET H=H(I),H(I)=H(J),H(J)=H:D=D(I),D(I)=D(J),D(J)=D
170 NEXT :NEXT
180 FOR I=0 TO 3:D$=D$+HEX$ D(I):NEXT :PRINT D$
190 FOR I=1 TO L
200 H=VAL ("&"+MID$ (H$,I,1))
210 IF I=L GOTO 250
220 FOR J=0 TO 3
230 IF H=D(J) LET H=J*16+VAL ("&"+MID$ (H$,I+1,1))+71:I=I+1:J=3
240 NEXT
250 IF H<16 LET H=ASC HEX$ H ELSE IF H>90 LET H=H+86
260 C$=C$+CHR$ H
270 NEXT
280 C$=D$+C$
290 PRINT C$
300 RETURN
【解凍】《C$に圧縮データを代入しておき、実行するとH$に解凍されます。》
100 CLEAR H$
110 D$=LEFT$ (C$,4)
120 FOR I=5 TO LEN C$
130 C=ASC MID$ (C$,I,1)
140 IF C<71 LET H$=H$+CHR$ C ELSE C=C-71+(C>90)*86,H$=H$+MID$ (D$,C/16+1,1)+HEX$ (C AND 15)
150 NEXT
160 PRINT H$
170 RETURN
|
|