1  REM  ****  HP BASIC PROGRAM LIBRARY  **********************************
2  REM 
3  REM        POLICY:  STUDENTS FORMULATE NATIONAL POLICY
4  REM
5  REM         36649  REV A -- 10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ***************************************
100  REM POLICY - NATIONAL POLICY FORMATION
110  REM CHANGES 18 INDICATORS IN RESPONSE TO WHICH OF THE
120  REM 14 PROPOSITIONS ARE PASSED.
130  REM COPYRIGHT 1972, STATE UNIVERSITY OF NEW YORK
140  REM S(X): VALUE OF INDICATOR X AT BEGINNING OF PERIOD
150  REM E(X): VALUE OF INDICATOR X AT END OF PERIOD
160  REM W(X): NUMBER OF POINTS TO BE USED BY GROUP X 
170  REM Y(X): NUMBER OF MINUS POINTS TO BE USED BY GROUP X 
180  REM Q(X): BETWEEN LINES 650 AND 1190 Q(X) IS THE NUMBER OF POINTS
190  REM       FOR PROPOSITION X.  AT OTHER TIMES Q(X) =
200  REM   1,  IF PROPOSITION X PASSED
210  REM   0,  IF PROPOSITION X DID NOT PASS
220  REM DEVELOPED BY D. KLASSEN AND J. MCGRATH
230  REM PROGRAMMED BY S. HOLLANDER AND L. OBERLANDER
240  REM LATEST REVISION 8-27-72
250  DIM E[18],S[18],Q[14],W[6],Y[6]
260  FOR Z=1 TO 18
270  READ E[Z]
280  LET S[Z]=E[Z]
290  NEXT Z
300  PRINT 
310  DATA 976.5,197,80,18.2,3,82
315  DATA 54,3,140,4.5,25,8.2
320  DATA 30,116.3,142,5568,20,0
330  PRINT "HOW MANY PERIODS";
340  INPUT P1
350  LET P2=0
360  PRINT 
370  PRINT 
380  IF P2>0 THEN 410
390  PRINT "INITIAL AMOUNTS:"
400  GOTO 420
410  PRINT "END OF PERIOD";P2
420  PRINT 
430  PRINT 
440  PRINT "INDICATOR","CURRENTLY","INCREASE","PCT. INC."
450  FOR Z=1 TO 18
460  LET D1=INT(100*(E[Z]-S[Z]))/100
470  IF S[Z]=0 THEN 490
480  LET D2=100*D1/S[Z]
490  LET D2=INT(100*D2)/100
500  PRINT Z+100,INT(100*E[Z])/100;
510  IF P2=0 THEN 530
520  PRINT " ",D1,D2;
530  PRINT 
540  NEXT Z
550  PRINT 
560  PRINT 
570  LET P2=P2+1
580  FOR Z=1 TO 18
590  LET S[Z]=E[Z]
600  NEXT Z
610  FOR Z=1 TO 6
620  LET W[Z]=100
630  LET Y[Z]=50
640  NEXT Z
650  FOR Z=1 TO 14
660  LET Q[Z]=0
670  NEXT Z
680  PRINT "TAPE?(1=YES,0=NO)";
690  INPUT Z
700  IF Z=1 THEN 1900
710  IF P2>P1 THEN 2040
720  FOR Z=1 TO 6
730  PRINT 
740  IF Z>1 THEN 770
750  PRINT "BUSINESS"
760  GOTO 900
770  IF Z>2 THEN 800
780  PRINT "LABOR"
790  GOTO 900
800  IF Z>3 THEN 830
810  PRINT "CIVIL RIGHTS"
820  GOTO 900
830  IF Z>4 THEN 860
840  PRINT "MILITARY"
850  GOTO 900
860  IF Z>5 THEN 890
870  PRINT "NATIONALISTS"
880  GOTO 900
890  PRINT "INTERNATIONALISTS"
900  PRINT 
910  PRINT "TOTAL POINTS REMAINING : ";W[Z]
920  IF Y[Z] <= W[Z] THEN 940
930  LET Y[Z]=W[Z]
940  PRINT "MAXIMUM MINUS POINTS   : ";Y[Z]
950  PRINT "INPUT POLICY NO.,POINTS"
960  PRINT 
970  INPUT A,B
980  LET A=INT(A)
990  LET B=INT(B)
1000  IF A>14 THEN 910
1010  IF A=0 THEN 1150
1020  IF B=0 THEN 910
1030  IF A>0 THEN 1080
1040  PRINT "TAPE?(1=YES,0=NO)";
1050  INPUT G
1060  IF G=1 THEN 1900
1070  GOTO 910
1080  IF ABS(B)>W[Z] THEN 910
1090  IF B >= 0 THEN 1120
1100  IF ABS(B)>Y[Z] THEN 910
1110  LET Y[Z]=Y[Z]+B
1120  LET Q[A]=Q[A]+B
1130  LET W[Z]=W[Z]-ABS(B)
1140  IF W[Z]>0 THEN 970
1150  NEXT Z
1160  PRINT 
1170  PRINT "PASSED : ";
1180  LET Z2=0
1190  FOR Z=1 TO 14
1200  IF Q[Z]<101 THEN 1250
1210  PRINT Z;
1220  LET Z2=1
1230  LET Q[Z]=1
1240  GOTO 1260
1250  LET Q[Z]=0
1260  NEXT Z
1270  IF Z2>0 THEN 1300
1280  PRINT "NONE"
1290  GOTO 1600
1300  PRINT 
1310  PRINT 
1320  FOR Z=1 TO 14
1330  IF Q[Z] <> 0 THEN 1370
1340  READ A,B
1350  IF A <> 0 THEN 1340
1360  GOTO 1410
1370  READ A,B
1380  IF A=0 THEN 1410
1390  LET E[A]=E[A]+B
1400  GOTO 1370
1410  NEXT Z
1420  RESTORE 
1430  FOR Z=1 TO 9
1440  READ A,B
1450  NEXT Z
1460  DATA 1,15.2,0,0
1470  DATA 1,10,8,2,9,2.25,0,0
1480  DATA 1,12,2,5,9,2.25,12,-1.5,13,-5,16,-100,0,0
1490  DATA 2,4,3,1,12,2,13,3,0,0
1500  DATA 1,12,2,3,6,1,7,1,10,-.1,11,-.05,12,-1,13,-3,16,-50,0,0
1510  DATA 1,8,2,2,3,1,6,.5,10,-.1,14,3,0,0
1520  DATA 2,1,16,-100,0,0
1530  DATA 1,24,2,11,4,.3,6,3,11,-.05,13,-.1,16,-500,17,-2,0,0
1540  DATA 1,9,2,8,4,-1,8,1,10,-.05,11,-2,12,-1,13,-.05,16,-300,17,-3,0,0
1550  DATA 1,-8,2,-10,3,-30,5,1,6,-4,7,4,10,.25,13,1,14,-2,0,0
1560  DATA 1,2,2,.5,6,-2,7,5,8,-1,14,1,15,-15,17,-1,0,0
1570  DATA 1,4,2,2,3,2,6,.5,15,3,0,0
1580  DATA 1,10,6,5,7,3,14,-4,0,0
1590  DATA 1,3,2,1,5,1,0,0
1600  IF E[1] <> S[1] THEN 1620
1610  LET E[1]=1.04*E[1]
1620  IF E[2] <> S[2] THEN 1640
1630  LET E[2]=E[2]+1
1640  IF E[3] <> S[3] THEN 1660
1650  LET E[3]=.99*E[3]
1660  IF E[4] <> S[4] THEN 1680
1670  LET E[4]=E[4]*.99
1680  IF E[5] <> S[5] THEN 1700
1690  LET E[5]=.9*E[5]
1700  IF E[8] <> S[8] THEN 1720
1710  LET E[8]=1.01*E[8]
1720  IF S[1]=0 THEN 1750
1730  IF (E[1]-S[1])/S[1]<.04 THEN 1750
1740  LET E[10]=1.015*E[10]
1750  IF E[11] <> S[11] THEN 1770
1760  LET E[11]=.99*E[11]
1770  IF E[12] <> S[12] THEN 1810
1780  IF S[1]=0 THEN 1810
1790  IF (E[1]-S[1])/S[1]<.04 THEN 1810
1800  LET E[12]=1.03*E[12]
1810  IF E[13] <> S[13] THEN 1830
1820  LET E[13]=.98*E[13]
1830  IF E[14] <> S[14] THEN 1850
1840  LET E[14]=1.04*E[14]
1850  IF E[15] <> S[15] THEN 1870
1860  LET E[15]=1.1*E[15]
1870  IF E[16] <> S[16] THEN 360
1880  LET E[16]=1.18*E[16]
1890  GOTO 360
1900  PRINT 
1910  PRINT "                    "
1920  FOR L=0 TO 12 STEP 6
1930  IF L>0 THEN 1960
1940  PRINT "310";
1950  GOTO 2000
1960  IF L>6 THEN 1990
1970  PRINT "315";
1980  GOTO 2000
1990  PRINT "320";
2000  PRINT "DATA";
2005  FOR Z=L+1 TO L+5
2010  PRINT E[Z];",";
2015  NEXT Z
2020  PRINT E[L+6]
2025  NEXT L
2030  PRINT 
2035  PRINT 
2040  END 
