Informatika gyűjtemény

Egy szinttel feljebb fg_foly.pas

2004050607080910

NézetNyomtat

fg_foly.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 folyo;

CONST
    filePre = 'FOLYO';
    inputExt = 'BE';
    outputExt = 'KIX';

VAR
    folyok: ARRAY [1..1000] OF RECORD
        jel: BOOLEAN;
        kov: INTEGER;
        nev: STRING[20];
    END;

VAR
    i: BYTE;
    id: CHAR;
    inputFile, outputFile: STRING;

    N0, N, Q: INTEGER;

FUNCTION FolyoNev(nev: STRING): INTEGER;
VAR
    i: INTEGER;
BEGIN
    i:= 1;
    WHILE (<= N0) AND (folyok[i].nev <> nev) DO INC(i);

    IF > N0 THEN
    BEGIN
        INC(N0);
        folyok[N0].nev:= nev;
        folyok[N0].kov:= 0;
    END;
    FolyoNev:= i;
END; {FolyoNev}

PROCEDURE Betolt;
VAR
    T: Text;
    i, f1, f2: INTEGER;
    s1, s2: STRING[20];
BEGIN
    Assign(T, inputFile);
    Reset(T);
    ReadLn(T, N);
    N0:= 0;
    FOR i:= 1 TO N DO
    BEGIN
        ReadLn(T, s1); f1:= FolyoNev(s1);
        ReadLn(T, s2); f2:= FolyoNev(s2);
        folyok[f1].kov:= f2;
    END;
    ReadLn(T, s1);
    Q:= FolyoNev(s1);
    Close(T);
END; {Betolt}

PROCEDURE Keres;
VAR
    i, j, szamol: INTEGER;
    kesz: BOOLEAN;
    T: Text;
BEGIN
    Assign(T, outputFile);
    Rewrite(T);
{
A. resz - mely folyokbol erkezhet viz Q-ba?
        -> azokba, amikre jel = TRUE
}
    FOR i:= 1 TO N0 DO folyok[i].jel:= FALSE;
    folyok[Q].jel:= TRUE;
    szamol:= 0;

    REPEAT
        kesz:= TRUE;
        FOR i:= 1 TO N0 DO
        BEGIN
            IF folyok[i].jel THEN
            BEGIN
                FOR j:= 1 TO N0 DO
                BEGIN
                    IF NOT (folyok[j].jel) AND (folyok[j].kov = i) THEN
                    BEGIN
                        INC(szamol);
                        folyok[j].jel:= TRUE;
                        kesz:= FALSE;
                    END;
                END;
            END;
        END;
    UNTIL kesz;

    folyok[Q].jel:= FALSE;
    WriteLn(T, szamol);
    FOR i:= 1 TO N0 DO
    BEGIN
        IF folyok[i].jel THEN WriteLn(T, folyok[i].nev);
    END;

    j:= folyok[Q].kov;
    szamol:= 0;
    WHILE j <> 0 DO
    BEGIN
        INC(szamol);
        j:= folyok[j].kov;
    END;
    WriteLn(T, szamol);

    j:= folyok[Q].kov;
    WHILE j <> 0 DO
    BEGIN
        WriteLn(T, folyok[j].nev);
        j:= folyok[j].kov;
    END;

    Close(T);
END; {Keres}

BEGIN
    {FOR i := 1 TO 5 DO
    BEGIN
        id := CHR( i + ORD('0') );}
        Write('sorszam: '); Read(id);
        inputFile := filePre + id + '.' + inputExt;
        outputFile := filePre + id + '.' + outputExt;
        Betolt;
        Keres;
    {END;}
END.
(Vissza)