includes structure and flow charts,
program description, test data, and full code listing.<br>
<a href="#ADD">10.1 Add line number program</a>
<br>
<a href="#REF">10.2 Refresh line numbers program</a>
<br>
<a href="#LEA">10.3 League table program</a>
<br>
<a href="#CAL">10.4 Calculate prime numbers program</a>
<br>
<a href="#CIN">10.5 Create INDEXED file program</a>
<br>
<a href="#RIN">10.6 Read INDEXED file program</a><br><br><br>
<br>
</font></p><p><font face="Arial">The sample code here was written while learning COBOL so they aren't particularly well
structured. Also, they are not the usual type of COBOL program that you would normally come
across. COBOL is more likely written for business applications such as payroll programs
or stock control etc... Hopefully they might give an indication of how COBOL works.
</font></p><p><font face="Arial"><a name="ADD"> </a><br>
<b><font face="Arial">10.1 Add line numbers program</font></b>
</font></p><p><font face="Arial">This program is designed to add line numbers to COBOL code that has been
typed into a text editor (e.g. Notepad) in the following format:<br>
MAIN-PARAGRAPH.
MOVE X TO Y
*the comment asterisk will be placed in position 7
/as will the page break solidus
IF Y > Z THEN
ADD Z TO X
MOVE X TO Z
ELSE DISPLAY 'The hypen for continuing a string
- 'onto the next line also goes into position 7'
END-IF
*all other text is placed from position 8
*so you still need to indent where required
STOP RUN.
*lastly, there is a limit of about
*70 characters per line (from position 8)
</pre>
</b>
</font>
</td></tr>
</tbody></table><font face="Arial"><br>
</font></center>
<font face="Arial">The text file containing COBOL code as above should be call named <b>input.txt</b>. Following execution,
the program will produce a new file called <b>output.cob</b> although it will still be a simply text file, but
can be compiled. The output.cob file for the above code would be:<br>
</font><center>
<table border="1">
<tbody><tr><td>
<font face="Courier New">
<b><pre> : 000010 PROCEDURE DIVISION. 000020 000030 MAIN-PARAGRAPH. 000040 MOVE X TO Y 000050*the comment asterisk will be placed in position 7 000060/as will the page break solidus 000070 IF Y > Z THEN 000080 ADD Z TO X 000090 MOVE X TO Z 000100 ELSE DISPLAY 'The hypen for continuing a string 000110- 'onto the next line also goes into position 7' 000120 END-IF 000130*all other text is placed from position 8 000140*so you still need to indent where required 000150 STOP RUN. 000160 000170*lastly, there is a limit of about 000180*70 characters per line (from position 8)
</pre>
</b>
</font>
</td></tr>
</tbody></table><font face="Arial"><br><br>
</font></center>
<form name="form1">
<p></p><center><font face="Arial"><font face="Courier New">
<textarea rows="25" cols="69" wrap="NO" name="txt">000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. LINE-NO-PROG. 000030 AUTHOR. TIM R P BROWN. 000040**************************************************** 000050* Program to add line numbers to typed code * 000060* Allows for comment asterisk, solidus, or hyphen ,* 000070* moving it into position 7. * 000080* * 000090**************************************************** 000100 000110 ENVIRONMENT DIVISION. 000120INPUT-OUTPUTSECTION. 000130 FILE-CONTROL. 000140SELECT IN-FILE ASSIGN TO 'INPUT.TXT' 000150 ORGANIZATION IS LINE SEQUENTIAL. 000160SELECT OUT-FILE ASSIGN TO 'OUTPUT.COB' 000170 ORGANIZATION IS LINE SEQUENTIAL. 000180 000185***************************************************** 000187 000190 DATA DIVISION. 000200 FILE SECTION. 000210 000220 FD IN-FILE. 00023001 LINE-CODE-IN. 00024003 CHAR-1 PIC X. 00025003CODE-LINE PIC X(110). 000260 000270 FD OUT-FILE. 00028001 LINE-CODE-OUT PIC X(120). 000290 000300 000310 WORKING-STORAGE SECTION. 000320 00033001 EOF-FLAG PIC X VALUE 'N'. 00034088 END-OF-FILE VALUE 'Y'. 000350 00036001 NUMBER-CODE. 00037003 L-NUM-CODE PIC 9(6) VALUE ZEROS. 00038003 B-SPACE PIC X VALUE SPACE. 00039003 L-CODE PIC X(100) VALUE SPACES. 000400 00041001 NUMBER-COMMENT. 00042003 L-NUM-COM PIC 9(6) VALUE ZEROS. 00043003 L-COMMENT PIC X(100) VALUE SPACES. 000440 00045001 LINE-NUMBER PIC 9(6) VALUE ZEROS. 000460 000470 000480***************************************************** 000490 000500 PROCEDURE DIVISION. 000510 000510 MAIN-PARA. 000520 OPEN INPUT IN-FILE 000530OUTPUT OUT-FILE 000535 000540 PERFORM UNTIL END-OF-FILE 000550 ADD 10 TO LINE-NUMBER 000560 READ IN-FILE AT END 000570 MOVE 'Y' TO EOF-FLAG 000580 NOT AT END 000590 IF (CHAR-1 = '*') 000600 OR (CHAR-1 = '/') 000610 OR (CHAR-1 = '-') THEN 000620 MOVE LINE-CODE-IN TO L-COMMENT 000630 MOVE LINE-NUMBER TO L-NUM-COM 000640 WRITE LINE-CODE-OUT FROM NUMBER-COMMENT 000660 ELSE 000670 MOVE LINE-CODE-IN TO L-CODE 000680 MOVE LINE-NUMBER TO L-NUM-CODE 000690 WRITE LINE-CODE-OUT FROM NUMBER-CODE 000720 END-IF 000730 END-READ 000740 INITIALIZE NUMBER-CODE NUMBER-COMMENT 000750 END-PERFORM 000760 000770 CLOSE IN-FILE OUT-FILE 000780 STOP RUN.
</textarea></font>
<input value="Highlight code" onclick="javascript:this.form.txt.focus();this.form.txt.select();" type="button">
</font></center>
<p><font face="Arial"><a name="REF"> </a><br>
<b><font face="Arial">10.2 Refresh line numbers program</font></b>
</font></p><p><font face="Arial">This program is designed to refresh COBOL code line numbers following editing that would
result in uneven line number increases (or even no line number at all) where lines have been
inserted or deleted.
</font></p><form name="form2">
<p></p><center><font face="Arial"><font face="Courier New">
<textarea rows="25" cols="70" wrap="yes" name="txt"> 00010 IDENTIFICATION DIVISION. 00020 PROGRAM-ID. RENUMBER-PROG. 00030 AUTHOR. TIMOTHY R P BROWN. 00040 00045****************************************************** 00050* Program to refresh numbers to typed code * 00060* Allows for comment all characters at position 7 * 00065****************************************************** 00070 00080 00090 ENVIRONMENT DIVISION. 00100INPUT-OUTPUTSECTION. 00110 FILE-CONTROL. 00120SELECT IN-FILE ASSIGN TO 'INPUT.COB' 00130 ORGANIZATION IS LINE SEQUENTIAL. 00140SELECT OUT-FILE ASSIGN TO 'RENUM.COB' 00150 ORGANIZATION IS LINE SEQUENTIAL. 00160 00170 DATA DIVISION. 00180 FILE SECTION. 00190 00200 FD IN-FILE. 0021001CODE-IN. 0023003 OLD-NUM PIC 9(6). 0024003 IN-CODE PIC X(150). 00250 00260 FD OUT-FILE. 0027001CODE-OUT PIC X(91). 00280 00290 00300 WORKING-STORAGE SECTION. 00310 0032001 EOF-FLAG PIC X VALUE 'N'. 0033088 END-OF-FILE VALUE 'Y'. 00340 00350 0036001 W-RENUMBER-CODE. 0037003 W-NUM PIC 9(6) VALUE ZEROS. 0038003 W-CODE PIC X(85) VALUE SPACES. 00390 0040001 LINE-NUMBER PIC 9(6) VALUE ZEROS. 00403 00407***************************************************** 00410 00420 PROCEDURE DIVISION. 00430 MAIN-PARA. 00440 OPEN INPUT IN-FILE 00450OUTPUT OUT-FILE 00460 00470 PERFORM UNTIL END-OF-FILE 00480 ADD 10 TO LINE-NUMBER 00490 READ IN-FILE 00495 AT END MOVE 'Y' TO EOF-FLAG 00500 NOT AT END 00510 MOVE IN-CODE TO W-CODE 00520 MOVE LINE-NUMBER TO W-NUM 00530 WRITE CODE-OUT FROM W-RENUMBER-CODE 00550 END-READ 00570 END-PERFORM 00580 00590 CLOSE IN-FILE OUT-FILE 00600 STOP RUN.
</textarea></font>
<input value="Highlight code" onclick="javascript:this.form.txt.focus();this.form.txt.select();" type="button">
</font></center>
<p><font face="Arial"><a name="LEA"> </a><br>
<b><font face="Arial">10.3 League table program</font></b>
</font></p><p><font face="Arial">This program is designed to update a football league table and print out a table
when any scores have been added. The diplay prompts the user to input the score from
a game. The points for each team involved are updated, as are the goals for, against and
difference. The program will search the data file and update the relevant team record.
When score input is complete, the program then sorts the data into a temporary file before
printing out an updated league table. An OUTPUT PROCEDURE could have been used
instead of producing a temporary sorted file.
</font></p><p><font face="Arial"> This program would probably benefit from using an indexed file for the team records rather
than searching the sequentail file, as done here.
</font></p><p><font face="Arial"> This code is written for the 1999-2000 season of the English FA Premiership.
The team data is stored on a sequential file in alphabetical order. If you wish to download
a copy of this data file (with mostly fictional scores etc..) <a href="http://www.404i.com/cobol/dlfiles/footprog.zip">
click here</a> and a better program description <a href="http://www.404i.com/cobol/dlfiles/foot-prog-desc.html">click here</a>.
</font></p><p></p><center><font face="Arial"><font face="Courier New">
</font></font><form name="form3">
<textarea rows="25" cols="70" wrap="no" name="txt">000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. TABLE-PROG. 000030 AUTHOR. TIMOTHY R P BROWN. 000035 000037***************************************************** 000040* Program to update a football league table * 000045* and output a new updated table * 000046* Based on English Premiership season 1999-2000 * 000047***************************************************** 000048 000050 ENVIRONMENT DIVISION. 000060INPUT-OUTPUTSECTION. 000070 FILE-CONTROL. 000080SELECT TEAM-REC-IN ASSIGN TO "INPUT.REC" 000090 ORGANIZATION IS SEQUENTIAL. 000100SELECT WORK-FILE ASSIGN TO SORTWK01. 000105* for MicroFocus compiler 000107* replace SORTWK01 with 'WORKFILE.DAT' 000110SELECT SORT-OUT ASSIGN TO "SORTED.REC" 000120 ORGANIZATION IS SEQUENTIAL. 000130SELECT PRINT-FILE ASSIGN TO PRINTER. 000140 000150 000160 DATA DIVISION. 000170 FILE SECTION. 000180 FD TEAM-REC-IN. 00019001 TEAM-REC. 00020003 TEAM-CODE PIC XXX. 00021003 TEAM-NAME PIC X(20). 00022003 PLAYED PIC 99. 00023003 GOALS-FOR PIC 99. 00024003 GOALS-AGST PIC 99. 00025003 G-WON PIC 99. 00026003 G-LOST PIC 99. 00027003 G-DRAWN PIC 99. 00028003 GOAL-DIFF PIC S99 SIGN LEADING SEPARATE. 00029003 POINTS PIC 99. 000300 000310 SD WORK-FILE. 00032001 WORK-REC. 00033003 TEAM-CODE-KEY PIC XXX. 00034003 PIC X(22). 00035003 GF-KEY PIC 99. 00036003 PIC X(8). 00037003 GD-KEY PIC S99 SIGN LEADING SEPARATE. 00038003 POINTS-KEY PIC 99. 000390 000400 000410 FD PRINT-FILE. 00042001 TEXT-OUT PIC X(60). 000430 000440 FD SORT-OUT. 00045001 TEAM-REC-OUT. 00046003 STEAM-CODE PIC XXX. 00047003 STEAM-NAME PIC X(20). 00048003 SPLAYED PIC 99. 00049003 SGOALS-FOR PIC 99. 00050003 SGOALS-AGST PIC 99. 00051003 SG-WON PIC 99. 00052003 SG-LOST PIC 99. 00053003 SG-DRAWN PIC 99. 00054003 SGOAL-DIFF PIC S999. 00055003 SPOINTS PIC 99. 000560 000570 000580 000590 000600 WORKING-STORAGE SECTION. 000610 00062001 M PIC 99. 00063001 REAL-GOAL-DIFF PIC S999. 000640 00065001 W-DATE. 00066003 W-YEAR PIC 99. 00067003 W-MON PIC 99. 00068003 W-DAY PIC 99. 000690 000700 00071001 SCORE. 00072003 W-H-SCR PIC 9. 00073003 PIC X VALUE "-". 00074003 W-A-SCR PIC 9. 000750 00076001 P-TITLE. 00077003 PIC X(5) VALUE SPACES. 00078003 TAB-TITLE PIC X(34) 000790 VALUE "The English FA Premier League". 000800 00081003 P-DATE. 00082005 P-DAY PIC XX. 00083005 PIC X VALUE "/". 00084005 P-MON PIC XX. 00085005 PIC X VALUE "/". 00086005 P-YEAR PIC XX. 000870 00088001 P-UNDERLINE PIC X(45) VALUE ALL "-". 00089001 P-GAP PIC X VALUE SPACE. 000900 00091001 P-HEADER. 00092003 PIC X(6) VALUE SPACES. 00093003 TAB-TEAM PIC X(4) VALUE "TEAM". 00094003 PIC X(11) VALUE SPACES. 00095003 PLY PIC X(5) VALUE "Playd". 00096003 PIC X VALUE SPACE. 00097003 WO PIC XXX VALUE "Won". 00098003 PIC X VALUE SPACE. 00099003 DR PIC XXXX VALUE "Drwn". 00100003 PIC X VALUE SPACE. 00101003 LO PIC XXXX VALUE "Lost". 00102003 PIC X VALUE SPACE. 00103003 GF PIC XXX VALUE "For". 00104003 PIC X VALUE SPACE. 00105003 GA PIC X(5) VALUE "Agnst". 00106003 PIC X VALUE SPACE. 00107003 GD PIC XX VALUE "GD". 00108003 PIC X VALUE SPACE. 00109003 PTS PIC XXX VALUE "PTS". 001100 00111001 W-TEXT-OUT. 00112003 P-TAB-POS PIC 99. 00113003 PIC X VALUE SPACE. 00114003 P-TEAM PIC X(20). 00115003 P-PLAYED PIC 99. 00116003 PIC XXX VALUE SPACES. 00117003 P-G-WON PIC Z9. 00118003 PIC XX VALUE SPACES. 00119003 P-G-DRAWN PIC Z9. 00120003 PIC XXX VALUE SPACES. 00121003 P-G-LOST PIC Z9. 00122003 PIC XXX VALUE SPACES. 00123003 P-GOALS-FOR PIC 99. 00124003 PIC XX VALUE SPACES. 00125003 P-GOALS-AGST PIC 99. 00126003 PIC XX VALUE SPACES. 00127003 P-GOAL-DIFF PIC ZZ9. 00128003 PIC XX VALUE SPACES. 00129003 P-POINTS PIC Z9. 001300 001310 00132001 SCORE-TAB. 00133003 TAB-SCORE PIC 9 OCCURS 2. 00134001 T-POINTS-TAB. 00135003 T-POINTS PIC 99 OCCURS 20. 00136001 POINTS-TAB. 00137003 TAB-POINTS PIC 9 OCCURS 2. 00138001 T-G-FOR-TAB. 00139003 T-G-FOR PIC 99 OCCURS 20. 00140001 T-G-AGST-TAB. 00141003 T-G-AGST PIC 99 OCCURS 20. 00142001 T-G-DIFF-TAB. 00143003 T-G-DIFF PIC 99 OCCURS 20. 00144001 TAB-TEAM-NAME. 00145003 TEAM PIC XXX OCCURS 2. 001460 001470 00148001 V-TEAM-FLAG PIC X. 00149088 V-TEAM VALUE "Y". 00150001 V-SCORE-FLAG PIC X. 00151088 V-SCORE VALUE "Y". 00152001 SORT-ONLY-FLAG PIC X. 00153088 SORT-ONLY VALUE "Y". 001540 001550 00156001 ENDING-KEY PIC X VALUE SPACE. 00157001 SWITCH PIC 9. 00158001 EOF-FLAG PIC X VALUE "N". 00159001 COUNTER PIC 99. 00160001 W-GOAL-DIFF PIC 99. 00161001 LAST-SCORE PIC X. 00162001 N PIC 99. 001630 001640***************************************************** 001650 001660 PROCEDURE DIVISION. 001670 001680 MAIN-PARAGRAPH. 001690 001700 PERFORM DISPLAY-INSTRUCTIONS 001710 PERFORM INPUT-DATA 001720 PERFORM SORT-TABLE 001730 PERFORM PRINT-TABLE 001740 DISPLAY " Type Q or X to exit program." 001750 ACCEPT ENDING-KEY 001760 STOP RUN. 001770******************************************************************* 001780 DISPLAY-INSTRUCTIONS. 001790 DISPLAY " Instructions" 001800 DISPLAY " " 001810 DISPLAY " Following prompts, enter the first " 001820 DISPLAY "3 letters of the team in lower case. " 001830 DISPLAY " Then enter the score (home team score first)." 001840 DISPLAY " To perform SORT ONLY function, type 'xxx' " 001850 DISPLAY "at both team prompts. ". 001860******************************************************************* 001870INPUT-DATA. 001880 MOVE "n" TO LAST-SCORE 001890 MOVE "N" TO SORT-ONLY-FLAG 001900 PERFORM UNTIL LAST-SCORE = "y" OR "Y" 001910 MOVE "N" TO V-SCORE-FLAG 001920 MOVE "N" TO V-TEAM-FLAG 001930 PERFORM UNTIL V-TEAM 001940 DISPLAY "INPUT HOME TEAM >" 001950 ACCEPT TEAM (1) 001960 DISPLAY "INPUT AWAY TEAM >" 001970 ACCEPT TEAM (2) 001980 PERFORM VAL-TEAM 001990 END-PERFORM 002000 IF TEAM (1) = "XXX" OR "xxx" THEN 002010 MOVE "Y" TO LAST-SCORE 002020 PERFORM SORT-TABLE 002030 ELSE 002040 PERFORM UNTIL V-SCORE or SORT-ONLY 002050 DISPLAY "INPUT RESULT AS 'X-Y'" 002060 ACCEPT SCORE 002070 MOVE W-H-SCR TO TAB-SCORE (1) 002080 MOVE W-A-SCR TO TAB-SCORE (2) 002090 PERFORM VAL-SCORE 002100 END-PERFORM 002110 DISPLAY "LAST RESULT? Y/N" 002120 ACCEPT LAST-SCORE 002130 PERFORM CALC-POINTS 002140 PERFORM UPDATE-RECORD 002150 END-IF 002160 END-PERFORM. 002170******************************************************************* 002180 VAL-TEAM. 002190 PERFORM VARYING COUNTER FROM 1 BY 1 002200 UNTIL COUNTER > 2 002210 002220 EVALUATE TRUE 002230 WHEN TEAM (COUNTER) = "ars" or "ast" or "bra" or 002240"che" or "cov" or "der" or 002250"eve" or "lee" or "lei" or 002260"liv" or "man" or "mid" or 002270"new" or "she" or "sou" or 002280"sun" or "tot" or "wat" or 002290"wes" or "wim" 002300 MOVE "Y" TO V-TEAM-FLAG 002310 WHEN OTHER MOVE "N" TO V-TEAM-FLAG 002320 END-EVALUATE 002340 END-PERFORM 002350 IF NOT V-TEAM THEN DISPLAY 002360"INVALID TEAM CODE ENTERED-" 002370"RE-ENTER BOTH TEAM CODES AGAIN." 002380 END-IF. 002390******************************************************************* 002400 VAL-SCORE. 002410 IF ( W-H-SCR > 9 ) OR ( W-A-SCR > 9 ) 002420 THEN PERFORM BIG-SCORE 002430 END-IF 002440 IF ( W-H-SCR NOT NUMERIC) OR ( W-H-SCR NOT NUMERIC) 002450 THEN MOVE "N" TO V-SCORE-FLAG 002460 ELSE MOVE "Y" TO V-SCORE-FLAG 002470 END-IF 002480 IF NOT V-SCORE THEN 002490 DISPLAY "INVALID SCORE ENTRY. PLEASE RE-ENTER SCORE." 002500 END-IF. 002510******************************************************************* 002520BIG-SCORE. 002525* Putting a STOP RUN in this paragraph is probably 002527* very bad programming practise. Better logic could be used! 002530 DISPLAY "A team has scored more than 10 goals. " 002540 DISPLAY "This program will terminate now. " 002550 DISPLAY "Following this, the record in Input.rec " 002560 DISPLAY "will have to be ammended manually" 002580 DISPLAY " Following this perform SORT ONLY procedure." 002600 ACCEPT ENDING-KEY 002610 STOP RUN. 002620 002630******************************************************************* 002640 CALC-POINTS. 002650 IF TAB-SCORE (1) > TAB-SCORE (2) THEN 002660 MOVE 3 TO TAB-POINTS (1) 002670 ELSE 002680 IF TAB-SCORE (2) > TAB-SCORE (1) THEN 002690 ADD 3 TO TAB-POINTS (2) 002700 ELSE 002710 MOVE 1 TO TAB-POINTS (1) 002720 MOVE 1 TO TAB-POINTS (2) 002730 END-IF 002740 END-IF. 002750 002760******************************************************************* 002770 UPDATE-RECORD. 002790 MOVE 1 TO N 002800 MOVE 1 TO M 002810 OPEN I-O TEAM-REC-IN 002820 PERFORM UNTIL M > 20 002830 READ TEAM-REC-IN 002840 AT END 002850 DISPLAY TEAM (1) " has details ammended" 002860 NOT AT END 002870 IF TEAM (1) = TEAM-CODE THEN 002880 PERFORM ADJUST-DATA 002890 002900 END-IF 002910 ADD 1 TO M 002920 END-READ 002930 END-PERFORM 002940 002950 CLOSE TEAM-REC-IN 002955 002970 MOVE 2 TO N 002980 MOVE 1 TO M 002980 002990 OPEN I-O TEAM-REC-IN 003000 PERFORM UNTIL M > 20 003010 READ TEAM-REC-IN 003020 AT END 003030 DISPLAY TEAM (2) " has details ammended" 003040 NOT AT END 003050 IF TEAM (2) = TEAM-CODE THEN 003060 PERFORM ADJUST-DATA 003080 END-IF 003090 ADD 1 TO M 003100 END-READ 003110 END-PERFORM 003120 CLOSE TEAM-REC-IN 003130 DISPLAY "Table has been updated". 003140******************************************************************* 003150 ADJUST-DATA. 003160 IF N = 1 THEN MOVE 2 TO SWITCH 003170 ELSE MOVE 1 TO SWITCH 003180 END-IF 003190 ADD TAB-SCORE (N) TO GOALS-FOR 003200 ADD TAB-SCORE (SWITCH) TO GOALS-AGST 003210 SUBTRACT GOALS-AGST FROM GOALS-FOR GIVING GOAL-DIFF 003220 ADD TAB-POINTS (N) TO POINTS 003230 ADD 1 TO PLAYED 003240 EVALUATE TAB-POINTS (N) 003250 WHEN 3 ADD 1 TO G-WON 003260 WHEN ZERO ADD 1 TO G-LOST 003270 WHEN 1 ADD 1 TO G-DRAWN 003280 END-EVALUATE 003290 REWRITE TEAM-REC. 003300******************************************************************* 003310 SORT-TABLE. 003320 SORT WORK-FILE 003330 ON DESCENDING KEY POINTS-KEY GD-KEY GF-KEY 003340 USING TEAM-REC-IN 003350 GIVING SORT-OUT. 003360 003370******************************************************************* 003380 PRINT-TABLE. 003390 ACCEPT W-DATE FROM DATE 003400 MOVE W-DAY TO P-DAY 003410 MOVE W-MON TO P-MON 003420 MOVE W-YEAR TO P-YEAR 003430 003440 OPEN INPUT SORT-OUT 003450OUTPUT PRINT-FILE 003460 003470 WRITE TEXT-OUT FROM P-TITLE AFTER 1 LINE 003480 WRITE TEXT-OUT FROM P-UNDERLINE AFTER 1 LINE 003490 WRITE TEXT-OUT FROM P-GAP AFTER 1 LINE 003500 WRITE TEXT-OUT FROM P-HEADER AFTER 1 LINE 003510 MOVE 1 TO N 003520 PERFORM UNTIL N > 20 003530 READ SORT-OUT 003540 AT END MOVE "Y" TO EOF-FLAG 003550 NOT AT END 003560 MOVE N TO P-TAB-POS 003570 MOVE STEAM-NAME TO P-TEAM 003580 MOVE SPLAYED TO P-PLAYED 003590 MOVE SG-WON TO P-G-WON 003600 MOVE SG-LOST TO P-G-LOST 003610 MOVE SG-DRAWN TO P-G-DRAWN 003620 MOVE SGOALS-FOR TO P-GOALS-FOR 003630 MOVE SGOALS-AGST TO P-GOALS-AGST 003650 MOVE SGOAL-DIFF TO P-GOAL-DIFF 003660 MOVE SPOINTS TO P-POINTS 003670 003680 WRITE TEXT-OUT FROM W-TEXT-OUT 003700 END-READ 003710 ADD 1 TO N 003720 END-PERFORM 003730 CLOSE SORT-OUT PRINT-FILE 003740 DISPLAY "Table is now written to the printer". 003750*******************************************************************
</textarea>
<p><font face="Arial"><a name="CAL"> </a><br>
<b><font face="Arial">10.4 Calculate prime numbers program</font></b>
</font></p><p><font face="Arial">This is a little program that calulates prime numbers. You are prompted to enter
a number (up to 1999) and the program will produce a file, 'PRIME-NO.TXT,
which contains a table of all prime numbers up to the value entered.</font></p>
</font></font><form name="form4">
<textarea rows="25" cols="70" wrap="no" name="txt">000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. PRIME-NO-PROG. 000030 AUTHOR. TIMOTHY R P BROWN. 000040 000050****************************************** 000060* PROGRAM TO CALCULATE PRIME NUMBERS * 000070****************************************** 000080 000090 ENVIRONMENT DIVISION. 000100INPUT-OUTPUTSECTION. 000110 FILE-CONTROL. 000120 000130SELECT OUT-FILE ASSIGN TO 'PRIME-NO.TXT' 000140 ORGANIZATION IS LINE SEQUENTIAL. 000150******************************************** 000160 DATA DIVISION. 000170 FILE SECTION. 000180 000190 FD OUT-FILE. 00020001 NO-OUT PIC X(80). 000210******************************************** 000220 WORKING-STORAGE SECTION. 000230 00024001 EVEN-FLAG PIC X. 00025088 NUM-EVEN VALUE 'Y'. 00026001 PRIME-FLAG PIC X . 00027088 IS-PRIME VALUE 'Y'. 000280 00029001 TOP-VALUE PIC 9(7) VALUE ZERO. 000300 00031001 COUNTERS. 00032003 Y-COUNT PIC 9(6) OCCURS 1000. 000330 00034001 CALC-NO PIC 9(6) VALUE ZERO. 000350 00036001 SUBS. 00037003 X-SUB PIC 9(6) VALUE 3. 00038001 PRINT-SUBS. 00039003 P-COUNT-X PIC 9(6) VALUE 1. 000400 00041001 A PIC 9(6) VALUE ZERO. 00042001 B PIC 9(6) VALUE ZERO. 00043001 C PIC 9(6) VALUE ZERO. 00044001 D PIC 9(6) VALUE ZERO. 00045001 Z PIC 9(6) VALUE ZERO. 00046001 PRIME-NO-COUNT PIC 9(6) VALUE 2. 000465 00047001 PRINT-LINE. 00048003 P-NUM1 PIC Z(5)9 VALUE ZERO. 00049003 P-NUM2 PIC Z(5)9 VALUE ZERO. 00050003 P-NUM3 PIC Z(5)9 VALUE ZERO. 00051003 P-NUM4 PIC Z(5)9 VALUE ZERO. 00052003 P-NUM5 PIC Z(5)9 VALUE ZERO. 000530 00054001 EXIT-KEY PIC X VALUE SPACE. 000545 000550******************************************************* 000560 PROCEDURE DIVISION. 000570 MAIN-PARA. 000580 OPEN OUTPUT OUT-FILE 000590 DISPLAY 'ENTER VALUE TO WHICH PRIME NUMBERS ' 000600 DISPLAY 'ARE TO BE CALCULATED BETWEEN 1 AND 999,999' 000602 MOVE 1 TO Y-COUNT (1) 000605 MOVE 2 TO Y-COUNT (2) 000610 000620*ENTER VALUE 000630 PERFORM UNTIL TOP-VALUE > 0 000640 ACCEPT TOP-VALUE 000650 END-PERFORM 000660 000670*ZEROISE TABLE 000680 MOVE ZEROS TO COUNTERS 000690 000700*DETERMINE PRIME NUMBERS AND PLACE IN TABLE 000710 000720 PERFORM VARYING CALC-NO FROM 3 BY 1 000730 UNTIL CALC-NO > TOP-VALUE 000740 DISPLAY CALC-NO 000750 MOVE 1 TO C 000760 MOVE 'N' TO PRIME-FLAG 000770 000780*IS NUMBER EVEN (BUT NOT 2)? 000790 000800 DIVIDE CALC-NO BY 2 GIVING A REMAINDER Z 000830 IF Z = 0 THEN MOVE 'Y' TO EVEN-FLAG 000840 ELSE MOVE 'N' TO EVEN-FLAG 000850 END-IF 000860 000865********************************************************** 000870*DIVIDE EACH ODD NUMBER BY NUMBERS UP TO HALF THE CALC-NO 000880*LOOP EXITED WHEN A NUMBER DIVIDES IT WITH NO REMAINDER 000890*OR WHEN ALL NUMBERS CHECKED 000895********************************************************** 000900 IF NOT NUM-EVEN THEN 000910 PERFORM VARYING D FROM 3 BY 1 000920 UNTIL (C = 0) OR (D > ((CALC-NO + 1) / 2)) 000930 DIVIDE CALC-NO BY D GIVING A REMAINDER C 000940 END-PERFORM 000950 END-IF 000960 000970 IF C = 0 THEN MOVE 'N' TO PRIME-FLAG 000980 ELSE MOVE 'Y' TO PRIME-FLAG 000990 END-IF 001000 001010*WHEN PRIME NUMBER DEFINED, MOVE IT INTO TABLE 001020 IF IS-PRIME THEN 001030 MOVE CALC-NO TO Y-COUNT (X-SUB) 001040 ADD 1 TO X-SUB PRIME-NO-COUNT 001050 END-IF 001060 END-PERFORM 001070 001080*STORE THE FINAL VALUE OF X-SUB BEFORE RE-USING IT 001090 MOVE X-SUB TO P-COUNT-X 001100 MOVE ZERO TO X-SUB 001110*************************************************** 001120*WRITE TABLE 001130 PERFORM VARYING X-SUB FROM 1 BY 5 001140 UNTIL X-SUB > P-COUNT-X 001150 MOVE Y-COUNT (X-SUB) TO P-NUM1 001160 MOVE Y-COUNT (X-SUB + 1) TO P-NUM2 001170 MOVE Y-COUNT (X-SUB + 2) TO P-NUM3 001180 MOVE Y-COUNT (X-SUB + 3) TO P-NUM4 001190 MOVE Y-COUNT (X-SUB + 4) TO P-NUM5 001200 WRITE NO-OUT FROM PRINT-LINE AFTER 2 LINE 001230 END-PERFORM 001240 001250 DISPLAY 'CALCULATIONS COMPLETE - ' PRIME-NO-COUNT 001260' PRIME NUMBERS CALCULATED' 001270 CLOSE OUT-FILE 001280 STOP RUN.
</textarea>
<font face="Arial"><input value="Highlight code" onclick="javascript:this.form.txt.focus();this.form.txt.select();" type="button">
</font></form></center>
<p><font face="Arial"><a name="CIN"> </a><br>
<b><font face="Arial">10.5 Create INDEXED file program</font></b>
</font></p><p><font face="Arial"><b></b>
</font></p><p><font face="Arial">This program takes a line sequential record file and converts it to an indexed file.
The records must contain a unique key field that is in strict ascending order. The input
file (from a text editor) should be called 'LINESEQFILE.TXT'. The program output will be 'INDEXEDFILE.DAT'.
You can change these in the ENVIRONMENT DIVISION if you want.
</font></p><p></p><center><font face="Arial"><font face="Courier New">
</font></font><form name="form5">
<textarea rows="25" cols="70" wrap="yes" name="txt">000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. CREATE-INDEX-PROG. 000030 AUTHOR. TIMOTHY R P BROWN. 000040 000045***************************************************** 000050* Program to convert a sorted (ascending) * 000060* line sequential file ('LINESEQFILE.TXT') to * 000070* an indexed file (output'INDEXEDFILE.DAT'). * 000075***************************************************** 000080 000090 ENVIRONMENT DIVISION. 000100INPUT-OUTPUTSECTION. 000110 FILE-CONTROL. 000120 000130SELECT OUT-FILE ASSIGN TO 'INDEXEDFILE.DAT' 000140 ORGANIZATION IS INDEXED 000150 ACCESS MODE IS SEQUENTIAL 000160 RECORD KEY IS INDEX-KEY. 000170SELECT IN-FILE ASSIGN TO 'LINESEQFILE.TXT' 000180 ORGANIZATION IS LINE SEQUENTIAL. 000190 000200 DATA DIVISION. 000210 FILE SECTION. 000220 000230 FD OUT-FILE. 00024001 MAKE-OUT. 00025003 INDEX-KEY PIC X(6). 00026003 PIC X(120). 000270 000280 FD IN-FILE. 00029001 IN-REC PIC X(126). 000300 000310 000320 WORKING-STORAGE SECTION. 000340 00035001 EOF-FLAG PIC X VALUE 'N'. 00036088 END-OF-FILE VALUE 'Y'. 000370 000375***************************************************** 000377 000380 PROCEDURE DIVISION. 000390 MAIN-PARA. 000400 OPEN INPUT IN-FILE 000410OUTPUT OUT-FILE 000420 000430 PERFORM UNTIL END-OF-FILE 000440 READ IN-FILE 000450 AT END MOVE 'Y' TO EOF-FLAG 000460 NOT AT END 000470 MOVE IN-REC TO MAKE-OUT 000480 WRITE MAKE-OUT 000490 END-READ 000500 END-PERFORM 000510 000520 CLOSE OUT-FILE IN-FILE 000530 STOP RUN.
</textarea>
<font face="Arial"><input value="Highlight code" onclick="javascript:this.form.txt.focus();this.form.txt.select();" type="button">
</font></form></center>
<p>
<font face="Arial"><a name="RIN"> </a><br>
<b><font face="Arial">10.6 Read INDEXED file program</font></b>
</font></p><p><font face="Arial"><b></b>
</font></p><p>
<font face="Arial">This program allows you to view the contents of an indexed file by generating a
line sequential file of the original indexed file. If you tried to open an indexed file
with a text editor you would just see gibberish. The input file for this program is 'INDEXEDFILE.DAT' giving an output text file called READFILE.TXT. Again, you can change these
in the ENVIRONMENT DIVISION if you wish.
</font></p><p></p><center><font face="Arial"><font face="Courier New">
</font></font><form name="form6">
<textarea rows="25" cols="70" wrap="yes" name="txt">000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. INDEXED-TO-READ-PROG. 000030 AUTHOR. TIMOTHY R P BROWN. 000040 000045***************************************************** 000050* Program to convert indexed file 'INDEXEDFILE.DAT' * 000060* to line sequential (output called 'READFILE.TXT') * 000070* for viewing with text editor. * 000075***************************************************** 000080 000090 ENVIRONMENT DIVISION. 000100INPUT-OUTPUTSECTION. 000110 FILE-CONTROL. 000120 000130SELECT IN-FILE ASSIGN TO 'INDEXEDFILE.DAT' 000140 ORGANIZATION IS INDEXED 000150 ACCESS MODE IS DYNAMIC 000160 RECORD KEY IS S-KEY-NO. 000170SELECT OUT-FILE ASSIGN TO 'READFILE.TXT' 000180 ORGANIZATION IS LINE SEQUENTIAL. 000190 000200 DATA DIVISION. 000210 FILE SECTION. 000220 000230 FD IN-FILE. 00024001 IN-REC. 00025003 S-KEY-NO PIC X(6). 00026003 PIC X(43). 000270 000280 FD OUT-FILE. 00029001 OUT-REC PIC X(49). 000300 000310 000320 WORKING-STORAGE SECTION. 000340 00035001 EOF-FLAG PIC X VALUE 'N'. 00036088 END-OF-FILE VALUE 'Y'. 000370 000373***************************************************** 000377 000380 PROCEDURE DIVISION. 000390 MAIN-PARA. 000400 OPEN INPUT IN-FILE 000410OUTPUT OUT-FILE 000420 000430 PERFORM UNTIL END-OF-FILE 000440 READ IN-FILE NEXT 000450 AT END MOVE 'Y' TO EOF-FLAG 000460 NOT AT END 000470 WRITE OUT-REC FROM IN-REC 000480 END-READ 000490 END-PERFORM 000500 000510 CLOSE IN-FILE OUT-FILE 000520 STOP RUN.
</textarea>
<font face="Arial"><input value="Highlight code" onclick="javascript:this.form.txt.focus();this.form.txt.select();" type="button">
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.