Compucolor.org – Virtual Media

Listing of file='MORGAG.BAS;01' on disk='vmedia/personal_finance_vol_1-sector.ccvf'

100 TM= 256* PEEK (32941)+ PEEK (32940)
110 Z= TM+ 8:AD= 33283:GOSUB 160:TM= TM+ 1
120 X= 0:Y= 9:H= 20:W= 64:C= 1
130 Z= 28672+ 128* Y+ X+ X:AD= TM+ 126:GOSUB 160
140 Z= 128- W- W:AD= TM+ 149:GOSUB 160:POKE TM+ 129,H- 1
150 POKE TM+ 131,W* (C+ 1):POKE TM+ 143,35* (1- C):GOTO 170
160 ZZ= INT (Z/ 256):POKE AD,Z- 256* ZZ:POKE AD+ 1,ZZ:RETURN
170 PLOT 12,14,22
180 DEF FN C(I)= INT (I* 100- INT (I)* 100+ .5)/ 100
190 DEF FN I(I)= 16- LEN (STR$ (INT (I)))- 3* Z1
200 DEF FN J(I)= 29- LEN (STR$ (INT (I)))+ Z1
210 DEF FN K(I)= 46- LEN (STR$ (INT (I)))+ 2* Z1
220 DIM DATE$(12)
230 DATA "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"
240 FOR I= 1TO 12:READ DATE$(I):NEXT
250 PLOT 13,3,20,0:PRINT "*  LOAN ANALYSIS  *"
260 PRINT
270 L= 0:SC= 8
280 PRINT "ENTER NUMBER OF DESIRED VALUE:"
290 PRINT "1 - RATE"
300 PRINT "2 - LIFE"
310 PRINT "3 - AMOUNT BORROWED"
320 PRINT "4 - MONTHLY PAYMENT"
330 PLOT 3,0,8,11:PRINT "YOUR CHOICE:";
340 INPUT "";Z$:Z= VAL (Z$)
350 PRINT :IF Z< 1OR Z> 4THEN 330
360 IF Z= 1THEN 400
370 INPUT "NOMINAL RATE IN PERCENT: ";R:IF R= 0THEN 370
380 PRINT :R= R/ 100
390 IF Z= 2THEN 420
400 INPUT "MORTGAGE LIFE - YEARS, MONTHS: ";Y,M:PRINT
410 IF Z= 3THEN 440
420 INPUT "AMOUNT TO BE BORROWED: ";A:PRINT
430 IF Z= 4THEN 450
440 INPUT "AMOUNT OF A MONTHLY PAYMENT: ";P:PRINT
450 INPUT "STARTING DATE OF LOAN (E.G. 8,1979): ";T1,T2:PRINT
460 IF Z= 2THEN 480
470 INPUT "TABLE LENGTH (YEARS): ";T3:PRINT
480 INPUT "ENTER 1 - ANNUAL OR 2 - MONTHLY SUMMARY: ";Z1:Z1= ABS (Z1- 2)
490 PLOT 18
500 PRINT :PLOT 3,64,0
510 IF Z= 2THEN 550
520 GOSUB 2220
530 N= 12* Y+ M
540 IF Z= 1THEN 790
550 R= R/ 12
560 IF Z= 3THEN 710
570 IF Z= 4THEN 760
580 IF (A* R/ P)< 1THEN 620
590 PLOT 3,0,21
600 PRINT "THE FIRST MONTH'S PMT. CHARGE WILL NOT COVER ITS INTEREST"
610 PLOT 3,0,23:GOTO 2190
620 N= - (LOG (1- (A* R)/ P))/ LOG (1+ R)
630 N= INT (N)+ 1
640 Y= INT (N/ 12)
650 M= N- 12* Y
660 IF Z= 2THEN T3= Y
670 IF Z= 2AND M> 0THEN T3= T3+ 1
680 IF Z< > 2THEN 700
690 GOSUB 2220
700 GOTO 920
710 A= (P* (1- 1/ ((1+ R)^ N)))/ R
720 A= (A* 100+ 5)/ 10
730 A= INT (A)
740 A= A/ 10
750 GOTO 920
760 P= A* R* (1+ R)^ N/ ((1+ R)^ N- 1)
770 GOSUB 2360
780 GOTO 920
790 R= (P* N/ A- 1)/ 12
800 R1= R
810 IF R> 0THEN 870
820 PLOT 3,0,21
830 PRINT "RATE IS NEGATIVE OR ZERO"
840 PLOT 3,0,23:GOTO 2190
850 R= R- 2* R1
860 R= R+ R1
870 C= P* (1/ (R/ ((1+ R)^ N- 1)+ R))
880 IF ABS (C- A)< .01THEN 920
890 R1= R1/ 2
900 IF C- A< 0THEN 850
910 GOTO 860
920 PLOT 3,0,20:PRINT
930 IF 12* P> (R* A* 12+ 1)THEN 980
940 PRINT "YOUR FIRST YEAR'S PAYMENTS ARE"12* P
950 PRINT "THE FIRST YEAR'S INTEREST IS"R* A* 12
960 PRINT "THEREFORE, THE LIFE OF THE MORTGAGE IS UNDEFINED"
970 PLOT 3,0,25:GOTO 2190
980 PLOT 14
990 FOR JJ= 2TO 30STEP 2:PLOT 3,0,JJ,11:NEXT JJ
1000 PLOT 3,0,2,15
1010 GOSUB 1020:GOTO 1030
1020 FOR JJ= 1TO 63:PRINT "*";:NEXT :PRINT "*":RETURN
1030 PRINT
1040 PRINT "                        TERMS OF LOAN"
1050 PRINT
1060 PRINT "    NOMINAL ANNUAL RATE =";
1070 PRINT R* 1200;" %"
1080 PRINT
1090 PRINT "    LIFE OF LOAN        =";
1100 PRINT Y;" YEARS,"M" MONTHS"
1110 PRINT
1120 PRINT "    AMOUNT BORROWED     =";
1130 PRINT "$";A
1140 PRINT
1150 PRINT "    MONTHLY PAYMENT     =";
1160 PRINT "$";P:PLOT 18
1170 PRINT
1180 PRINT
1190 IF Z= 2THEN 1210
1200 GOTO 1220
1210 PRINT "THE MORTGAGE LIFE HAS BEEN ROUNDED UP TO NEAREST MONTH"
1220 PRINT
1230 GOSUB 1020
1240 PLOT 3,64,0
1250 FOR JJ= 0TO 2500:NEXT JJ
1260 PLOT 12
1270 PRINT
1280 PLOT 6,6,14,3,11,0:PRINT "A M O R T I Z A T I O N   S C H E D U L E"
1290 PLOT 15,6,2
1300 PRINT
1310 PRINT
1320 Z2= 0
1330 S1= 0
1340 S2= 0
1350 IF T1= 12THEN 1380
1360 M2= T1
1370 GOTO 1400
1380 T2= T2+ 1
1390 M2= 0
1400 M3= M2+ 1
1410 IF Z1= 1THEN GOSUB 1500
1420 IF Z1< > 1THEN GOSUB 1440
1430 GOTO 1560
1440 PLOT 18,3,0,4:PRINT "   ","BEGINNING"
1450 PRINT TAB( 8);"PRINCIPAL";TAB( 40);"PRINCIPAL"
1460 PRINT "  MONTH","OUTSTANDING","INTEREST","REPAYMENT"
1470 PLOT 3,10,8:PRINT "FOR THE CALENDAR YEAR"T2
1480 PRINT
1490 RETURN
1500 PLOT 18:PRINT TAB( 40);"ENDING"
1510 PRINT TAB( 24);"PRINCIPAL";TAB( 40);"PRINCIPAL"
1520 PRINT " YEAR","INTEREST","REPAYMENT","OUTSTANDING"
1530 PRINT
1540 PRINT
1550 RETURN
1560 FOR M1= M3TO T4+ M3
1570 I1= A* R
1580 I1= (I1* 1000+ 5)/ 10
1590 I1= INT (I1)
1600 I1= I1/ 100
1610 IF P< (A+ I1)THEN 1640
1620 P1= A
1630 GOTO 1660
1640 P1= P- I1
1650 IF A< PAND M1= T4+ M3THEN P1= A:A= 0:A1= P1+ I1:GOTO 1690
1660 A1= A
1670 IF A= 0THEN 1690
1680 A= A1- P1
1690 S1= S1+ I1
1700 S2= S2+ P1
1710 M2= M2+ 1
1720 IF Z1= 1THEN 1970
1730 PLOT 23:PRINT TAB( 4);DATE$(M2);
1740 PLOT 18:PRINT TAB( FN I(A1));INT (A1);".";RIGHT$ (STR$ (INT (FN C(A1)* 100+ 1000.5)),2);
1750 PLOT 17:PRINT TAB( FN J(I1));INT (I1);".";RIGHT$ (STR$ (INT (FN C(I1)* 100+ 1000.5)),2);
1760 PLOT 22:PRINT TAB( FN K(P1));INT (P1);".";RIGHT$ (STR$ (INT (FN C(P1)* 100+ 1000.5)),2)
1770 IF M2= 12THEN 1800
1780 IF A> 0THEN 2110
1790 Z2= 1
1800 PRINT
1810 PLOT 19:Z1= 1
1820 GOSUB 2390
1830 Z1= 0:IF Z3= 1THEN Z1= 1
1840 PRINT "    PRINCIPAL REPAID DURING";T2;"      =";SPC( U3);
1850 PRINT INT (S2);".";RIGHT$ (STR$ (INT (FN C(S2)* 100+ 1000.5)),2)
1860 PRINT "    INTEREST PAID DURING   ";T2;"      =";SPC( U2);
1870 PRINT INT (S1);".";RIGHT$ (STR$ (INT (FN C(S1)* 100+ 1000.5)),2)
1880 PRINT "    PRINCIPAL OUTSTANDING AT YEAR END";" ="SPC( U1);
1890 PRINT INT (A);".";RIGHT$ (STR$ (INT (FN C(A)* 100+ 1000.5)),2)
1900 IF Z2= 1THEN 2140
1910 T2= T2+ 1
1920 GOSUB 2260
1930 PRINT
1940 IF M1= T4THEN 2140
1950 GOSUB 1470
1960 GOTO 2080
1970 IF M2= 12THEN 2000
1980 IF A> 0THEN 2110
1990 Z2= 1
2000 IF Z1= 1THEN GOSUB 2580
2010 PLOT 23:PRINT T2;
2020 PLOT 17:PRINT TAB( FN I(S1));INT (S1);".";RIGHT$ (STR$ (INT (FN C(S1)* 100+ 1000.5)),2);
2030 PLOT 22:PRINT TAB( FN J(S2));INT (S2);".";RIGHT$ (STR$ (INT (FN C(S2)* 100+ 1000.5)),2);
2040 PLOT 18:PRINT TAB( FN K(A));INT (A);".";RIGHT$ (STR$ (INT (FN C(A)* 100+ 1000.5)),2)
2050 T2= T2+ 1
2060 IF M1= T4THEN 2140
2070 IF Z2= 1THEN 2140
2080 S1= 0
2090 S2= 0
2100 M2= 0
2110 NEXT M1
2120 IF Z1= 1THEN Z3= 1
2130 IF Z2< > 1AND M2< > 12AND A> 0THEN Z2= 1:GOTO 1800
2140 PLOT 6,2
2150 IF Z1= 1THEN 2180
2160 VV= - 9999:GOSUB 2260
2170 PLOT 3,0,28:PRINT SPC( 38)"":PLOT 3,0,29:PRINT SPC( 38)""
2180 PLOT 3,0,30:GOTO 2190
2190 INPUT "TYPE Y TO CONTINUE: ";Q$
2200 IF Q$= "Y"THEN CLEAR :GOTO 170
2210 PLOT 6,2,12,1
2220 X1= Y* 12+ M
2230 IF X1= 0THEN T4= 12* T3- 1
2240 IF X1> 0THEN T4= X1+ M3- 1
2250 RETURN
2260 REM  -- CLEAR CALENDAR YEAR'S SCHEDULE
2270 PLOT 3,0,28:PRINT "TO STOP PROGRAM - HIT 'BREAK' KEY..."
2280 PRINT "THEN TO RESUME  - HIT 'RETURN' KEY."
2290 GOSUB 2450
2300 IF VV= - 9999THEN RETURN
2310 FOR JJ= 0TO 2500:NEXT JJ:REM  - ALLOW TIME TO LOOK AT SCHEDULE
2320 PLOT 14
2330 FOR JJ= 10TO 24STEP 2:PLOT 3,0,JJ,11:NEXT JJ
2340 PLOT 3,0,4,15
2350 RETURN
2360 REM  -- ROUND MONTHLY PAYMENT
2370 P= INT (P* 100+ .5)* .01
2380 RETURN
2390 U1= LEN (STR$ (INT (A)))
2400 U2= LEN (STR$ (INT (S1)))
2410 U3= LEN (STR$ (INT (S2)))
2420 IF U1> = U2AND U1> = U3THEN U2= U1- U2:U3= U1- U3:U1= 0:RETURN
2430 IF U2> = U1AND U2> = U3THEN U1= U2- U1:U3= U2- U3:U2= 0:RETURN
2440 IF U3> = U1AND U3> = U2THEN U1= U3- U1:U2= U3- U2:U3= 0:RETURN
2450 PLOT 3,64,0:GOSUB 2520:GOSUB 2540:PLOT 3,38,28:PRINT "TOTAL"
2460 PLOT 3,44,28:PRINT "INTEREST  ";SPC( U1);
2470 PRINT INT (S4);".";RIGHT$ (STR$ (INT (FN C(S4)* 100+ 1000.5)),2)
2480 PLOT 3,44,29:PRINT "PRINCIPAL ";SPC( U2);
2490 PRINT INT (P4);".";RIGHT$ (STR$ (INT (FN C(P4)* 100+ 1000.5)),2)
2500 PLOT 3,64,0
2510 RETURN
2520 S4= S4+ S1:P4= P4+ S2
2530 RETURN
2540 U1= LEN (STR$ (INT (S4)))
2550 U2= LEN (STR$ (INT (P4)))
2560 IF U1> = U2THEN U2= U1- U2:U1= 0:RETURN
2570 IF U2> U1THEN U1= U2- U1:U2= 0:RETURN
2580 SC= SC+ 1:IF SC= 29THEN ZZ= CALL (1):SC= 28
2590 GOSUB 2600:PRINT SPC( 63)""
2600 PLOT 3,0,SC:RETURN