summaryrefslogtreecommitdiff
path: root/gcd.cob
diff options
context:
space:
mode:
Diffstat (limited to 'gcd.cob')
-rw-r--r--gcd.cob44
1 files changed, 44 insertions, 0 deletions
diff --git a/gcd.cob b/gcd.cob
new file mode 100644
index 0000000..44a60f9
--- /dev/null
+++ b/gcd.cob
@@ -0,0 +1,44 @@
+ * Tested with GNU COBOL 4
+ *
+ * Synopsis:
+ *
+ * $ cobc -x gcd.cob -o gcd-cob
+ * $ ./gcd-cob 11 22 33 121
+ *
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. GCD.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 WS-COUNT PIC 9(20).
+ 01 WS-GCD PIC 9(20).
+ 01 WS-NUM PIC 9(20).
+ 01 WS-OUT PIC Z(20).
+ PROCEDURE DIVISION.
+ ACCEPT WS-COUNT FROM ARGUMENT-NUMBER.
+ IF WS-COUNT = 0 STOP RUN.
+ ACCEPT WS-GCD FROM ARGUMENT-VALUE.
+ PERFORM WITH TEST BEFORE UNTIL WS-COUNT = 1
+ ACCEPT WS-NUM FROM ARGUMENT-VALUE
+ CALL 'GCD2' USING WS-GCD, WS-NUM
+ SUBTRACT 1 FROM WS-COUNT
+ END-PERFORM.
+ MOVE WS-GCD TO WS-OUT.
+ DISPLAY FUNCTION TRIM (WS-OUT LEADING).
+ END PROGRAM GCD.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. GCD2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 WS-C PIC 9(20).
+ LINKAGE SECTION.
+ 01 L-A PIC 9(20).
+ 01 L-B PIC 9(20).
+ PROCEDURE DIVISION USING L-A, L-B.
+ PERFORM WITH TEST BEFORE UNTIL L-B = 0
+ MOVE L-B TO WS-C
+ DIVIDE WS-C INTO L-A GIVING L-A REMAINDER L-B
+ MOVE WS-C TO L-A
+ END-PERFORM.
+ END PROGRAM GCD2.
+