IDENTIFICATION DIVISION.
PROGRAM-ID. PNPCHECK.
*-------------------------------------------------------------*
* PNPCHECK - COBOL Program Written September 2011 *
*-------------------------------------------------------------*
* Programmer - William T. Voris *
*-------------------------------------------------------------*
* *
* This called subroutine represents the solution to the *
* P portion of the P NP problem. The search process *
* looks for equations by looping through all possible *
* integer sets. When it finds an equation that sums *
* to zero it passes the result back to PNPSOLVE. *
* *
*-------------------------------------------------------------*
* Log of changes: Added Exponential Time logic Oct 2013 *
* : Fixed 25 integer set logic Jan 2014 *
* : Fixed 25 integer set temporal anomalies *
* Jan 2014 *
* : Cosmetic clean up Jan 2014 *
*-------------------------------------------------------------*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 NUMBER-IN-EQUATION PIC 999 VALUE 000.
01 DONE-SW PIC X VALUE "N".
88 DONE VALUE "Y".
01 SUBSCRIPTS.
05 SUB-L PIC 9(3) VALUE 001.
05 SUBC-O PIC 9(3) VALUE 001.
05 SUBC-L PIC 9(3) VALUE 001.
05 SUB-O PIC 9(3) VALUE 001.
05 SUBC-1 PIC 9(2) VALUE ZERO COMP.
05 SUBC-2 PIC 9(2) VALUE ZERO COMP.
05 SUBC-3 PIC 9(2) VALUE ZERO COMP.
05 SUBC-4 PIC 9(2) VALUE ZERO COMP.
05 SUBC-5 PIC 9(2) VALUE ZERO COMP.
05 SUBC-6 PIC 9(2) VALUE ZERO COMP.
05 SUBC-7 PIC 9(2) VALUE ZERO COMP.
05 SUBC-8 PIC 9(2) VALUE ZERO COMP.
05 SUBC-9 PIC 9(2) VALUE ZERO COMP.
05 SUBC-10 PIC 9(2) VALUE ZERO COMP.
05 SUBC-11 PIC 9(2) VALUE ZERO COMP.
05 SUBC-12 PIC 9(2) VALUE ZERO COMP.
05 SUBC-13 PIC 9(2) VALUE ZERO COMP.
05 SUBC-14 PIC 9(2) VALUE ZERO COMP.
01 OUT-DISPLAY-TABLE.
05 OUT-LINE OCCURS 14 TIMES.
10 FILLER PIC X(2).
10 INTEGER-LIST OCCURS 15 TIMES.
15 INT-DIS PIC --9.
15 COM-DIS PIC X(1).
10 PRINT-TICK PIC ZZZ,ZZZ,ZZ9.
01 RESULTS-FIELDS.
05 RESULT-P PIC S9999 VALUE ZERO.
05 RESULT-ST PIC S9999 VALUE ZERO.
05 RESULT-25 PIC S9999 VALUE ZERO.
LINKAGE SECTION.
01 IO-LINK.
05 CHECK-TICK PIC 9999999999.
05 SOLVE-TICK PIC 9999999999.
05 EXPON-TICK PIC 9999999999.
05 SUM-VALUE-CK PIC S9999.
05 IO-OUT-LINE PIC X(73).
05 POLY-EXP-SW PIC X.
05 PROCESS-LEVEL PIC 99.
88 PROCESS-LEVEL-OK VALUES 07 08 09 10 11 12 13 14.
05 TABLE-OF-INTEGERS.
10 INT PIC S99 OCCURS 25 TIMES.
PROCEDURE DIVISION USING IO-LINK.
MAINLINE.
DISPLAY "Checking integers, please wait" AT 2504.
MOVE SPACES TO IO-OUT-LINE.
MOVE 1 TO EXPON-TICK.
MOVE 0 TO CHECK-TICK.
CHECK-RTN.
IF DONE
MOVE "N" TO DONE-SW
DISPLAY " " AT 2504
GOBACK.
MOVE 0 TO SUBC-1.
PERFORM P1-TWOS THRU PX-TWOS.
MOVE 0 TO SUBC-1.
PERFORM P1-THREES THRU PX-THREES.
MOVE 0 TO SUBC-1.
PERFORM P1-FOURS THRU PX-FOURS.
MOVE 0 TO SUBC-1.
IF INT (5) NOT EQUAL ZEROS
DISPLAY "Checking 5 integers, wait. " AT 2504
PERFORM P1-FIVES THRU PX-FIVES.
MOVE 0 TO SUBC-1
IF INT (6) NOT EQUAL ZEROS
DISPLAY "Checking 6 integers, wait.. " AT 2504
PERFORM P1-SIXES THRU PX-SIXES.
MOVE 0 TO SUBC-1.
IF INT (7) NOT EQUAL ZEROS
DISPLAY "Checking 7 integers, wait... " AT 2504
PERFORM P1-SEVENS THRU PX-SEVENS.
IF PROCESS-LEVEL LESS THAN 8
GOBACK.
MOVE 0 TO SUBC-1.
IF INT (8) NOT EQUAL ZEROS
DISPLAY "Checking 8 integers, wait.... " AT 2504
PERFORM P1-EIGHTS THRU PX-EIGHTS.
IF PROCESS-LEVEL LESS THAN 9
GOBACK.
MOVE 0 TO SUBC-1.
IF INT (9) NOT EQUAL ZEROS
DISPLAY "Checking 9 integers, wait..... " AT 2504
PERFORM P1-NINES THRU PX-NINES.
IF PROCESS-LEVEL LESS THAN 10
GOBACK.
MOVE 0 TO SUBC-1
IF INT (10) NOT EQUAL ZEROS
DISPLAY "Checking 10 integers, wait......" AT 2504
PERFORM P1-TENS THRU PX-TENS.
IF PROCESS-LEVEL LESS THAN 11
GOBACK.
MOVE 0 TO SUBC-1.
IF INT (11) NOT EQUAL ZEROS
DISPLAY "Checking 11 integers, wait......" AT 2504
PERFORM P1-ELEVENS THRU PX-ELEVENS.
IF PROCESS-LEVEL LESS THAN 12
GOBACK.
MOVE 0 TO SUBC-1.
IF INT (12) NOT EQUAL ZEROS
DISPLAY "Checking 12 integers, wait......" AT 2504
PERFORM P1-TWELVES THRU PX-TWELVES.
IF PROCESS-LEVEL LESS THAN 13
GOBACK.
MOVE 0 TO SUBC-1.
IF INT (13) NOT EQUAL ZEROS
DISPLAY "Checking 13 integers, wait......" AT 2504
PERFORM P1-THIRTEENS THRU PX-THIRTEENS.
IF PROCESS-LEVEL LESS THAN 14
GOBACK.
MOVE 0 TO SUBC-1.
IF INT (14) NOT EQUAL ZEROS
DISPLAY "Checking 14 integers, wait......" AT 2504
PERFORM P1-FOURTEENS THRU PEND.
DISPLAY " " AT 2504.
GOBACK.
CHECK-RTN-X. EXIT.
*-------------------------------------------------------------*
* *
* Check Routines *
* *
*-------------------------------------------------------------*
* *
* This logic routine scans the line of numbers with *
* an exponential method. It is effective for a small *
* number of integers. However, its limits become *
* obvious with large integer sets. This method *
* evaluates all possible integer combinations. *
* The logic ticks in this program track both *
* exponential time and polynomial time. It loops *
* and then examines every potential column and then *
* scans these sequences. However, the exponential *
* nesting logic soon goes beyond the program's abilty *
* to resolve it in a manner that could be called *
* simple or efficient. Therefore the maximum number *
* of integers evaluated for a subset is 14. It does *
* not use an algorithm, but a grid similar to the *
* example in the white paper. *
* *
*-------------------------------------------------------------*
P1-TWOS.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 25
MOVE SUBC-1 TO SUBC-2
GO TO P2-TWOS ELSE GO TO PX-TWOS.
P2-TWOS.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 26
PERFORM CHECK-EQUATION-2 THRU CHECK-EQUATION-2-X
ADD 1 TO EXPON-TICK
GO TO P2-TWOS
ELSE
ADD 1 TO EXPON-TICK
GO TO P1-TWOS.
PX-TWOS. EXIT.
P1-THREES.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 24
MOVE SUBC-1 TO SUBC-2
GO TO P2-THREES ELSE GO TO PX-THREES.
P2-THREES.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 25
MOVE SUBC-2 TO SUBC-3
GO TO P3-THREES ELSE GO TO P1-THREES.
P3-THREES.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 26
PERFORM CHECK-EQUATION-3 THRU CHECK-EQUATION-3-X
ADD 1 TO EXPON-TICK
GO TO P3-THREES
ELSE
ADD 1 TO EXPON-TICK
GO TO P2-THREES.
PX-THREES. EXIT.
P1-FOURS.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 23
MOVE SUBC-1 TO SUBC-2
GO TO P2-FOURS ELSE GO TO PX-FOURS.
P2-FOURS.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 24
MOVE SUBC-2 TO SUBC-3
GO TO P3-FOURS ELSE GO TO P1-FOURS.
P3-FOURS.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 25
MOVE SUBC-3 TO SUBC-4
GO TO P4-FOURS ELSE GO TO P2-FOURS.
P4-FOURS.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 26
PERFORM CHECK-EQUATION-4 THRU CHECK-EQUATION-4-X
ADD 1 TO EXPON-TICK
GO TO P4-FOURS
ELSE
ADD 1 TO EXPON-TICK
GO TO P3-FOURS.
PX-FOURS. EXIT.
P1-FIVES.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 22
MOVE SUBC-1 TO SUBC-2
GO TO P2-FIVES ELSE GO TO PX-FIVES.
P2-FIVES.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 23
MOVE SUBC-2 TO SUBC-3
GO TO P3-FIVES ELSE GO TO P1-FIVES.
P3-FIVES.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 24
MOVE SUBC-3 TO SUBC-4
GO TO P4-FIVES ELSE GO TO P2-FIVES.
P4-FIVES.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 25
MOVE SUBC-4 TO SUBC-5
GO TO P5-FIVES ELSE GO TO P3-FIVES.
P5-FIVES.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 26
PERFORM CHECK-EQUATION-5 THRU CHECK-EQUATION-5-X
ADD 1 TO EXPON-TICK
GO TO P5-FIVES
ELSE
ADD 1 TO EXPON-TICK
GO TO P4-FIVES.
PX-FIVES. EXIT.
P1-SIXES.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 21
MOVE SUBC-1 TO SUBC-2
GO TO P2-SIXES ELSE GO TO PX-SIXES.
P2-SIXES.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 22
MOVE SUBC-2 TO SUBC-3
GO TO P3-SIXES ELSE GO TO P1-SIXES.
P3-SIXES.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 23
MOVE SUBC-3 TO SUBC-4
GO TO P4-SIXES ELSE GO TO P2-SIXES.
P4-SIXES.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 24
MOVE SUBC-4 TO SUBC-5
GO TO P5-SIXES ELSE GO TO P3-SIXES.
P5-SIXES.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 25
MOVE SUBC-5 TO SUBC-6
GO TO P6-SIXES ELSE GO TO P4-SIXES.
P6-SIXES.
ADD 1 TO SUBC-6.
IF SUBC-6 LESS THAN 26
PERFORM CHECK-EQUATION-6 THRU CHECK-EQUATION-6-X
ADD 1 TO EXPON-TICK
GO TO P6-SIXES
ELSE
ADD 1 TO EXPON-TICK
GO TO P5-SIXES.
PX-SIXES. EXIT.
P1-SEVENS.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 20
MOVE SUBC-1 TO SUBC-2
GO TO P2-SEVENS ELSE GO TO PX-SEVENS.
P2-SEVENS.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 21
MOVE SUBC-2 TO SUBC-3
GO TO P3-SEVENS ELSE GO TO P1-SEVENS.
P3-SEVENS.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 22
MOVE SUBC-3 TO SUBC-4
GO TO P4-SEVENS ELSE GO TO P2-SEVENS.
P4-SEVENS.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 23
MOVE SUBC-4 TO SUBC-5
GO TO P5-SEVENS ELSE GO TO P3-SEVENS.
P5-SEVENS.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 24
MOVE SUBC-5 TO SUBC-6
GO TO P6-SEVENS ELSE GO TO P4-SEVENS.
P6-SEVENS.
ADD 1 TO SUBC-6.
IF SUBC-6 LESS THAN 25
MOVE SUBC-6 TO SUBC-7
GO TO P7-SEVENS ELSE GO TO P5-SEVENS.
P7-SEVENS.
ADD 1 TO SUBC-7.
IF SUBC-7 LESS THAN 26
PERFORM CHECK-EQUATION-7 THRU CHECK-EQUATION-7-X
ADD 1 TO EXPON-TICK
GO TO P7-SEVENS
ELSE
ADD 1 TO EXPON-TICK
GO TO P6-SEVENS.
PX-SEVENS. EXIT.
P1-EIGHTS.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 19
MOVE SUBC-1 TO SUBC-2
GO TO P2-EIGHTS ELSE GO TO PX-EIGHTS.
P2-EIGHTS.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 20
MOVE SUBC-2 TO SUBC-3
GO TO P3-EIGHTS ELSE GO TO P1-EIGHTS.
P3-EIGHTS.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 21
MOVE SUBC-3 TO SUBC-4
GO TO P4-EIGHTS ELSE GO TO P2-EIGHTS.
P4-EIGHTS.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 22
MOVE SUBC-4 TO SUBC-5
GO TO P5-EIGHTS ELSE GO TO P3-EIGHTS.
P5-EIGHTS.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 23
MOVE SUBC-5 TO SUBC-6
GO TO P6-EIGHTS ELSE GO TO P4-EIGHTS.
P6-EIGHTS.
ADD 1 TO SUBC-6.
IF SUBC-6 LESS THAN 24
MOVE SUBC-6 TO SUBC-7
GO TO P7-EIGHTS ELSE GO TO P5-EIGHTS.
P7-EIGHTS.
ADD 1 TO SUBC-7.
IF SUBC-7 LESS THAN 25
MOVE SUBC-7 TO SUBC-8
GO TO P8-EIGHTS ELSE GO TO P6-EIGHTS.
P8-EIGHTS.
ADD 1 TO SUBC-8.
IF SUBC-8 LESS THAN 26
PERFORM CHECK-EQUATION-8 THRU CHECK-EQUATION-8-X
ADD 1 TO EXPON-TICK
GO TO P8-EIGHTS
ELSE
ADD 1 TO EXPON-TICK
GO TO P7-EIGHTS.
PX-EIGHTS. EXIT.
P1-NINES.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 18
MOVE SUBC-1 TO SUBC-2
GO TO P2-NINES ELSE GO TO PX-NINES.
P2-NINES.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 19
MOVE SUBC-2 TO SUBC-3
GO TO P3-NINES ELSE GO TO P1-NINES.
P3-NINES.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 20
MOVE SUBC-3 TO SUBC-4
GO TO P4-NINES ELSE GO TO P2-NINES.
P4-NINES.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 21
MOVE SUBC-4 TO SUBC-5
GO TO P5-NINES ELSE GO TO P3-NINES.
P5-NINES.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 22
MOVE SUBC-5 TO SUBC-6
GO TO P6-NINES ELSE GO TO P4-NINES.
P6-NINES.
ADD 1 TO SUBC-6.
IF SUBC-6 LESS THAN 23
MOVE SUBC-6 TO SUBC-7
GO TO P7-NINES ELSE GO TO P5-NINES.
P7-NINES.
ADD 1 TO SUBC-7.
IF SUBC-7 LESS THAN 24
MOVE SUBC-7 TO SUBC-8
GO TO P8-NINES ELSE GO TO P6-NINES.
P8-NINES.
ADD 1 TO SUBC-8.
IF SUBC-8 LESS THAN 25
MOVE SUBC-8 TO SUBC-9
GO TO P9-NINES ELSE GO TO P7-NINES.
P9-NINES.
ADD 1 TO SUBC-9.
IF SUBC-9 LESS THAN 26
PERFORM CHECK-EQUATION-9 THRU CHECK-EQUATION-9-X
ADD 1 TO EXPON-TICK
GO TO P9-NINES
ELSE
ADD 1 TO EXPON-TICK
GO TO P8-NINES.
PX-NINES. EXIT.
P1-TENS.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 17
MOVE SUBC-1 TO SUBC-2
GO TO P2-TENS ELSE GO TO PX-TENS.
P2-TENS.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 18
MOVE SUBC-2 TO SUBC-3
GO TO P3-TENS ELSE GO TO P1-TENS.
P3-TENS.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 19
MOVE SUBC-3 TO SUBC-4
GO TO P4-TENS ELSE GO TO P2-TENS.
P4-TENS.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 20
MOVE SUBC-4 TO SUBC-5
GO TO P5-TENS ELSE GO TO P3-TENS.
P5-TENS.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 21
MOVE SUBC-5 TO SUBC-6
GO TO P6-TENS ELSE GO TO P4-TENS.
P6-TENS.
ADD 1 TO SUBC-6.
IF SUBC-6 LESS THAN 22
MOVE SUBC-6 TO SUBC-7
GO TO P7-TENS ELSE GO TO P5-TENS.
P7-TENS.
ADD 1 TO SUBC-7.
IF SUBC-7 LESS THAN 23
MOVE SUBC-7 TO SUBC-8
GO TO P8-TENS ELSE GO TO P6-TENS.
P8-TENS.
ADD 1 TO SUBC-8.
IF SUBC-8 LESS THAN 24
MOVE SUBC-8 TO SUBC-9
GO TO P9-TENS ELSE GO TO P7-TENS.
P9-TENS.
ADD 1 TO SUBC-9.
IF SUBC-9 LESS THAN 25
MOVE SUBC-9 TO SUBC-10
GO TO P10-TENS ELSE GO TO P8-TENS.
P10-TENS.
ADD 1 TO SUBC-10.
IF SUBC-10 LESS THAN 26
PERFORM CHECK-EQUATION-10 THRU CHECK-EQUATION-10-X
ADD 1 TO EXPON-TICK
GO TO P10-TENS
ELSE
ADD 1 TO EXPON-TICK
GO TO P9-TENS.
PX-TENS. EXIT.
P1-ELEVENS.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 16
MOVE SUBC-1 TO SUBC-2
GO TO P2-ELEVENS ELSE GO TO PX-ELEVENS.
P2-ELEVENS.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 17
MOVE SUBC-2 TO SUBC-3
GO TO P3-ELEVENS ELSE GO TO P1-ELEVENS.
P3-ELEVENS.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 18
MOVE SUBC-3 TO SUBC-4
GO TO P4-ELEVENS ELSE GO TO P2-ELEVENS.
P4-ELEVENS.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 19
MOVE SUBC-4 TO SUBC-5
GO TO P5-ELEVENS ELSE GO TO P3-ELEVENS.
P5-ELEVENS.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 20
MOVE SUBC-5 TO SUBC-6
GO TO P6-ELEVENS ELSE GO TO P4-ELEVENS.
P6-ELEVENS.
ADD 1 TO SUBC-6.
IF SUBC-6 LESS THAN 21
MOVE SUBC-6 TO SUBC-7
GO TO P7-ELEVENS ELSE GO TO P5-ELEVENS.
P7-ELEVENS.
ADD 1 TO SUBC-7.
IF SUBC-7 LESS THAN 22
MOVE SUBC-7 TO SUBC-8
GO TO P8-ELEVENS ELSE GO TO P6-ELEVENS.
P8-ELEVENS.
ADD 1 TO SUBC-8.
IF SUBC-8 LESS THAN 23
MOVE SUBC-8 TO SUBC-9
GO TO P9-ELEVENS ELSE GO TO P7-ELEVENS.
P9-ELEVENS.
ADD 1 TO SUBC-9.
IF SUBC-9 LESS THAN 24
MOVE SUBC-9 TO SUBC-10
GO TO P10-ELEVENS ELSE GO TO P8-ELEVENS.
P10-ELEVENS.
ADD 1 TO SUBC-10.
IF SUBC-10 LESS THAN 25
MOVE SUBC-10 TO SUBC-11
GO TO P11-ELEVENS ELSE GO TO P9-ELEVENS.
P11-ELEVENS.
ADD 1 TO SUBC-11.
IF SUBC-11 LESS THAN 26
PERFORM CHECK-EQUATION-11 THRU CHECK-EQUATION-11-X
ADD 1 TO EXPON-TICK
GO TO P11-ELEVENS
ELSE
ADD 1 TO EXPON-TICK
GO TO P10-ELEVENS.
PX-ELEVENS. EXIT.
P1-TWELVES.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 15
MOVE SUBC-1 TO SUBC-2
GO TO P2-TWELVES ELSE GO TO PX-TWELVES.
P2-TWELVES.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 16
MOVE SUBC-2 TO SUBC-3
GO TO P3-TWELVES ELSE GO TO P1-TWELVES.
P3-TWELVES.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 17
MOVE SUBC-3 TO SUBC-4
GO TO P4-TWELVES ELSE GO TO P2-TWELVES.
P4-TWELVES.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 18
MOVE SUBC-4 TO SUBC-5
GO TO P5-TWELVES ELSE GO TO P3-TWELVES.
P5-TWELVES.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 19
MOVE SUBC-5 TO SUBC-6
GO TO P6-TWELVES ELSE GO TO P4-TWELVES.
P6-TWELVES.
ADD 1 TO SUBC-6.
IF SUBC-6 LESS THAN 20
MOVE SUBC-6 TO SUBC-7
GO TO P7-TWELVES ELSE GO TO P5-TWELVES.
P7-TWELVES.
ADD 1 TO SUBC-7.
IF SUBC-7 LESS THAN 21
MOVE SUBC-7 TO SUBC-8
GO TO P8-TWELVES ELSE GO TO P6-TWELVES.
P8-TWELVES.
ADD 1 TO SUBC-8.
IF SUBC-8 LESS THAN 22
MOVE SUBC-8 TO SUBC-9
GO TO P9-TWELVES ELSE GO TO P7-TWELVES.
P9-TWELVES.
ADD 1 TO SUBC-9.
IF SUBC-9 LESS THAN 23
MOVE SUBC-9 TO SUBC-10
GO TO P10-TWELVES ELSE GO TO P8-TWELVES.
P10-TWELVES.
ADD 1 TO SUBC-10.
IF SUBC-10 LESS THAN 24
MOVE SUBC-10 TO SUBC-11
GO TO P11-TWELVES ELSE GO TO P9-TWELVES.
P11-TWELVES.
ADD 1 TO SUBC-11.
IF SUBC-11 LESS THAN 25
MOVE SUBC-11 TO SUBC-12
GO TO P12-TWELVES ELSE GO TO P10-TWELVES.
P12-TWELVES.
ADD 1 TO SUBC-12.
IF SUBC-12 LESS THAN 26
PERFORM CHECK-EQUATION-12 THRU CHECK-EQUATION-12-X
ADD 1 TO EXPON-TICK
GO TO P12-TWELVES
ELSE
ADD 1 TO EXPON-TICK
GO TO P11-TWELVES.
PX-TWELVES. EXIT.
P1-THIRTEENS.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 14
MOVE SUBC-1 TO SUBC-2
GO TO P2-THIRTEENS ELSE GO TO PX-THIRTEENS.
P2-THIRTEENS.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 15
MOVE SUBC-2 TO SUBC-3
GO TO P3-THIRTEENS ELSE GO TO P1-THIRTEENS.
P3-THIRTEENS.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 16
MOVE SUBC-3 TO SUBC-4
GO TO P4-THIRTEENS ELSE GO TO P2-THIRTEENS.
P4-THIRTEENS.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 17
MOVE SUBC-4 TO SUBC-5
GO TO P5-THIRTEENS ELSE GO TO P3-THIRTEENS.
P5-THIRTEENS.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 18
MOVE SUBC-5 TO SUBC-6
GO TO P6-THIRTEENS ELSE GO TO P4-THIRTEENS.
P6-THIRTEENS.
ADD 1 TO SUBC-6.
IF SUBC-6 LESS THAN 19
MOVE SUBC-6 TO SUBC-7
GO TO P7-THIRTEENS ELSE GO TO P5-THIRTEENS.
P7-THIRTEENS.
ADD 1 TO SUBC-7.
IF SUBC-7 LESS THAN 20
MOVE SUBC-7 TO SUBC-8
GO TO P8-THIRTEENS ELSE GO TO P6-THIRTEENS.
P8-THIRTEENS.
ADD 1 TO SUBC-8.
IF SUBC-8 LESS THAN 21
MOVE SUBC-8 TO SUBC-9
GO TO P9-THIRTEENS ELSE GO TO P7-THIRTEENS.
P9-THIRTEENS.
ADD 1 TO SUBC-9.
IF SUBC-9 LESS THAN 22
MOVE SUBC-9 TO SUBC-10
GO TO P10-THIRTEENS ELSE GO TO P8-THIRTEENS.
P10-THIRTEENS.
ADD 1 TO SUBC-10.
IF SUBC-10 LESS THAN 23
MOVE SUBC-10 TO SUBC-11
GO TO P11-THIRTEENS ELSE GO TO P9-THIRTEENS.
P11-THIRTEENS.
ADD 1 TO SUBC-11.
IF SUBC-11 LESS THAN 24
MOVE SUBC-11 TO SUBC-12
GO TO P12-THIRTEENS ELSE GO TO P10-THIRTEENS.
P12-THIRTEENS.
ADD 1 TO SUBC-12.
IF SUBC-12 LESS THAN 25
MOVE SUBC-12 TO SUBC-13
GO TO P13-THIRTEENS ELSE GO TO P11-THIRTEENS.
P13-THIRTEENS.
ADD 1 TO SUBC-13.
IF SUBC-13 LESS THAN 26
PERFORM CHECK-EQUATION-13 THRU CHECK-EQUATION-13-X
ADD 1 TO EXPON-TICK
GO TO P13-THIRTEENS
ELSE
ADD 1 TO EXPON-TICK
GO TO P12-THIRTEENS.
PX-THIRTEENS. EXIT.
P1-FOURTEENS.
ADD 1 TO SUBC-1.
IF SUBC-1 LESS THAN 13
MOVE SUBC-1 TO SUBC-2
GO TO P2-FOURTEENS ELSE GO TO PEND.
P2-FOURTEENS.
ADD 1 TO SUBC-2.
IF SUBC-2 LESS THAN 14
MOVE SUBC-2 TO SUBC-3
GO TO P3-FOURTEENS ELSE GO TO P1-FOURTEENS.
P3-FOURTEENS.
ADD 1 TO SUBC-3.
IF SUBC-3 LESS THAN 15
MOVE SUBC-3 TO SUBC-4
GO TO P4-FOURTEENS ELSE GO TO P2-FOURTEENS.
P4-FOURTEENS.
ADD 1 TO SUBC-4.
IF SUBC-4 LESS THAN 16
MOVE SUBC-4 TO SUBC-5
GO TO P5-FOURTEENS ELSE GO TO P3-FOURTEENS.
P5-FOURTEENS.
ADD 1 TO SUBC-5.
IF SUBC-5 LESS THAN 17
MOVE SUBC-5 TO SUBC-6
GO TO P6-FOURTEENS ELSE GO TO P4-FOURTEENS.
P6-FOURTEENS.
ADD 1 TO SUBC-6.
IF SUBC-6 LESS THAN 18
MOVE SUBC-6 TO SUBC-7
GO TO P7-FOURTEENS ELSE GO TO P5-FOURTEENS.
P7-FOURTEENS.
ADD 1 TO SUBC-7.
IF SUBC-7 LESS THAN 19
MOVE SUBC-7 TO SUBC-8
GO TO P8-FOURTEENS ELSE GO TO P6-FOURTEENS.
P8-FOURTEENS.
ADD 1 TO SUBC-8.
IF SUBC-8 LESS THAN 20
MOVE SUBC-8 TO SUBC-9
GO TO P9-FOURTEENS ELSE GO TO P7-FOURTEENS.
P9-FOURTEENS.
ADD 1 TO SUBC-9.
IF SUBC-9 LESS THAN 21
MOVE SUBC-9 TO SUBC-10
GO TO P10-FOURTEENS ELSE GO TO P8-FOURTEENS.
P10-FOURTEENS.
ADD 1 TO SUBC-10.
IF SUBC-10 LESS THAN 22
MOVE SUBC-10 TO SUBC-11
GO TO P11-FOURTEENS ELSE GO TO P9-FOURTEENS.
P11-FOURTEENS.
ADD 1 TO SUBC-11.
IF SUBC-11 LESS THAN 23
MOVE SUBC-11 TO SUBC-12
GO TO P12-FOURTEENS ELSE GO TO P10-FOURTEENS.
P12-FOURTEENS.
ADD 1 TO SUBC-12.
IF SUBC-12 LESS THAN 24
MOVE SUBC-12 TO SUBC-13
GO TO P13-FOURTEENS ELSE GO TO P11-FOURTEENS.
P13-FOURTEENS.
ADD 1 TO SUBC-13.
IF SUBC-13 LESS THAN 25
MOVE SUBC-13 TO SUBC-14
GO TO P14-FOURTEENS ELSE GO TO P12-FOURTEENS.
P14-FOURTEENS.
ADD 1 TO SUBC-14.
IF SUBC-14 LESS THAN 26
PERFORM CHECK-EQUATION-14 THRU CHECK-EQUATION-14-X
ADD 1 TO EXPON-TICK
GO TO P14-FOURTEENS
ELSE
ADD 1 TO EXPON-TICK
GO TO P13-FOURTEENS.
PX-FOURTEENS. EXIT.
PEND.
MOVE "Y" TO DONE-SW
GO TO CHECK-RTN.
CHECK-EQUATION-2.
IF INT(SUBC-1) NOT EQUAL ZERO
IF INT(SUBC-2) NOT EQUAL ZERO
ADD INT(SUBC-1), INT(SUBC-2) GIVING RESULT-P
MOVE 2 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-2-X. EXIT.
CHECK-EQUATION-3.
IF INT(SUBC-3) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
GIVING RESULT-P
MOVE 3 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-3-X. EXIT.
CHECK-EQUATION-4.
IF INT(SUBC-4) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
GIVING RESULT-P
MOVE 4 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-4-X. EXIT.
CHECK-EQUATION-5.
IF INT(SUBC-5) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
GIVING RESULT-P
MOVE 5 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-5-X. EXIT.
CHECK-EQUATION-6.
IF INT(SUBC-6) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
INT(SUBC-6),
GIVING RESULT-P
MOVE 6 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-6-X. EXIT.
CHECK-EQUATION-7.
IF INT(SUBC-7) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
INT(SUBC-6),
INT(SUBC-7),
GIVING RESULT-P
MOVE 7 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-7-X. EXIT.
CHECK-EQUATION-8.
IF INT(SUBC-8) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
INT(SUBC-6),
INT(SUBC-7),
INT(SUBC-8),
GIVING RESULT-P
MOVE 8 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-8-X. EXIT.
CHECK-EQUATION-9.
IF INT(SUBC-9) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
INT(SUBC-6),
INT(SUBC-7),
INT(SUBC-8),
INT(SUBC-9),
GIVING RESULT-P
MOVE 9 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-9-X. EXIT.
CHECK-EQUATION-10.
IF INT(SUBC-10) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
INT(SUBC-6),
INT(SUBC-7),
INT(SUBC-8),
INT(SUBC-9),
INT(SUBC-10)
GIVING RESULT-P
MOVE 10 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-10-X. EXIT.
CHECK-EQUATION-11.
IF INT(SUBC-11) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
INT(SUBC-6),
INT(SUBC-7),
INT(SUBC-8),
INT(SUBC-9),
INT(SUBC-10),
INT(SUBC-11)
GIVING RESULT-P
MOVE 11 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-11-X. EXIT.
CHECK-EQUATION-12.
IF INT(SUBC-12) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
INT(SUBC-6),
INT(SUBC-7),
INT(SUBC-8),
INT(SUBC-9),
INT(SUBC-10),
INT(SUBC-11),
INT(SUBC-12)
GIVING RESULT-P
MOVE 12 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-12-X. EXIT.
CHECK-EQUATION-13.
IF INT(SUBC-13) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
INT(SUBC-6),
INT(SUBC-7),
INT(SUBC-8),
INT(SUBC-9),
INT(SUBC-10),
INT(SUBC-11),
INT(SUBC-12),
INT(SUBC-13)
GIVING RESULT-P
MOVE 13 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-13-X. EXIT.
CHECK-EQUATION-14.
IF INT(SUBC-14) NOT EQUAL ZERO
ADD INT(SUBC-1),
INT(SUBC-2),
INT(SUBC-3),
INT(SUBC-4),
INT(SUBC-5),
INT(SUBC-6),
INT(SUBC-7),
INT(SUBC-8),
INT(SUBC-9),
INT(SUBC-10),
INT(SUBC-11),
INT(SUBC-12),
INT(SUBC-13),
INT(SUBC-14)
GIVING RESULT-P
MOVE 14 TO NUMBER-IN-EQUATION
PERFORM CHECK-FOR-ZERO THRU CHECK-FOR-ZERO-X.
CHECK-EQUATION-14-X. EXIT.
CHECK-FOR-ZERO.
ADD 1 TO CHECK-TICK.
IF RESULT-P EQUAL SUM-VALUE-CK
NEXT SENTENCE
ELSE
MOVE ZERO TO RESULT-P
GO TO CHECK-FOR-ZERO-X.
MOVE SPACES TO IO-OUT-LINE.
MOVE 1 TO SUBC-O
MOVE 1 TO SUBC-L
MOVE INT(SUBC-1) TO INT-DIS(SUBC-O, SUBC-L)
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-2) TO INT-DIS(SUBC-O, SUBC-L)
IF POLY-EXP-SW = 'P'
MOVE CHECK-TICK TO PRINT-TICK(SUBC-O)
ELSE
MOVE EXPON-TICK TO PRINT-TICK(SUBC-O).
IF NUMBER-IN-EQUATION > 2
IF INT(SUBC-3) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-3) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 3
IF INT(SUBC-4) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-4) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 4
IF INT(SUBC-5) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-5) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 5
IF INT(SUBC-6) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-6) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 6
IF INT(SUBC-7) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-7) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 7
IF INT(SUBC-8) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-8) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 8
IF INT(SUBC-9) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-9) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 9
IF INT(SUBC-10) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-10) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 10
IF INT(SUBC-11) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-11) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 11
IF INT(SUBC-12) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-12) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 12
IF INT(SUBC-13) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-13) TO INT-DIS(SUBC-O, SUBC-L).
IF NUMBER-IN-EQUATION > 13
IF INT(SUBC-14) NOT EQUAL ZERO
MOVE "+" TO COM-DIS(SUBC-O, SUBC-L)
ADD 1 TO SUBC-L
MOVE INT(SUBC-14) TO INT-DIS(SUBC-O, SUBC-L).
MOVE OUT-LINE (SUB-O) TO IO-OUT-LINE
DISPLAY " " AT 2565
GOBACK.
CHECK-FOR-ZERO-X. EXIT.
*-------------------------------------------------------------*
* End of Program *
*-------------------------------------------------------------*
0