10  DIM F$[255],L$[255],F[10],M[10,10],V[10],Z[10],N[10,4],A$[255]
20  PRINT 
30  DIM S$[255],Y$[72]
40  Y$="Y"
50  PRINT "DO YOU NEED INSTRUCTIONS (YES/NO)?";
60  LINPUT A$
70  IF A$[1,1]#"Y" THEN 100
80  P=0
90  GOTO 110
100  P=1
110  IF P THEN 190
120  PRINT "   I CAN HELP YOU MAKE DECISIONS BY CHOOSING THE"
130  PRINT "BEST POSSIBILITY FOR YOU OUT OF SEVERAL ALTERNATIVES."
140  PRINT "ALL I NEED TO DO IS ORGANIZE INFORMATION YOU ALREADY HAVE."
150  PRINT '10"   WHICH OF THESE BEST DESCRIBES THE TYPE OF"
160  PRINT "DECISION YOU HAVE TO MAKE?"'10
170  PRINT "1 - CHOOSE AN ITEM FROM SEVERAL ALTERNATIVES"
180  PRINT "2 - CHOOSE A COURSE OF ACTION FROM SEVERAL ALTERNATIVES"
190  PRINT '10"WHICH TYPE (1 OR 2) DO YOU HAVE TO MAKE";
200  INPUT C
210  IF C<1 OR C>2 THEN 190
220  PRINT 
230  IF C#1 THEN 280
240  PRINT "   WHAT TYPE OF ITEM IS IT THAT YOU"
250  PRINT "NEED TO DECIDE UPON";
260  INPUT S$
270  GOTO 290
280  S$="COURSE OF ACTION"
290  IF  NOT P THEN 320
300  PRINT '10"HOW MANY "S$"'S ARE YOU CONSIDERING";
310  GOTO 360
320  PRINT '10"   I WILL NOW NEED A LIST OF EACH "S$
330  PRINT "THAT YOU ARE CONSIDERING.  PLEASE INPUT THEM ONE AT A"
340  PRINT "TIME.  THE ORDER IS OF NO PARTICULAR IMPORTANCE."
350  PRINT '10"FIRST, HOW MANY ARE THERE ALTOGETHER";
360  INPUT L0
370  IF L0 >= 2 AND L0 <= 10 THEN 400
380  GOSUB 2190
390  GOTO 350
400  PRINT 
410  D=INT(255/L0)
420  IF (D*L0) <= 255 THEN 450
430  D=D-1
440  GOTO 420
450  FOR I=1 TO L0
460  CONVERT I TO A$
470  PRINT '10"NUMBER "A$" PLEASE"'13'10">";
480  LINPUT A$
490  IF A$="" THEN 510
500  IF LEN(A$) <= D THEN 530
510  PRINT "MAX. CHAR. LENGTH ="D
520  GOTO 460
530  N=LEN(A$) MIN D
540  N[I,1]=D*I-(D-1)
550  N[I,2]=N[I,1]+N-1
560  L$[N[I,1],N[I,1]+(D-1)]=A$[1,N]
570  NEXT I
580  PRINT '10"O.K.  THIS IS THE LIST UNDER CONSIDERATION"'10
590  FOR I=1 TO L0
600  PRINT I;TAB(5);L$[N[I,1],N[I,2]]
610  NEXT I
620  PRINT 
630  GOSUB 2210
640  IF B$#Y$ THEN 300
650  PRINT '10"   NOW, HOW MANY DIFFERENT FACTORS ARE IMPORTANT"
660  PRINT "TO YOU IN CHOOSING A";
670  DATA 65,69,73,79,85
680  RESTORE 670
690  FOR I0=1 TO 5
700  READ J0
710  IF NUM(S$[1,1])=J0 THEN 740
720  NEXT I0
730  GOTO 750
740  PRINT "N";
750  PRINT " "S$;
760  INPUT F0
770  IF F0 >= 1 AND F0 <= 10 THEN 800
780  GOSUB 2190
790  GOTO 650
800  PRINT '10"   I NEED A LIST OF EACH OF THESE FACTORS"
810  D=INT(255/F0)
820  IF (D*F0) <= 255 THEN 850
830  D=D-1
840  GOTO 820
850  FOR I=1 TO F0
860  CONVERT I TO A$
870  PRINT '10"FACTOR NUMBER "A$'13'10">";
880  LINPUT A$
890  IF A$="" THEN 910
900  IF LEN(A$) <= D THEN 930
910  PRINT "MAX. CHAR. LENGTH ="D
920  GOTO 860
930  N=LEN(A$) MIN D
940  N[I,3]=D*I-(D-1)
950  N[I,4]=N[I,3]+N-1
960  F$[N[I,3],N[I,3]+(D-1)]=A$[1,N]
970  NEXT I
980  IF  NOT P THEN 1010
990  PRINT '10"FACTORS"
1000  GOTO 1030
1010  PRINT '10"   NOW LOOK AT THE FOLLOWING LIST OF FACTORS YOU"
1020  PRINT "HAVE PROVIDED AND DECIDE WHICH IS THE MOST IMPORTANT"
1030  PRINT 
1040  FOR I=1 TO F0
1050  PRINT I;TAB(5);F$[N[I,3],N[I,4]]
1060  NEXT I
1070  PRINT '10"   WHICH FACTOR (BY NUMBER) IS MOST IMPORTANT?"
1080  PRINT "(INPUT '0' IF YOU WISH TO CHANGE THE LIST)";
1090  INPUT F2
1100  IF F2=0 THEN 650
1110  IF F2<1 OR F2>F0 THEN 1070
1120  IF P THEN 1180
1130  PRINT '10"   O.K.  SUPPOSE WE HAVE A SCALE OF IMPORTANCE THAT"
1140  PRINT "RANGES FROM 0 TO 10.  LET'S SAY "F$[N[F2,3],N[F2,4]]
1150  PRINT "HAS A VALUE OF 10 SINCE IT IS AT THE TOP OF THE SCALE.  ON"
1160  PRINT "THIS SCALE, WHAT VALUE WOULD EACH OF THE OTHER FACTORS"
1170  PRINT "HAVE (DECIMAL NUMBERS ARE OK)?"'10
1180  FOR I=1 TO F0
1190  IF I=F2 THEN 1270
1200  PRINT F$[N[I,3],N[I,4]]'13'10">";
1210  ENTER 255,R,F[I]
1220  PRINT 
1230  IF  ERROR  THEN 1250
1240  IF F[I] >= 0 AND F[I] <= 10 THEN 1270
1250  PRINT "   YOUR INPUT IS NO GOOD.  TRY AGAIN "
1260  GOTO 1200
1270  NEXT I
1280  F[F2]=10
1290  C=0
1300  FOR I=1 TO F0
1310  C=C+F[I]
1320  NEXT I
1330  FOR I=1 TO F0
1340  F[I]=F[I]/C
1350  NEXT I
1360  IF P THEN 1460
1370  PRINT '10"   NOW CONSIDER HOW EACH "S$
1380  PRINT "RATES WITH RESPECT TO EACH OF THE FACTORS.  WE WILL"
1390  PRINT "CONSIDER EACH FACTOR SEPARATELY AND THEN RATE EACH "
1400  PRINT S$" IN TERMS OF THAT FACTOR ONLY."'10
1410  PRINT "LET'S CONSIDER "L$[N[1,1],N[1,2]]" TO HAVE A"
1420  PRINT "VALUE OF 10 ON EACH SCALE.  THEN EVERY OTHER "S$
1430  PRINT "WILL BE GIVEN A NUMBER HIGHER OR LOWER THAN 10"
1440  PRINT "ACCORDING TO HOW MUCH BETTER OR WORSE THAN"
1450  PRINT L$[N[1,1],N[1,2]]" YOU THINK IT IS.";LIN(-2)
1460  FOR I=1 TO F0
1470  PRINT 
1480  PRINT "   CONSIDERING "F$[N[I,3],N[I,4]]" ONLY, AND"
1490  PRINT "ASSUMING "L$[N[1,1],N[1,2]]" HAS A VALUE OF 10,"
1500  PRINT "WHAT VALUE WOULD YOU GIVE TO EACH OF THE FOLLOWING:"
1510  PRINT 
1520  FOR J=2 TO L0
1530  PRINT L$[N[J,1],N[J,2]]'13'10">";
1540  ENTER 255,R,M[J,I]
1550  PRINT 
1560  IF  ERROR  THEN 1600
1570  IF M[J,I] >= 0 THEN 1620
1580  PRINT "   C'MON.  NO NEGATIVE NUMBERS.  TRY AGAIN."
1590  GOTO 1530
1600  PRINT "   WHAT WAS THAT?!?  TRY AGAIN."
1610  GOTO 1530
1620  NEXT J
1630  PRINT 
1640  M[1,I]=10
1650  NEXT I
1660  FOR I=1 TO F0
1670  C=0
1680  FOR J=1 TO L0
1690  C=C+M[J,I]
1700  NEXT J
1710  FOR J=1 TO L0
1720  M[J,I]=M[J,I]/C
1730  NEXT J
1740  NEXT I
1750  FOR J=1 TO L0
1760  V[J]=0
1770  FOR I=1 TO F0
1780  V[J]=V[J]+M[J,I]*F[I]
1790  NEXT I
1800  NEXT J
1810  FOR I=1 TO 10
1820  Z[I]=I
1830  NEXT I
1840  C=L0-1
1850  FOR J=1 TO L0
1860  FOR I=1 TO C
1870  N1=Z[I]
1880  N2=Z[I+1]
1890  IF V[N1]>V[N2] THEN 1920
1900  Z[I+1]=N1
1910  Z[I]=N2
1920  NEXT I
1930  NEXT J
1940  C1=Z[1]
1950  C2=Z[2]
1960  C=100/V[C1]
1970  FOR J=1 TO L0
1980  V[J]=C*V[J]
1990  NEXT J
2000  PRINT LIN(2)
2010  D=V[C1]-V[C2]
2020  PRINT "   WELL, YOUR BEST CHOICE SEEMS TO BE "L$[N[C1,1],N[C1,2]]
2030  IF D<10 THEN 2070
2040  IF D<20 AND D >= 10 THEN 2090
2050  PRINT "BY A GOOD-SIZED MARGIN."
2060  GOTO 2100
2070  PRINT "BUT IT'S PRETTY CLOSE!"
2080  GOTO 2100
2090  PRINT "BY A FAIR MARGIN."
2100  IF P THEN 2130
2110  PRINT '10"   HERE'S THE FINAL LIST WITH "L$[N[C1,1],N[C1,2]]
2120  PRINT "GIVEN A VALUE OF 100 AND THE OTHERS SET ACCORDINGLY"
2130  PRINT LIN(2);"RATING",S$
2140  FOR J=1 TO L0
2150  C=Z[J]
2160  PRINT V[C],L$[N[C,1],N[C,2]]
2170  NEXT J
2180  END 
2190  PRINT "   THE NUMBER MUST BE BETWEEN 2 AND 10."
2200  RETURN 
2210  PRINT "   IS THIS CORRECT (Y OR N)";
2220  INPUT A$
2230  B$=A$[1,1]
2240  RETURN 
2250  END 
