Informatika gyűjtemény

Egy szinttel feljebb fg_ut.pas

2004050607080910

NézetNyomtat

fg_ut.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: 2 KB
PROGRAM Ut;
CONST
    {maximalis ertek: 254}
    N = 8;
    M = 16;

VAR
    map: ARRAY [0..N+1, 0..M+1] OF BOOLEAN;
    red: ARRAY [0..N+1, 0..M+1] OF BOOLEAN;

PROCEDURE Kirajzol(fal, piros: CHAR);
VAR
    sor, oszlop: BYTE;
BEGIN
    FOR sor:= 0 TO N+1 DO
    BEGIN
        FOR oszlop:= 0 TO M+1 DO
        BEGIN
            IF NOT map[sor, oszlop] THEN Write(fal)
            ELSE IF red[sor, oszlop] THEN Write(piros)
            ELSE Write(' ');
        END;
        WriteLn;
    END;
END; {Kirajzol}

PROCEDURE VTerkep;
VAR
    sor, oszlop: BYTE;
BEGIN
    Randomize;
    FOR sor:= 0 TO N+1 DO
    BEGIN
        FOR oszlop:= 0 TO M+1 DO
        BEGIN
            map[sor, oszlop]:= (Random() > 0.3) 
                AND NOT ((sor=0) OR (sor=N+1) 
                OR (oszlop=0) OR (oszlop=M+1));
        END;
    END;
END; {VTerkep}

FUNCTION Ut(sor1, oszlop1, sor2, oszlop2: BYTE): BOOLEAN;
VAR
    volt: BOOLEAN;
    sor, oszlop: BYTE;

    PROCEDURE Szomsz(s, o, s2, o2: BYTE; VAR volt: BOOLEAN);
    BEGIN
        IF (map[s2, o2] = TRUE) AND (red[s2, o2] = FALSE) THEN
        BEGIN
            volt:= TRUE;
            red[s2, o2]:= TRUE;
        END;
    END; {Szomsz}

BEGIN
    FOR sor:= 0 TO N+1 DO
    BEGIN
        FOR oszlop:= 0 TO M+1 DO
        BEGIN
            red[sor, oszlop]:= FALSE;
        END;
    END;
    red[sor1, oszlop1]:= TRUE;
    REPEAT
        volt:= FALSE;
        FOR sor:= 1 TO N DO
        BEGIN
            FOR oszlop:= 1 TO M DO
            BEGIN
                IF (red[sor, oszlop]) THEN
                BEGIN
                    Szomsz(sor, oszlop, sor+1, oszlop  , volt);
                    Szomsz(sor, oszlop, sor  , oszlop+1, volt);
                    Szomsz(sor, oszlop, sor-1, oszlop  , volt);
                    Szomsz(sor, oszlop, sor  , oszlop-1, volt);
                END;
            END;
        END;
    UNTIL (volt = FALSE) OR (red[sor2, oszlop2]);
    Ut:= red[sor2, oszlop2];
END; {Ut}

BEGIN
    VTerkep;
    map[1, 1]:= TRUE;
    map[N, M]:= TRUE;
    Kirajzol('#', ' ');
    WriteLn('van ut: ', Ut(1, 1, N, M));
    Kirajzol('#', '*');
END.
(Vissza)