1  REM  ********** HP TIME-SHARED BASIC PROGRAM LIBRARY ****************
2  REM
3  REM        DROIPB: DISCOUNTED RETURN ON INVESTMENT & PAYBACK
4  REM
5  REM           36179  REV A         3/72
6  REM
7  REM  ************ CONTRIBUTED PROGRAM ********************************
8  REM
9  REM
10  REM ***DROI***BUSINESS PROGRAM***VERSION#1**(3/10/70)***
15  PRINT "   * DISCOUNTED RETURN ON INV *"
16  PRINT 
40  DIM V[42],D[42],W[42],F[42],C[42],N[42]
50  PRINT "INIT INV $:";
55  INPUT V0
60  LET V0=-ABS(V0)
70  PRINT "LIFE (YRS):";
75  INPUT N0
80  LET N3=0
82  LET C0=0
85  LET N3=N3+1
95  PRINT "CAP COST $:";
100  INPUT C[N3]
105  IF C[N3]=0 THEN 130
110  LET C[N3]=ABS(C[N3])*SGN(V0)
112  LET C0=C0+C[N3]
115  PRINT "DEPR LIFE (YRS):";
120  INPUT N[N3]
125  GOTO 85
130  LET N3=N3-1
131  PRINT 
132  PRINT "DEPR METHODS: 1. STRT LINE,  2. DBL DECL BAL TO STRT LINE,";
133  PRINT "3. SUM OF YRS DIGITS.  *** USE METHOD NO.:";
134  INPUT Z
137  PRINT 
138  PRINT "CASH FLOW"
139  FOR I0=1 TO N0
140  PRINT "YEAR";I0;
149  INPUT V[I0]
150  NEXT I0
151  FOR I0=1 TO N0
152  LET D[I0]=0
153  NEXT I0
154  IF Z>1 THEN 179
157  FOR J0=1 TO N3
160  FOR I0=1 TO N[J0] STEP 1
166  LET D[I0]=D[I0]-C[J0]/N[J0]
169  NEXT I0
173  NEXT J0
176  GOTO 267
179  IF Z>2 THEN 218
182  FOR J0=1 TO N3
183  LET Y1=ABS(C[J0])
185  FOR I0=1 TO N[J0] STEP 1
191  LET X=Y1/((N[J0]+1)-I0)
194  LET X1=Y1*2/N[J0]
197  IF X >= X1 THEN 203
198  LET D[I0]=D[I0]+X1
199  LET Y1=Y1-X1
200  GOTO 209
203  LET D[I0]=D[I0]+X
206  LET Y1=Y1-X
209  NEXT I0
212  NEXT J0
215  GOTO 267
218  FOR J0=1 TO N3
221  LET D0=2/(N[J0]*(N[J0]+1))
224  LET D1=0
227  FOR I0=N[J0] TO 1 STEP -1
230  LET D1=D1+D0
240  IF I0>N0 THEN 260
250  LET D[I0]=D[I0]-C[J0]*D1
260  NEXT I0
265  NEXT J0
267  PRINT 
280  PRINT "TAX RATE %";
290  INPUT T0
295  LET T0=T0/100
296  PRINT 
330  PRINT "CASH FLOW","  DEPR","","TAXABLE",
332  PRINT "TAXES";TAB(56);"CASH FLOW"
334  PRINT TAB(31);"INCOME"," ";TAB(56);"AFTER TAX"
335  PRINT 
340  FOR I0=1 TO N0
350  LET I1=V[I0]-D[I0]
360  LET T1=T0*I1
370  LET W[I0]=V[I0]-T1
380  PRINT V[I0];TAB(15);D[I0];TAB(29);I1;TAB(43);T1;TAB(57);W[I0]
390  NEXT I0
400  LET S1=0
410  FOR I0=1 TO N0
420  LET S1=S1+W[I0]
430  IF (S1+V0)*SGN(V0)<0 THEN 500
440  NEXT I0
450  PRINT 
460  PRINT "INIT INV NOT RECOVERED."
470  PRINT "SUM OF THE NET CASH FLOWS AFTER TAXES = ";S1
480  PRINT "NET AFTER-TAX VALUE OF INV =";S1+V0
490  GOTO 850
500  LET S0=S1-W[I0]
510  LET Y=I0-1-(V0+S0)/(S1-S0)
520  PRINT 
530  PRINT "YEARS TO PAY BACK = ";Y
540  LET K0=0
550  LET R0=0
560  LET K0=K0+1
570  LET F0=1/(1+R0)
580  LET F[1]=F0
590  FOR I0=2 TO N0+1
600  LET F[I0]=F[I0-1]*F0
610  NEXT I0
620  LET P0=V0
630  LET P1=0
640  FOR I0=1 TO N0
650  LET P0=P0+W[I0]*F[I0]
660  LET P1=P1+I0*W[I0]*F[I0+1]
670  NEXT I0
680  IF P1=0 THEN 760
690  LET R1=P0/P1
700  LET R0=R0+R1
710  IF R0<0 THEN 560
720  IF ABS(R1)<.0001 THEN 820
730  IF K0<100 THEN 560
740  PRINT "R NON-CONVERGENT AFTER";K0;"ITERATIONS"
750  GOTO 820
760  PRINT "DP/DR=0 AFTER";K0;"ITERATIONS"
770  GOTO 820
780  PRINT "R BECOMES NEGATIVE AFTER ";K0;" ITERATIONS."
790  GOTO 820
820  PRINT "RATE OF RETURN = ";R0*100;"%"
850  END 
