|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4480 (0x1180)
Types: TextFile
Names: »KANNIBAL.PAS«
└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer
└─⟦this⟧ »KANNIBAL.PAS«
└─⟦09235ab48⟧ Bits:30003065 Demoprogrammer K-Z til Pascal bog
└─⟦this⟧ »KANNIBAL.PAS«
└─⟦092727b26⟧ Bits:30005927 Demoprogrammer til Pascal bog (Jet-80)
└─⟦this⟧ »KANNIBAL.PAS«
PROGRAM kannibal;
TYPE
pointer = ^ mand;
mand = RECORD
naeste : pointer;
nr : INTEGER;
END;
VAR
top : pointer;
antal, frem : INTEGER;
FUNCTION ja : BOOLEAN;
VAR
ch : CHAR;
BEGIN (* ja *)
REPEAT
READ(KBD, ch);
UNTIL ch IN (.'J', 'j', 'N', 'n'.);
CASE ch OF
'J', 'j' : ja := TRUE;
'N', 'n' : ja := FALSE;
END;
END; (* ja *)
FUNCTION faerdig : BOOLEAN;
BEGIN (* faerdig *)
WRITELN;
WRITE('Ønsker du et nyt gilde (j/n): ');
faerdig := NOT ja;
END; (* faerdig *)
PROCEDURE opretning;
FUNCTION naesteperson(i : INTEGER) : pointer;
VAR
p : pointer;
BEGIN (* naesteperson *)
IF i <= antal
THEN
BEGIN
NEW(p);
naesteperson := p;
p^.nr := i;
p^.naeste := naesteperson(i + 1);
END
ELSE
naesteperson := top; (* ringen sluttes *)
END; (* naesteperson *)
BEGIN (* opretning *)
NEW(top);
top^.nr := 1;
top^.naeste := naesteperson(2);
END; (* opretning *)
PROCEDURE initialiser;
BEGIN (* initialiser *)
WRITE(CLRHOM);
WRITELN('VELKOMMEN TIL KANNIBALGILDE');
WRITELN;
WRITELN('Et skib forliser, og nogle af sømændene redder ');
WRITELN('sig mirakuløst i land. Men desværre tages de til');
WRITELN('fange af nogle kannibaler. Disse stiller sømæn- ');
WRITELN('dene op i ring og gør klar til gilde. ');
WRITELN('For at finde ud af hvem der skal spises, tæller ');
WRITELN('de hele tiden et bestemt antal frem. ');
WRITELN('Du skal nu bestemme, hvor mange sømænd, der red-');
WRITELN('der sig i land, og hvor meget kannibalerne skal ');
WRITELN('tælle frem: ');
WRITELN;
WRITE('Hvor mange sømænd: ');
REPEAT
READLN(antal);
UNTIL antal >= 1;
WRITE('Hvor meget skal der tælles frem: ');
REPEAT
READLN(frem);
UNTIL frem >=1;
opretning;
END; (* initialiser *)
PROCEDURE spis;
VAR
i, j : INTEGER;
p : pointer;
PROCEDURE udmed(k, l: INTEGER);
BEGIN (* udmed *)
WRITELN('Nummer', k : 3, ' blev spist i ', l : 3,
'. omgang');
END; (* udmed *)
BEGIN (* spis *)
IF frem >= 2
THEN
BEGIN
FOR i := 1 TO antal - 1 DO
BEGIN
FOR j := 1 TO frem - 2 DO
top := top^.naeste;
udmed(top^.naeste^.nr, i);
p := top^.naeste^.naeste;
top^.naeste := p;
top := p;
END;
udmed(top^.nr, antal);
END
ELSE
BEGIN
FOR i := 1 TO antal DO
BEGIN
udmed(top^.nr, i);
top := top^.naeste;
END;
END;
END; (* spis *)
BEGIN (* kannibal *)
REPEAT
initialiser;
spis;
UNTIL faerdig;
WRITELN;
END. (* kannibal *)
«eof»