home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_BAS / BASICX.ZIP / AMORTGW.BAS next >
BASIC Source File  |  1994-01-04  |  5KB  |  141 lines

  1. 100 'AMORTGW.BAS       Copyright 1993 by JN Goodale
  2. 110 'Date: [93-12-20]
  3. 111 '
  4. 112 '   *** NOTE ***
  5. 113 '   This program is included for the purpose of demonstrating BASICXR.
  6. 114 '   The program works correctly, but may contain errors if run with
  7. 115 '       unusual input.  The author assumes no responsibility for making
  8. 116 '       corrections to AMORTGW.BAS!
  9. 117 '
  10. 120 'Desc: Amortization of a Loan - Find Amount of Level Payment
  11. 140 '
  12. 150 '      P=Principal
  13. 160 '      R=Interest Rate
  14. 170 '      I=Interest/Period
  15. 180 '      N=Number of Payments (Periods)
  16. 190 '      A=Amount of Level Payment
  17. 200 '
  18. 210 '
  19. 220 '
  20. 230 '                 P * I
  21. 240 '        A =   --------------
  22. 250 '                      1
  23. 260 '              1 -  --------
  24. 270 '                   (1+I) ^N           Where ^N is "to the Nth Power"
  25. 280 '
  26. 290 '.......................................................................
  27. 300 '
  28. 310 '
  29. 320 DIM TEXT$(24)
  30. 330 '               0         1         2         3         4         5
  31. 340 '           123456789 123456789 123456789 123456789 123456789 123456789
  32. 350 TEXT$(1) = "                             [ LOAN AMORTIZATION ]"
  33. 360 TEXT$(2) = " "
  34. 370 TEXT$(3) = "      Calculate a Level Loan Payment, given:"
  35. 380 TEXT$(4) = "          Loan Principal, nearest full $  (Max 500000)"
  36. 390 TEXT$(5) = "          Interest Rate per Year (Max 30.00), Full %, as in 7.75 = 7.75%"
  37. 400 TEXT$(6) = "          Number of months to Pay  (Max 480)"
  38. 410 TEXT$(7) = "                I.E. 30 Years = 360 Months"
  39. 420 TEXT$(8) = "                      4 Years =  48 Months"
  40. 430 TEXT$(9) = STRING$(79, 220)
  41. 440 TEXT$(10) = "      Enter Amount of PRINCIPAL:             (Q-to Quit)"
  42. 450 TEXT$(11) = "          Enter Interest Rate %: "
  43. 460 TEXT$(12) = "         Enter Number of Months: "
  44. 470 TEXT$(13) = " "
  45. 480 TEXT$(14) = "     The MONTHLY Payment on the above loan would be:  $"
  46. 490 TEXT$(15) = " "
  47. 500 TEXT$(16) = "          V-To View loan schedule"
  48. 510 TEXT$(17) = "          Q-To Quit"
  49. 520 TEXT$(18) = " "
  50. 530 TEXT$(19) = " "
  51. 540 TEXT$(20) = "                           Choice ? _"
  52. 550 TEXT$(21) = " "
  53. 560 TEXT$(22) = " "
  54. 570 TEXT$(23) = " "
  55. 580 TEXT$(24) = " "
  56. 590 '            123456789 123456789 123456789 123456789 123456789 123456789
  57. 600 '                0         1         2         3         4         5
  58. 610 '
  59. 620 DIM HEADING$(3)
  60. 630 HEADING$(1) = "              [ Loan Amortization Table ]"
  61. 640 HEADING$(2) = "     Payment #   Balance      Interest     Principal"
  62. 650 HEADING$(3) = " "
  63. 660 '
  64. 670 E0$ = "#######": E2$ = "#######.##": EI$ = "####"
  65. 720 KEY OFF
  66. 750 CLS
  67. 760 FOR I = 1 TO 10: PRINT TEXT$(I): NEXT I
  68. 770 LOCATE 10, 34: LINE INPUT PRINCIPAL$
  69. 780 IF (PRINCIPAL$ = "Q") OR (PRINCIPAL$ = "q") THEN GOTO 1270
  70. 790 N = INSTR(PRINCIPAL$, ".")
  71. 800 IF N THEN PRINCIPAL$ = LEFT$(PRINCIPAL$, N - 1)
  72. 810 PRINCIPAL = VAL(PRINCIPAL$)
  73. 820 IF PRINCIPAL < 1 THEN GOTO 750
  74. 830 IF PRINCIPAL > 500000! THEN GOTO 750
  75. 840 LOCATE 11, 1: PRINT TEXT$(11)
  76. 850 '
  77. 870 LOCATE 11, 35: LINE INPUT INTERESTRATE$
  78. 880 INTERESTRATE = VAL(INTERESTRATE$) / 1200
  79. 890 IF (INTERESTRATE > 0) AND (INTERESTRATE < 30 / 1200) THEN GOTO 940
  80. 900   LOCATE 11, 35
  81. 910   PRINT SPACE$(10);
  82. 920   GOTO 870
  83. 940 LOCATE 12, 1: PRINT TEXT$(12)
  84. 950 '
  85. 970  LOCATE 12, 35: LINE INPUT MONTHS$
  86. 980  MONTHS% = VAL(MONTHS$) \ 1
  87. 990  MONTHS = MONTHS%
  88. 1000 IF (MONTHS% > 0) AND (MONTHS% < 481) THEN GOTO 1070
  89. 1010   LOCATE 12, 35
  90. 1020   PRINT SPACE$(10);
  91. 1030   GOTO 970
  92. 1050 '
  93. 1070 X = (1 + INTERESTRATE) ^ MONTHS%
  94. 1080 Y = 1 / X
  95. 1090 Z = 1 - Y
  96. 1100 AMOUNT = (PRINCIPAL * INTERESTRATE) / Z
  97. 1110 '
  98. 1130 LOCATE 14, 1
  99. 1140 FOR I = 14 TO 20: PRINT TEXT$(I): NEXT I
  100. 1150 LOCATE 14, 57: PRINT USING E2$; (AMOUNT);
  101. 1160 LOCATE 20, 37
  102. 1170 '
  103. 1190 K$ = INKEY$
  104. 1200 IF K$ = "" THEN GOTO 1190
  105. 1210 IF K$ = "q" THEN GOTO 1270
  106. 1220 IF K$ = "Q" THEN GOTO 1270
  107. 1230 IF K$ = "V" THEN GOSUB 1310
  108. 1235 IF K$ = "v" THEN GOSUB 1310
  109. 1240 GOTO 750
  110. 1250 '
  111. 1270 CLS
  112. 1280 END
  113. 1290 '
  114. 1310 GOSUB 1560: BALANCE = PRINCIPAL
  115. 1320 FOR I% = 1 TO MONTHS%
  116. 1330 INTERESTPAY = BALANCE * INTERESTRATE
  117. 1340 PRINCIPALPAY = AMOUNT - INTERESTPAY
  118. 1350 BALANCE = BALANCE - PRINCIPALPAY
  119. 1360 ROW = ROW + 1
  120. 1370 IF ROW > 22 THEN GOSUB 1490
  121. 1380 IF K$ = "Q" THEN RETURN
  122. 1390 PRINT "          ";
  123. 1400 PRINT USING EI$; (I%); : PRINT "   ";
  124. 1410 PRINT USING E0$; BALANCE; : PRINT "    ";
  125. 1420 PRINT USING E2$; INTERESTPAY; : PRINT "    ";
  126. 1430 PRINT USING E2$; PRINCIPALPAY
  127. 1440 NEXT I%
  128. 1450 GOSUB 1490
  129. 1460 RETURN
  130. 1470 '
  131. 1490 PRINT
  132. 1500 PRINT TAB(20); "Q-To Quit,   Any Other Key to Continue ......";
  133. 1520 K$ = INKEY$
  134. 1530 IF K$ = "" THEN GOTO 1520
  135. 1540 IF K$ = "q" THEN K$ = "Q"
  136. 1560 CLS
  137. 1570 IF K$ = "Q" THEN RETURN
  138. 1580 FOR ROW = 1 TO 3: PRINT HEADING$(ROW): NEXT ROW
  139. 1590 RETURN
  140.  
  141.