All pastes #192692 Raw Edit

Stuff

public text v1 · immutable
·published 2006-10-06 03:52 UTC
rendered paste body
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;
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);
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:1:0, '   ');
    WHILE (VALUECOUNTER <= 10) DO
        BEGIN
            BALANCE := BALANCE + (BALANCE/RATE);
            WRITE(OUT6, BALANCE:5:0, ' ');
            VALUECOUNTER := VALUECOUNTER + 1;
        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;
            LINECOUNTER := LINECOUNTER + 1;
        END;
END;

BEGIN
    OPENFILES;
    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.