Informatika gyűjtemény

Egy szinttel feljebb fg_decoder.pas

2004050607080910

NézetNyomtat

fg_decoder.pas (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
{$Q+} {$R+}
PROGRAM abcode;
VAR
    source: STRING; {a dekodolando kodolt szoveg (szamsor)}
    len_src: INTEGER; {source hossza}

    dest: ARRAY [1..255] OF CHAR; {egy lehetseges dekodoloas}

PROCEDURE Dump(n_dest: INTEGER);
VAR
    i: INTEGER;
BEGIN
    FOR i:= 1 TO n_dest DO
    BEGIN
        Write(dest[i]);
    END;
    WriteLn;
END; {Dump}

{
 i_src: hol tartunk a source feldolgozasaban
 i_dest: hol tartunk a dest irasaban (milyen hosszu az eddig dekodolt szoveg)
 freechar=TRUE: a source elozo karaktere letezik, es egybeolvaszthato a soron kovetkezovel,
                tehat nem egy ketjegyu szam masodik szamjegyekent dekodoltuk
}
PROCEDURE Generate(i_src, i_dest: INTEGER; freechar: BOOLEAN);
VAR
    cur: BYTE; {az aktualis szam sorucebol}
    prev: BYTE; {az elozo szam a sourcebol (nem mindig kap erteket)}
    ch0: CHAR;
BEGIN
    INC(i_src);
    IF (i_src > len_src) THEN
    BEGIN
        Dump(i_dest);
        EXIT;
    END;
    cur:= ORD(source[i_src])-ORD('0');

    IF cur > 0 THEN
    BEGIN
        dest[i_dest+1]:= CHR( ORD('A') + cur - 1 );
        Generate(i_src, i_dest+1, TRUE);
    END;

    IF (freechar = TRUE) THEN
    BEGIN
        prev:= ORD(source[i_src-1])-ORD('0');
        IF (prev = 1) OR ((prev = 2) AND (cur IN [0..6])) THEN
        BEGIN
            ch0:= dest[i_dest];
            dest[i_dest]:= CHR(10*prev+cur+ORD('A')-1);
            IF dest[i_dest] = '@' THEN
            BEGIN
                WriteLn('a');
                HALT;
            END;

            Generate(i_src, i_dest, FALSE);

            dest[i_dest]:= ch0;
        END;
    END;
END; {Generate}

PROCEDURE Main;
VAR
    s: STRING;
BEGIN
    WHILE TRUE DO
    BEGIN
        s:= '';
        Write('>'); ReadLn(s);
        IF = '0' THEN BREAK;

        source:= s;
        len_src:= Length(source);
        Generate(0, 0, FALSE);
    END;
END; {Main}

BEGIN
    Main;
END.
(Vissza)