|
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 - download
Length: 4608 (0x1200) Types: TextFile Names: »FLETNING.PAS«
└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer └─ ⟦this⟧ »FLETNING.PAS«
PROGRAM fletning; (* Blanding af kort ved sammenfletning *) CONST antalkort = 52; TYPE kuloerer = (kloer, ruder, hjerter, spar); vaerdi = RECORD kuloer : kuloerer; nr : 1 .. 13; END; pointer = ^ kort; kort = RECORD billede : vaerdi; naeste : pointer; END; VAR top : pointer; antal : INTEGER; PROCEDURE opretspil; VAR farve : kuloerer; i : INTEGER; kp : pointer; BEGIN (* opretspil *) top := NIL; FOR farve := spar DOWNTO kloer DO FOR i := 13 DOWNTO 1 DO BEGIN NEW(kp); WITH kp^ DO BEGIN naeste := top; billede.kuloer := farve; billede.nr := i; END; top := kp; END; (* top er nu det første kort *) END; (* opretspil *) PROCEDURE udskriv(start : pointer); VAR i : INTEGER; BEGIN (* udskriv *) i := 0; WHILE start <> NIL DO BEGIN WITH start^ DO BEGIN CASE billede.kuloer OF kloer : WRITE(' K'); ruder : WRITE(' R'); hjerter : WRITE(' H'); spar : WRITE(' S'); END; WRITE(billede.nr : 2); END; start := start^.naeste; i := i + 1; IF i MOD 13 = 0 THEN WRITELN; END; END; (* udskriv *) PROCEDURE blande(antal : INTEGER); VAR kp, foerstedel, andendel : pointer; i, j : INTEGER; BEGIN (* blande *) FOR i := 1 TO antal DO BEGIN kp := top; FOR j := 1 TO (RANDOM(antalkort)- 1) DO kp := kp^.naeste; (* Kortene skilles efter kp^ *) foerstedel := top; andendel := kp^.naeste; kp^.naeste := NIL; IF RANDOM(2) = 0 THEN BEGIN kp := foerstedel; foerstedel := andendel; andendel := kp; END; top := foerstedel; kp := foerstedel; (* Nu flettes foerstedel og andendel sammen *) WHILE (foerstedel^.naeste <> NIL) AND (andendel^.naeste <> NIL) DO BEGIN foerstedel := foerstedel^.naeste; kp^.naeste := andendel; kp := andendel; andendel := andendel^.naeste; kp^.naeste := foerstedel; kp:=foerstedel; END; (* Efter sammenfletningen heftes halen på: *) IF foerstedel^.naeste <> NIL THEN BEGIN andendel^.naeste := foerstedel^.naeste; kp^.naeste := andendel; END; IF andendel^.naeste <> NIL THEN kp^.naeste := andendel; IF (foerstedel^.naeste = NIL) AND (andendel^.naeste = NIL) THEN foerstedel^.naeste := andendel; END; END; (* blande *) BEGIN (* bland *) WRITE(CLRHOM); RANDOMIZE; opretspil; WRITE('Hvor mange sammenfletninger ønskes: '); READLN(antal); blande(antal); WRITELN; udskriv(top); END. (* bland *) «eof»