3 REM GIRRPV: INVESTMENT RETURN (CASH FLOW) 60 T9=100 110 REM FUNCTION -- COMPUTES INTERNAL RATE OF RETURN AND 111 REM PRESEN VALUE 120 REM -- SPONSOR -- PROF. VAN HORNE 130 REM PROGRAMMERS -- 140 REM D.NIEBUHR (MAY, 1969) 150 REM W.SHARPE (JAN,1971) 160 REM INPUT -- CASH FLOWS 170 REM DATA -- CASH FLOWS (OPTIONAL) 180 REM FILES -- NONE 190 REM ------------------------------------ 200 REM F(1) THROUGH F(N) ARE CASH FLOWS FOR PERIOD 1 THROUGH N 210 DIM F(100) 220 REM ------------------------------------ 230 REM -- DETERMINE INPUT SOURCE 300 REM -- GET INFORMATION 310 PRINT'NUMBER OF PERIODS AFTER PERIOD ZERO'; 320 GOSUB 8000 321 N=Z9+1 330 PRINT'+ REPRESENTS A NET INFLOW, - REPRESENTS A NET OUTFLOW' 340 PRINT'INITIAL CASH FLOW IN PERIOD ZERO'; 350 GOSUB 8000 351 F(1)=Z9 360 PRINT'CASH FLOW IN FIRST PERIOD'; 370 GOSUB 8000 371 F(2)=Z9 380 IF N<=2 THEN 490 390 PRINT'ARE ALL THE REST OF THE FLOWS THE SAME'; 400 GOSUB 8100 401 A$=Z$ 405 IF A$='YES' THEN 450 415 FOR I=3 TO N 420 PRINT'PERIOD ';I-1;' FLOW'; 425 GOSUB 8000 426 F(I)=Z9 430 NEXT I 435 GOTO 490 450 REM -- ALL FLOWS THE SAME 460 FOR I=3 TO N 465 F(I)=F(2) 470 NEXT I 490 REM -- ALL FLOWS INPUT 500 REM ----------------------------------------- 510 REM -- SELECT NEXT TASK 520 PRINT 530 PRINT'WHAT NEXT (IRR,PV,NEW, OR STOP)'; 540 INPUT A$ 550 IF A$<>'IRR' THEN 560 555 GOSUB 800 556 GOTO 520 560 IF A$<>'PV' THEN 570 565 GOSUB 900 566 GOTO 520 570 IF A$<>'STOP' THEN 575 571 GOTO 9999 575 IF A$<>'NEW' THEN 580 576 REM -- NEXT PROBLEM 577 GOTO 300 580 PRINT'I DON"T UNDERSTAND -- TRY AGAIN ' 581 GOTO 520 590 REM --------------------------------------------------- 800 REM --------------------------------------------- 810 REM -- CALCULATE INTERNAL RATE OF RETURN 815 IF F(1)<0 THEN 830 820 PRINT'THE INTERNAL RATE OF RETURN CANNOT BE CALCULATED' 821 PRINT'UNLESS THE INITIAL CASH FLOW IS AN OUTFLOS (-)' 822 PRINT'SORRY' 823 PRINT 824 RETURN 830 REM 832 R=.95 834 M=0 836 F1=1 838 M=M+1 840 S1=F(1) 842 IF M>20 THEN 880 844 S2=0 846 FOR I=2 TO N 848 S2=S2+(I-1)*F1*F(I) 850 F1=F1*R 852 S1=S1+(F1*F(I)) 856 NEXT I 860 D=S1/S2 862 R=R-D 864 IF ABS(D)>.0005 THEN 836 870 R=100*((1/R)-1) 872 R=.01*INT(100*R+.5) 874 PRINT'THE INTERNAL RATE OF RETURN IS ';R;' PERCENT' 876 PRINT 878 RETURN 880 REM -- ROUTINE HAS NOT FOUND SOLUTION 882 PRINT'NO INTERNAL RATE OF RETURN FOUND USING STANDARD' 884 PRINT'PROCEDURES. YOU MIGHT FIND IT WITH TRIAL - AND - ERROR' 886 PRINT'COMPUTATIONS OF PRESENT VALUES. IF YOU WANT TO TRY.' 887 PRINT'START WITH A DISCOUNT RATE OF'; 888 PRINT 100*((1/R)-1);' PERCENT' 890 PRINT 900 REM ------------------------------------------ 910 REM -- CALCULATE PRESENT VALUE OF BLOWS 920 PRINT 930 PRINT'DISCOUNT RATE (IN PERCENT)'; 931 INPUT K 935 K=.01*K 940 P=0 945 K1=1 950 FOR I=1 TO N 955 P=P+F(I)/K1 960 K1=K1*(1+K) 970 NEXT I 975 PRINT'NET PRESENT VALUE IS ';P 985 PRINT 990 RETURN 8000 REM ---------------------------------------------- 8001 REM -- SUBROUTINE TO PUT NEXT VALUE IN Z9 8010 Z9=1 8020 GOSUB 8200 8030 RETURN 8100 REM -- SUBROUTINE TO PUT NEXT VALUE IN Z$ 8110 Z9=0 8120 GOSUB 8200 8130 RETURN 8200 REM -- SUBROUTINE TO GET NEXT VALUE 8230 REM -- INPUT VALUE 8232 IF Z9=1 THEN 8240 8234 INPUT Z$ 8236 RETURN 8240 REM -INPUT NUMERIC DATA 8242 INPUT Z9 8246 RETURN 9240 REM -- INPUT NUMERIC DATA 9999 END