IDENTIFICATION DIVISION. *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- PROGRAM-ID. BAGELS. ENVIRONMENT DIVISION. *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- CONFIGURATION SECTION. *----------------------- INPUT-OUTPUT SECTION. *----------------------- DATA DIVISION. *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- FILE SECTION. *----------------------- WORKING-STORAGE SECTION. 01 RUNNING PIC 9 VALUE 0. 01 GAMEOVER PIC 9 VALUE 0. 01 ANS PIC A(3). 01 GOT-ANS PIC 9. 01 TRIM-ANS PIC A. 01 TEMP-FORMAT PIC Z(4). 01 TRIM-FORMAT PIC Z(4). 01 I PIC 9999. 01 DIGITS. 03 DIGITS1 PIC 9. 03 DIGITS2 PIC 9. 03 DIGITS3 PIC 9. 01 GOT-DIGIT PIC 9. 01 GUESS PIC 999. 01 GOT-GUESS PIC 9. 01 CHECKED PIC 9. 01 SCORE PIC 999. 01 ATTEMPT PIC 99. 01 GUESSED PIC 9. 01 RET-VAL PIC 999. 01 ARRAY-IN. 03 IN1 PIC 9. 03 IN2 PIC 9. 03 IN3 PIC 9. 01 RET-ARRAY. 03 OUT1 PIC 9. 03 OUT2 PIC 9. 03 OUT3 PIC 9. 01 TEMP. 03 TMP1 PIC 9. 03 TMP2 PIC 9. 03 TMP3 PIC 9. 01 VALS. 03 VAL1 PIC 9. 03 VAL2 PIC 9. 03 VAL3 PIC 9. 01 VAL-IN PIC 999. 01 TEMP-VAL PIC 999. 01 PLACES. 03 HUND PIC 999. 03 TENS PIC 99. 03 ONES PIC 9. 01 HUNDRED PIC 999 VALUE 100. 01 TEN PIC 99 VALUE 10. 01 SEED PIC 99999. *----------------------- PROCEDURE DIVISION. *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- MAIN-PROCEDURE. DISPLAY "*** BAGELS : COBOL ***". SET GOT-ANS TO 0. PERFORM ASK-TO-SEE-THE-RULES UNTIL GOT-ANS = 1. SET RUNNING TO 1. START-PARA. SET SCORE TO 0. PERFORM RUNNING-LOOP UNTIL RUNNING = 0. MOVE SCORE TO TEMP-FORMAT. MOVE 0 TO I. INSPECT TEMP-FORMAT TALLYING I FOR LEADING SPACE. MOVE TEMP-FORMAT ( I + 1 : LENGTH OF TEMP-FORMAT - I ) TO TRIM-FORMAT. DISPLAY "A"TRIM-FORMAT" POINT BAGELS BUFF!". DISPLAY "HOPE YOU HAD FUN. BYE!". STOP RUN. DISPLAY-RULES. DISPLAY "I WILL THINK OF A THREE-DIGIT NUMBER. YOU WILL TRY". DISPLAY "TO GUESS MY NUMBER AND I WILL GIVE YOU CLUES AS ". DISPLAY "FOLLOWS:". DISPLAY "PICO - ONE DIGIT CORRECT BUT IN THE WRONG - "POSITION". DISPLAY "FERMI- ONE DIGIT CORRECT AND IN THE RIGHT - "POSITION". DISPLAY "BAGELS - NO DIGITS ARE CORRECT". DISPLAY " ". DISPLAY "YOU GET TWENTY TRIES BEFORE YOU LOSE.". DISPLAY " ". ASK-FOR-GUESS. DISPLAY "GUESS #"ATTEMPT. ACCEPT GUESS. IF GUESS < 0 THEN DISPLAY "PLEASE GUESS A NON-NEGATIVE NUMBER." ELSE IF GUESS < 100 OR GUESS > 999 THEN DISPLAY "PLEASE GUESS A NUMBER BETWEEN 100 AND 999." ELSE SET GOT-GUESS TO 1 END-IF. MAKE-ARRAY-FROM-INT. COMPUTE OUT1 = VAL-IN / 100. COMPUTE OUT2 = (VAL-IN - (OUT1 * 100)) / 10. COMPUTE OUT3 = (VAL-IN - (OUT1 * 100) - (OUT2 * 10)). MAKE-INT-FROM-ARRAY. SET RET-VAL TO 0. MULTIPLY IN1 BY HUNDRED GIVING HUND END-MULTIPLY. MULTIPLY IN2 BY TEN GIVING TENS END-MULTIPLY. MOVE IN3 TO ONES. ADD HUND TO RET-VAL. ADD TENS TO RET-VAL. ADD ONES TO RET-VAL. CHECK-GUESS. MOVE GUESS TO VAL-IN. PERFORM MAKE-ARRAY-FROM-INT. MOVE RET-ARRAY TO TEMP. SET VAL1 TO 0. SET VAL2 TO 0. SET VAL3 TO 0. IF TMP1 = DIGITS1 THEN SET VAL1 TO 1 END-IF. IF TMP2 = DIGITS2 THEN SET VAL2 TO 1 END-IF. IF TMP3 = DIGITS3 THEN SET VAL3 TO 1 END-IF. MOVE VALS TO ARRAY-IN. PERFORM MAKE-INT-FROM-ARRAY. IF RET-VAL = 111 THEN SET GUESSED TO 1 ELSE IF TMP1 = DIGITS2 THEN SET VAL1 TO 2 END-IF IF TMP1 = DIGITS3 THEN SET VAL1 TO 2 END-IF IF TMP2 = DIGITS1 THEN SET VAL2 TO 2 END-IF IF TMP2 = DIGITS3 THEN SET VAL2 TO 2 END-IF IF TMP3 = DIGITS1 THEN SET VAL3 TO 2 END-IF IF TMP3 = DIGITS2 THEN SET VAL3 TO 2 END-IF MOVE VALS TO ARRAY-IN PERFORM MAKE-INT-FROM-ARRAY IF RET-VAL = 0 THEN DISPLAY "BAGELS" ELSE IF VAL1 = 1 THEN DISPLAY "FERMI " NO ADVANCING END-IF IF VAL1 = 2 THEN DISPLAY "PICO " NO ADVANCING END-IF IF VAL2 = 1 THEN DISPLAY "FERMI " NO ADVANCING END-IF IF VAL2 = 2 THEN DISPLAY "PICO " NO ADVANCING END-IF IF VAL3 = 1 THEN DISPLAY "FERMI" END-IF IF VAL3 = 2 THEN DISPLAY "PICO" END-IF END-IF DISPLAY " " SET GUESSED TO 0 END-IF. SET CHECKED TO 1. GET-DIGITS-2. COMPUTE DIGITS2 = FUNCTION RANDOM * (10). IF DIGITS2 <> DIGITS1 THEN SET GOT-DIGIT TO 1 END-IF. COMPUTE SEED = FUNCTION RANDOM(1000,99999). GET-DIGITS-3. COMPUTE DIGITS3 = FUNCTION RANDOM * (10). IF DIGITS3 <> DIGITS1 AND DIGITS3 <> DIGITS2 THEN SET GOT-DIGIT TO 1 END-IF. CREATE-THE-NUMBER. COMPUTE DIGITS1 = FUNCTION RANDOM * (10) + 1. SET GOT-DIGIT TO 0. PERFORM GET-DIGITS-2 UNTIL GOT-DIGIT = 1. SET GOT-DIGIT TO 0. PERFORM GET-DIGITS-3 UNTIL GOT-DIGIT = 1. SET GOT-DIGIT TO 2. DISPLAY-GAME-OVER. DISPLAY "OH WELL, THAT'S TWENTY GUESSES.". MOVE DIGITS TO ARRAY-IN. PERFORM MAKE-INT-FROM-ARRAY. DISPLAY "MY NUMBER WAS "RET-VAL. SET GAMEOVER TO 1. ASK-TO-PLAY-AGAIN. DISPLAY "DO YOU WANT TO PLAY AGAIN?". ACCEPT ANS. MOVE FUNCTION UPPER-CASE(ANS) TO ANS. MOVE ANS TO TRIM-ANS. IF TRIM-ANS = "Y" THEN SET GOT-ANS TO 1 ELSE IF TRIM-ANS = "N" THEN SET RUNNING TO 0 SET GOT-ANS TO 1 ELSE DISPLAY "PLEASE ANSWER EITHER ""YES"" OR ""NO""." END-IF. ASK-TO-SEE-THE-RULES. DISPLAY "DO YOU WANT TO SEE THE RULES?". ACCEPT ANS. MOVE FUNCTION UPPER-CASE(ANS) TO ANS. MOVE ANS TO TRIM-ANS. IF TRIM-ANS = "Y" THEN PERFORM DISPLAY-RULES SET GOT-ANS TO 1 ELSE IF TRIM-ANS = "N" THEN SET GOT-ANS TO 1 ELSE DISPLAY "PLEASE ANSWER EITHER ""YES"" OR ""NO""." END-IF. GAME-LOOP. SET GOT-GUESS TO 0. PERFORM ASK-FOR-GUESS UNTIL GOT-GUESS = 1. SET GUESSED TO 0. SET CHECKED TO 0. PERFORM CHECK-GUESS UNTIL CHECKED = 1. IF GUESSED = 1 THEN DISPLAY "YOU GOT IT!!!" COMPUTE SCORE = SCORE + 1 SET GAMEOVER TO 1 ELSE ADD 1 TO ATTEMPT IF ATTEMPT > 20 THEN PERFORM DISPLAY-GAME-OVER END-IF END-IF. RUNNING-LOOP. SET GAMEOVER TO 0. SET ATTEMPT TO 1. SET GOT-DIGIT TO 0. PERFORM CREATE-THE-NUMBER UNTIL GOT-DIGIT = 2. DISPLAY "OK, I HAVE A NUMBER IN MIND". PERFORM GAME-LOOP UNTIL GAMEOVER = 1. DISPLAY "*** GAME OVER ***". SET GOT-ANS TO 0. PERFORM ASK-TO-PLAY-AGAIN UNTIL GOT-ANS = 1. END PROGRAM BAGELS.