PROGRAM INTREST(DATA6, OUT6); (********************************* CHAPTER 6 ASSIGNMENT OCTOBER 16, 2006 THIS PROGRAM GENERATES TABLES OF COMPOUND INTRESTS BASED ON DATA READ FROM A FILE. ********************************** LEVEL 0 OPEN FILES WHILE MORE DATA DO READ BALANCE, RATE PRODUCE TABLE SKIP LINES LEVEL 1 OPEN FILES OPEN DATA6 FOR INPUT OPEN OUT6 FOR OUTPUT PRODUCE TABLE PRODUCE HEADING SET LINE COUNTER TO 0 WHILE MORE LINES DO PRODUCE LINE ADD 1 TO LINE COUNTER ADD 100 TO BALANCE LEVEL 2 PRODUCE LINE WRITE BALANCE, RATE SET VALUE COUNTER TO 0 WILE VALUE COUNTER < 10 DO BALANCE = BALANCE + BALANCE / RATE WRITE BALANCE ADD 1 TO VALUE COUNTER WRITELN ********************************) VAR DATA6, OUT6: TEXT; BALANCE, RATE: REAL; (*PREPARES FILES FOR I/O*) PROCEDURE OPENFILES(VAR DATA6, OUT6: TEXT); BEGIN RESET(DATA6); REWRITE(OUT6); END; (*PRODUCES THE STATIC TABLE DATA*) PROCEDURE TABLEHEADING; BEGIN WRITELN(OUT6, '************************** YEAR **************************'); WRITELN(OUT6, 'BALANCE RATE(%) 1 2 3 4 5 6 7 8 9 10'); END; (*USED TO READ DATA FROM THE FILE DATA6.DAT*) PROCEDURE GETDATA(VAR BALANCE, RATE: REAL); BEGIN READ(DATA6, BALANCE); READ(DATA6, RATE); RATE := (RATE*100) END; (*PRODUCES LINE BASED ON BALANCE AND RATE*) PROCEDURE PRODUCELINE(BALANCE, RATE: REAL); VAR VALUECOUNTER: INTEGER; BEGIN VALUECOUNTER := 1; WRITE(OUT6 ,' ', BALANCE:1:0, ' ', (RATE*100):1:0, ' '); WHILE (VALUECOUNTER <= 10) DO BEGIN BALANCE := BALANCE + (BALANCE/RATE); WRITE(OUT6, BALANCE:1:0, ' '); END; WRITELN(OUT6); END; (*PRODUCES TABLES BY CALLING THE 'PRODUCELINE' FUNCTION*) PROCEDURE PRODUCETABLE(BALANCE, RATE: REAL); VAR LINECOUNTER: INTEGER; BEGIN LINECOUNTER := 1; WHILE (LINECOUNTER <= 5) DO BEGIN PRODUCELINE(BALANCE, RATE); BALANCE := BALANCE + 100; END; END; BEGIN OPENFILES(DATA6, OUT6); WHILE EOLN(DATA6) DO READLN(DATA6); WHILE NOT EOF(DATA6) DO BEGIN GETDATA(BALANCE, RATE); TABLEHEADING; PRODUCETABLE(BALANCE, RATE); WRITELN(OUT6); WRITELN(OUT6); END; END.