PROGRAM INTREST(DATA6, OUT6);
(*********************************
AARON EIDELSON
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.