Skip to content

Instantly share code, notes, and snippets.

@odiseo42
Created March 11, 2013 23:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save odiseo42/5138721 to your computer and use it in GitHub Desktop.
Save odiseo42/5138721 to your computer and use it in GitHub Desktop.
IDENTIFICATION DIVISION.
PROGRAM-ID. chgmaker.
DATE-WRITTEN. 1/28/2013.
* AUTHOR Dr_Legacy
* REMARKS reddit dailyprogrammer challenge #119
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 AMOUNT-IN PIC X(10).
01 NFRAC PIC X(5).
01 NFRAC9 REDEFINES NFRAC PIC 9(5).
01 N1 PIC X(10).
01 N2 PIC X(10) VALUE ZEROS.
01 N29 REDEFINES N2 PIC 9(10).
01 CHARCOUNT PIC 99 VALUE ZERO.
01 CC2 PIC 99 VALUE ZERO.
01 AMOUNT-WORKING PIC 9(11)V99.
01 QUARTER-VALUE PIC 9V99 VALUE 0.25.
01 DIME-VALUE PIC 9V99 VALUE 0.10.
01 NICKEL-VALUE PIC 9V99 VALUE 0.05.
01 PENNY-VALUE PIC 9V99 VALUE 0.01.
01 QUARTER-COUNT PIC 9(11) VALUE ZERO.
01 DIME-COUNT PIC 9 VALUE ZERO.
01 NICKEL-COUNT PIC 9 VALUE ZERO.
01 PENNY-COUNT PIC 9 VALUE ZERO.
01 AMOUNT-OUT PIC Z(10)9.
*****
PROCEDURE DIVISION.
*****
MAIN-LOGIC SECTION.
MAIN-BEGIN.
DISPLAY "CHANGE MAKING PROGRAM".
DISPLAY "ENTER AMOUNT".
ACCEPT AMOUNT-IN.
IF AMOUNT-IN EQUAL SPACE THEN
GO TO EXIT-PROGRAM.
*** old COBOL doesn't have any really fancy string functions
UNSTRING AMOUNT-IN
DELIMITED BY ALL SPACES
OR "."
INTO N1, NFRAC.
INSPECT NFRAC REPLACING ALL SPACE BY ZERO.
COMPUTE AMOUNT-WORKING ROUNDED = NFRAC9 / 100000 .
IF N1 NOT EQUAL SPACE THEN
PERFORM VARYING CHARCOUNT FROM 10 BY -1
UNTIL N1(CHARCOUNT:1) NOT = SPACE
*** reference modification. YOU KIDS HAVE IT EASY I TELL YOU
END-PERFORM
COMPUTE CC2 = 10 - CHARCOUNT + 1
STRING N1(1:CHARCOUNT) DELIMITED SIZE INTO N2
POINTER CC2
ADD AMOUNT-WORKING N29 GIVING AMOUNT-WORKING
.
DISPLAY "".
DIVIDE AMOUNT-WORKING BY QUARTER-VALUE
GIVING QUARTER-COUNT
REMAINDER AMOUNT-WORKING.
IF QUARTER-COUNT IS GREATER THAN ZERO
MOVE QUARTER-COUNT TO AMOUNT-OUT
DISPLAY "QUARTERS: " AMOUNT-OUT.
DIVIDE AMOUNT-WORKING BY DIME-VALUE
GIVING DIME-COUNT
REMAINDER AMOUNT-WORKING.
IF DIME-COUNT IS GREATER THAN ZERO
MOVE DIME-COUNT TO AMOUNT-OUT
DISPLAY "DIMES: " AMOUNT-OUT.
DIVIDE AMOUNT-WORKING BY NICKEL-VALUE
GIVING NICKEL-COUNT
REMAINDER AMOUNT-WORKING.
IF NICKEL-COUNT IS GREATER THAN ZERO
MOVE NICKEL-COUNT TO AMOUNT-OUT
DISPLAY "NICKELS: " AMOUNT-OUT.
DIVIDE AMOUNT-WORKING BY PENNY-VALUE
GIVING PENNY-COUNT
REMAINDER AMOUNT-WORKING.
IF PENNY-COUNT IS GREATER THAN ZERO
MOVE PENNY-COUNT TO AMOUNT-OUT
DISPLAY "PENNIES: " AMOUNT-OUT.
IF AMOUNT-WORKING IS GREATER THAN ZERO
DISPLAY "wtf ".
MAIN-END-PROGRAM.
GO TO EXIT-PROGRAM.
MAIN-EXIT.
EXIT.
/
DRLEGACY-MISC SECTION.
EXIT-PROGRAM.
EXIT PROGRAM.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment