' Program to generate random sequences of insertions and then deletions ' to exercise algorithms on balanced multi-way trees. ' ' Author: Timothy Rolfe ' Language: Microsoft QuickBasic or QBasic DEFINT A-Z DECLARE SUB Shuffle (X(), N) CLS COLOR 15 ' Bright white text RANDOMIZE TIMER DIM X(1 TO 90) INPUT "How many players (1 for solo drill)"; Nplayers IF Nplayers < 1 THEN Nplayers = 1 CLS DIM Player(1 TO Nplayers) ' Fill X with 10 through 99 FOR k = 1 TO 90 X(k) = k + 9 IF (k <= Nplayers) THEN Player(k) = k NEXT CALL Shuffle(X(), 90) CALL Shuffle(Player(), Nplayers) N = 0 Up = 0 MsgColor = 10 PRINT "Insertion phase --- touch any key for next value," PRINT " touch Q to exit this phase." LineLen = 80 DO N = N + 1 IF LineLen > 70 THEN PRINT : LineLen = 0 PRINT USING "#####"; X(N); LineLen = LineLen + 5 IF Nplayers > 1 THEN GOSUB DisplayPlayer DO C$ = INKEY$ LOOP WHILE C$ = "" LOOP WHILE UCASE$(C$) <> "Q" AND N < 90 PRINT : PRINT PRINT "Deletion phase --- touch any key for next value," PRINT " touch Q to exit this phase." LineLen = 80 DO Idx = INT(RND * N) + 1 SWAP X(N), X(Idx) IF LineLen > 70 THEN PRINT : LineLen = 0 PRINT USING "#####"; X(N); LineLen = LineLen + 5 N = N - 1 IF Nplayers > 1 THEN GOSUB DisplayPlayer DO C$ = INKEY$ LOOP WHILE C$ = "" LOOP WHILE UCASE$(C$) <> "Q" AND N > 0 PRINT END DisplayPlayer: RtnRow = CSRLIN: RtnCol = POS(0) Up = Up + 1 IF Up > Nplayers THEN LOCATE 22, 32 PRINT "Selah !"; Up = 1 CALL Shuffle(Player(), Nplayers) MsgColor = MsgColor + 1 IF MsgColor > 15 THEN MsgColor = 10 END IF IF Up = 2 THEN LOCATE 22, 32: PRINT " "; LOCATE 20, 30 COLOR MsgColor: PRINT USING "Player _# ##"; Player(Up); COLOR 15: LOCATE RtnRow, RtnCol RETURN SUB Shuffle (X(), N) FOR k = N TO 2 STEP -1 Item = INT(RND * k + 1) SWAP X(Item), X(k) NEXT k END SUB