1000,"R:    A TUTORIAL PROGRAM IN PILOT ABOUT PILOT",1010,"R:",1020,"R:  PACIFIC UNION COLLEGE,  L. TURNER,  JUN 74",1030,"R:",1040,"R:    PROGRAM NUMBER 5,  MORE C, .I, .X, U & E, AND .M",1050,"R:",1060,"R:*****************************************************************",1070,"T:",1080,"T:GREETINGS!  THIS IS THE FINAL PROGRAM IN THIS SERIES.  YOU ARE +",1090,"T:ALMOST FINISHED.  ACTUALLY, I HOPE THIS IS JUST A BEGINNING OF +",1100,"T:YOUR USAGE OF PILOT!",1110,"T:"
1120,"T:LAST TIME WE DISCUSSED THE COMPUTE STATEMENT AND AT LEAST ONE +",1130,"T:EXAMPLE OF HOW IT COULD BE USED.  DO YOU REMEMBER THAT USE +",1140,"A:",1150,".M:[Y],[YE,RIGHT,OF*COURS,CERT,[SURE,EXACT",1160,"Y:VERY GOOD, WHAT IS IT +",1170,"AY:",1180,"M:COUNT",1190,"Y:EXCELLENT!  +",1200,"N:WELL, +",1210,"T:WHAT I HAD IN MIND WAS THE USE AS A COUNTER.  AS IN:",1220,"T:",1230,"T:           1730 C:M=M+1",1240,"T:           2960 CY:P=P+1"
1250,"T:           4110 C(X<17):D=D+1",1260,"T:",1270,"T:BESIDES THE COMPUTE STATEMENT, WHAT PILOT STATEMENT CAN MODIFY +",1280,"T:THE VALUE OF A NUMERIC VARIABLE +",1290,"A:",1300,".M:[A],[ANSW",1310,"Y:RIGHT ON!  +",1320,".M:[.I],[INT*[FUN,[.X],[RAND",1330,"Y:YOU ARE EVEN AHEAD OF THE GAME!  +",1340,"T:SO FAR WE HAVE ONLY EXAMINED THE ANSWER STATEMENT.  THIS ALLOWS +",1350,"T:A QUESTION WHICH ASKS FOR A NUMERIC RESPONSE.",1360,"T:THE COMPUTE STATEMENT MAY BE USED IN CONJUNCTION WITH THIS TO +"
1370,"T:HELP EXTRACT THE INTENDED RESPONSE MORE ACCURATELY.  CONSIDER:",1380,"T:",1390,"T:        6310 T:HOW MANY DAYS IN ONE WEEK + ",1400,".T:        6320 A:#D",1410,"T:        6330 M:SEVEN",1420,"T:        6340 CY:D=7",1430,"T:        6350 T(D=7):EXACTLY!  + ",1440,"T:        6360 T(D#7):SORRY, + ",1450,"T:        6370 T:THERE ARE SEVEN DAYS IN ONE WEEK.",1460,"T:",1470,"T:WHAT IS THE PURPOSE OF STATEMENTS 6330 AND 6340??",1480,"A:",1490,".M:[SPEL,SEVEN"
1500,"Y:RIGHT, +",1510,"N:WELL, +",1520,"T:THEY CATCH THE RIGHT RESPONSE IF THE PERSON HAPPENED TO TYPE +",1530,"T:'SEVEN' INSTEAD OF '7'.  BOTH ARE CORRECT.",1540,"T:LET'S EXECUTE THIS PROGRAM.",1550,"*WHEE T:",1560,"T:   HOW MANY DAYS IN ONE WEEK +",1570,"A:#A",1580,"M:SEVEN",1590,"CY:A=7",1600,"T(A=7):   EXACTLY!  +",1610,"T(A#7):   SORRY, +",1620,"T:THERE ARE SEVEN DAYS IN ONE WEEK."
1630,"T:",1640,"C:A=0",1650,"N:NOW TRY IT AND ENTER 'SEVEN' SPELLED OUT.",1660,"JN:*WHEE",1670,"T:OFTEN ONE ONLY WISHES THAT THE RESPONSE BE CLOSE TO THE CORRECT +",1680,"T:ANSWER.  AGAIN THE COMPUTE STATEMENT TO THE RESCUE!",1690,"T:",1700,"T:        8400 T:HOW MANY CENTIMETERS IN ONE INCH + ",1710,".T:        8410 A:#X",1720,"T:",1730,"T:THE CORRECT ANSWER IS 2.54; HOWEVER, TO BE CONSIDERED CORRECT +",1740,"T:YOU MIGHT ALLOW ANY NUMBER BETWEEN 2.5 AND 2.58.  THIS WOULD +"
1750,"T:ALLOW ANY RESPONSE THAT IS WITHIN 0.04 OF THE CORRECT ANSWER TO +",1760,"T:BE COUNTED.  A VERY SIMPLE WAY IS TO COMPUTE THE DIFFERENCE +",1770,"T:BETWEEN THE CORRECT ANSWER AND THE RESPONSE.",1780,"T:HOW WOULD YOU DO THIS +",1790,"A:",1800,"M:C:,COMPUTE",1810,"M:=2.54-X,= 2.54-X,=X-2.54,= X-2.54",1820,".D:2",1830,"Y:I BELIEVE THAT IS CORRECT!  +",1840,"N:WELL, WHAT I HAD IN MIND WAS +",1850,"T:A COMPUTE STATEMENT THAT LOOKS LIKE+",1860,"Y: THIS SHOULD DO THE TRICK+",1870,"T::"
1880,"T:",1890,"T:        8420 C:D=2.54-X",1900,"T:",1910,"T:IF THE RESPONSE IS:  '2.5' WHAT IS STORED IN D +",1920,"A:#B",1930,"C:B=.04-B",1940,"C(B<0):B=-B",1950,"T(B<.001):EXACTLY!  +",1960,"T(B>=.001):NOT QUITE, +",1970,"T:D HAS 0.04 STORED IN IT.  SINCE 2.5 IS AN ALLOWED 'CORRECT +",1980,"T:ANSWER', HOW +",1990,"T:WOULD YOU CAUSE THE APPROPRIATE MESSAGE TO BE TYPED OUT??",2000,"A:"
2010,"M:CONDITION,(D<=.04),(D<=0.04)",2020,"Y:GOOD.  +",2030,"N:WELL, +",2040,"T:BY USING D IN A CONDITION ON A TYPE STATEMENT YOU CAN PRINT THE +",2050,"T:CORRECT RETORT.  CONSIDER:",2060,"T:",2070,"T:        8400 T:HOW MANY CENTIMETERS IN ONE INCH + ",2080,".T:        8410 A:#X",2090,"T:        8420 C:D=2.54-X",2100,"T:        8440 T(D<=0.04):VERY GOOD!",2110,"T:        8450 T(D>0.04):NOT QUITE.",2120,"T:",2130,"T:THIS IS COOL FOR GUESSES LESS THAN 2.54, BUT WHAT WOULD BE +"
2140,"T:PRINTED IF '57' WERE ENTERED +",2150,"A:",2160,"M:VERY,GOOD",2170,"Y:EXACTLY!  +",2180,"JY:*FIXBUG",2190,"T:WELL, WHAT IS STORED IN D +",2200,"C:E=1",2210,"A:#D",2220,"C:D=54.46+D",2230,"C(D<0):D=-D",2240,"T(D<=2):RIGHT.  +",2250,"T(D>2):NO, +",2260,"T:D CONTAINS A -54.46!"
2270,"T:IS THIS LESS THAN 0.04 +",2280,"A:",2290,".M:[Y],[YE,OF*COURS,CERT,RIGHT",2300,"Y:YES, +",2310,"N:NO, +",2320,"T:IT MOST CERTAINLY IS.",2330,"*FIXBUG T:NOW IS '57' A 'CORRECT RESPONSE' +",2340,"A:",2350,".M:[N],[NO,NEVER,N'T,NEGATIVE",2360,"Y:OF COURSE NOT, THUS +",2370,"N:YOU MUST BE KIDDING!  NO WAY CAN '57' BE CORRECT.  +",2380,"T:WE HAVE A BUG TO FIX!!  WHAT WE REALLY WANT IS THE ABSOLUTE +",2390,"T:DIFFERENCE FOR D.  SO IF D IS LESS THAN ZERO, WE WANT TO CHANGE +"
2400,"T:ITS SIGN.  THIS CAN BE DONE WITH ONE PILOT STATEMENT:",2410,"T:",2420,"T:        8430 C(D<0):",2430,"T:",2440,"T:WHAT IS THE CORRECT OBJECT +",2450,"A:",2460,"M:D=-D,D =-D,D = -D,D= -D",2470,"CN:E=1",2480,"Y:VERY GOOD!",2490,"N:I AM AFRAID NOT.  IT IS SIMPLY D=-D.",2500,"T:THUS OUR PROGRAM BECOMES:",2510,"T:",2520,"T:        8400 T:HOW MANY CENTIMETERS IN ONE INCH + "
2530,".T:        8410 A:#X",2540,"T:        8420 C:D=2.54-X",2550,"T:        8430 C(D<0):D=-D",2560,"T:        8440 T(D<=0.04):VERY GOOD!",2570,"T:        8450 T(D>0.04):NOT QUITE.",2580,"J(E=0):*UROK",2590,"T:",2600,"T:OK, TRY THIS PROGRAM ON FOR SIZE!",2610,"*OK T:",2620,"T:   HOW MANY CENTIMETERS IN ONE INCH +",2630,"C:C=0",2640,"A:#C",2650,"C:C=2.54-C"
2660,"C(C<0):C=-C",2670,"T(C<=.4):   VERY GOOD!",2680,"T(C>.4):   NOT QUITE.",2690,"T:",2700,"C:F=F+1",2710,"T(F=1):AGAIN.",2720,"T(F=2):AND AGAIN.",2730,"T(F=3):ONCE MORE.",2740,"J(F<4):*OK",2750,"*UROK T:",2760,"T:EXCEPT FOR INTEGER RESPONSES IT IS BEST TO GO THROUGH SOMETHING +",2770,"T:LIKE THIS FOR NUMERIC RESPONSES, EVEN FOR SIMPLE DECIMAL +",2780,"T:NUMBERS.  THE COMPUTER CANNOT REPRESENT MOST DECIMALS EXACTLY, +"
2790,"T:HENCE SOMETHING LIKE:  7320 T(X=.1): ... +",2800,"T:MAY NEVER BE EXECUTED EVEN IF '0.1' HAS BEEN PREVIOUSLY STORED +",2810,"T:IN X.  SOMEWHERE, PERHAPS IN THE SEVENTH DECIMAL PLACE, X MAY +",2820,"T:DIFFER SLIGHTLY FROM 0.1, AND THE TEST WILL FAIL.",2830,"T:",2840,"T:ANOTHER USEFUL WAY TO MODIFY THE VALUE OF A NUMERIC VARIABLE IS +",2850,"T:TO REPLACE IT WITH THE GREATEST INTEGER LESS THAN OR EQUAL TO +",2860,"T:THE ORIGINAL NUMBER.",2870,"T:FOR 4.7, WHAT IS THIS INTEGER +",2880,"A:#A",2890,"T(A=4):RIGHT ON!"
2900,"T(A#4):NOPE, IT IS SIMPLY 4.",2910,"T:HOW ABOUT 0.247 +",2920,"C:A=9",2930,"A:#A",2940,"M:ZER,O",2950,"CY:A=0",2960,"T(A=0):BEAUTIFUL!",2970,"T(A):SORRY, IT IS ZERO.",2980,"T:OK, TRY 6.00 +",2990,"A:#A",3000,"T(A=6):GOOD.",3010,"T(A#6):THE GREATEST INTEGER LESS THAN OR EQUAL TO 6 IS JUST 6!",3020,"T:AND -2.7 +"
3030,"A:#A",3040,"T(A=-3):EXCELLENT!",3050,"T(A=-2):THAT IS A COMMON MISTAKE, BUT +",3060,"T(A#-3):IT IS -3 THAT SATISFIES THE REQUIREMENT.",3070,"T:FINALLY, -7.00 +",3080,"A:#A",3090,"T(A=-7):PERFECT!  +",3100,"T(A#-7):AARGH!  NO!  IT IS VERY SIMPLY AND CORRECTLY -7!  +",3110,"T:NOTE THAT FOR POSITIVE NUMBERS THIS GREATEST INTEGER FUNCTION +",3120,"T:IS EQUIVALENT TO JUST THROWING AWAY ANY DECIMAL PORTION; +",3130,"T:HOWEVER, THIS SIMPLE-MINDED DESCRIPTION IS NOT ADEQUATE FOR +",3140,"T:NEGATIVE NUMBERS."
3150,"T:THIS OPERATION IS DIFFICULT, IF NOT IMPOSSIBLE, TO DO WITH THE +",3160,"T:COMMON ARITHMETIC OPERATORS AS ALLOWED IN THE COMPUTE +",3170,"T:STATEMENT, YET IT IS SUFFICIENTLY USEFUL TO BE INCLUDED IN THE +",3180,"T:PILOT LANGUAGE.",3190,"T:A NEW INSTRUCTION IS USED, WHAT DO YOU THINK IT IS +",3200,"A:",3210,".M:[.I]",3220,"Y:YOU ARE SO RIGHT!  +",3230,"JY:*SORIGHT",3240,".M:[I]",3250,"Y:THAT IS A GOOD GUESS, BUT +",3260,"N:NOPE, +",3270,"*SORIGHT T:THE INTEGER FUNCTION (REALLY THE GREATEST INTEGER THAT +"
3280,"T:IS LESS THAN OR EQUAL TO) IS DESIGNATED BY THE +",3290,"T:EXTENDED INSTRUCTION '.I'.  EXAMPLES ARE:",3300,"T:",3310,"T:          3710 .I:X",3320,"T:          4290 .I:S",3330,"T:          6660 .I(X>9):X",3340,"T:",3350,"T:WHAT ARE THE OBJECTS OF THESE INTEGER FUNCTION STATEMENTS +",3360,"A:",3370,".M:[LET*ER,ALPH*CHARAC",3380,"Y:THAT IS TRUE, BUT WHAT ELEMENT OF PILOT IS THAT +",3390,"AY:",3400,"M:VARIABL"
3410,"Y:EXACTLY!  +",3420,"N:WELL, QUITE PROPERLY +",3430,"T:THE OBJECT IS A SINGLE NUMERIC VARIABLE.  ITS VALUE IMMEDIATELY +",3440,"T:BEFORE THE EXECUTION OF THE STATEMENT IS REPLACED BY THE +",3450,"T:GREATEST INTEGER THAT IS LESS THAN OR EQUAL TO IT.",3460,"T:TO SEE A POSSIBLE USE, CONSIDER:",3470,"T:",3480,"T:         3250 T:THREE IS WHAT PERCENT OF 24 + ",3490,".T:         3260 A:#P",3500,"T:         3270 .I:P",3510,"T:         3280 T(P=12):EXCELLENT!",3520,"T:         3290 T(P#12):NOPE.",3530,"T:"
3540,"T:WHAT IS THE SMALLEST NUMBER FOR WHICH 'EXCELLENT' WILL BE +",3550,"T:PRINTED +",3560,"A:#A",3570,"T(A=12):RIGHT ON!",3580,"T(A#12):WELL, VERY SIMPLY 12.",3590,"T:HERE THE CORRECT ANSWER IS 12.5, BUT ANYTHING FROM 12 UP TO +",3600,"T:(BUT NOT INCLUDING) 13 IS ACCEPTABLE.  THE .I VERY EASILY +",3610,"T:SETS UP THE RANGE.",3620,"T:A MORE IMPORTANT USE IS FOR ROUNDING.  THE INTEGER FUNCTION AS +",3630,"T:GIVEN DOES NOT ROUND, IT MERELY TRUNCATES.  ROUNDING CAN BE +"
3640,"T:ACHIEVED IN QUITE A STRAIGHTFORWARD MANNER BY:",3650,"T:",3660,"T:         4560 C:X=X+.5",3670,"T:         4570 .I:X",3680,"T:",3690,"T:WHAT WILL BE STORED IN X IF IT PREVIOUSLY HAD 4.00 +",3700,"A:#A",3710,"T(A=4):EXACTLY.",3720,"T(A#4):WELL, 4.00 + 0.5 IS 4.50 WHICH INTEGERIZES TO 4.",3730,"T:HOW ABOUT 4.6 +",3740,"C:A=0",3750,"A:#A",3760,"T(A=5):COOL!"
3770,"T(A#5):NO, 4.6 + 0.5 IS 5.1 WHICH BECOMES 5.",3780,"T:OK, TRY -2.1 +",3790,"A:#A",3800,"T(A=-2):RIGHT!",3810,"T(A#-2):SORRY, -2.1 + 0.5 IS -1.6 WHICH BECOMES -2.",3820,"T:AND WHAT DOES -5.7 BECOME +",3830,"A:#A",3840,"T(A=-6):PERFECT!",3850,"T(A#-6):MY, MY, NO.  -5.7 + 0.5 IS -5.2 WHICH BECOMES -6.",3860,"T:",3870,"T:NOTE THAT THE WAY THE INTEGER FUNCTION IS DEFINED MAKES THE +",3880,"T:ROUNDING OPERATION WORK FOR BOTH POSITIVE AND NEGATIVE VALUES.  +"
3890,"T:IF IT SIMPLY DISCARDED THE DECIMAL PART, THEN THERE WOULD HAVE +",3900,"T:TO BE SPECIAL TESTS AND HASSELING TO DO THE ROUNDING.",3910,"T:YOU CAN ROUND TO ANY POINT YOU WISH.  CONSIDER THE FOLLOWING TO +",3920,"T:ROUND TO THE NEAREST HUNDRETH (PENNY??):",3930,"T:",3940,"T:        7310 C:Q=Q*100+.5",3950,"T:        7320 .I:Q",3960,"T:        7330 C:Q=Q/100",3970,"T:",3980,"T:OK, IF Q ORIGINALLY CONTAINS 3.14159, WHAT IS THE NEW VALUE +",3990,"A:#A",4000,"C:A=3.14-A",4010,"C(A<0):A=-A"
4020,"T(A<.0005):FAR OUT!  YOU ARE WITH IT TODAY.",4030,"J(A<.0005):*FAROUT",4040,"T:LET'S TAKE THIS STEP BY STEP.  FIRST, AFTER STATEMENT 7310 +",4050,"T:WHAT IS STORED IN Q +",4060,"A:#A",4070,"C:A=314.659-A",4080,"C(A<0):A=-A",4090,"T(A<.1):EXACTLY.",4100,"T(A>=.1):NO WAY, YOU SHOULD GET 314.159+.5 WHICH IS 314.659!",4110,"T:NOW AFTER STATEMENT 7320 +",4120,"A:#A",4130,"T(A=314):OK.",4140,"T(A#314):I SHOULD SAY NOT!  IT IS SIMPLY 314!"
4150,"T:NOW, AFTER 7330 +",4160,"A:#A",4170,"C:A=3.14-A",4180,"C(A<0):A=-A",4190,"T(A<.0005):NOW WHY NOT THAT TO BEGIN WITH!",4200,"T(A>=.0005):OH BOY!  YOU SEEM TO HAVE A BIT OF A PROBLEM WITH +",4210,"T(A>=.0005):YOUR ARITHMETIC.  THE RESULT IS SIMPLY 3.14!",4220,"T:LET'S TRY IT, TO HELP CONVINCE YOU.",4230,"*ROUNDABOUT T:",4240,"T:ENTER A NUMBER +",4250,"A:#B",4260,"JB:*ROUNDABOUT",4270,"C:A=100*B+.5"
4280,".I:A",4290,"C:A=A/100",4300,"T:YOU ENTERED #B+, ROUNDED IT IS #A",4310,"C:K=K+1",4320,"J(K<4):*ROUNDABOUT",4330,"T:",4340,"T:DO YOU BELIEVE THIS WORKS AS ADVERTISED +",4350,"A:",4360,".M:[Y],[YE,RIGHT,OF*COURS,CERT,SURE,EXACTL,QUITE,BELIEV",4370,"Y:GOOD!",4380,"C:K=1",4390,"JN:*ROUNDABOUT",4400,"*FAROUT T:"
4410,"T:THERE IS ONE FURTHER SPECIAL FUNCTION AVAILABLE IN PILOT AND +",4420,"T:THAT IS THE RANDOM NUMBER FUNCTION.  IT IS DESIGNATED BY THE +",4430,"T:INSTRUCTION '.X' AND RETURNS A RANDOM VALUE BETWEEN ZERO AND +",4440,"T:ONE.",4450,"T:WHAT PART OF THE STATEMENT DO YOU THINK DESIGNATES WHICH +",4460,"T:VARIABLE GETS THE RANDOM NUMBER +",4470,"A:",4480,".M:OBJECT,RIGHT*:,RIGHT*COLON,AFT*:AFT*COLON",4490,"Y:MY YES, +",4500,"N:I DON'T RECOGNIZE THAT AS CORRECT.  +"
4510,"T:THE OBJECT OF THE RANDOM NUMBER FUNCTION DESIGNATES THE +",4520,"T:VARIABLE WHICH ENDS UP WITH THE RANDOM VALUE.  HERE ARE SOME +",4530,"T:EXAMPLES:",4540,"T:",4550,"T:          3190 .X:A",4560,"T:          4560 .XY:J",4570,"T:          7170 .X(S#4):T",4580,"T:",4590,"T:HOW IS THIS SIMILIAR TO THE INTEGER FUNCTION +",4600,"A:",4610,".M:VAR*OBJECT,OBJECT*VAR,EXACT*SAM",4620,"Y:OK, +",4630,"N:THAT IS AN INTERESTING ANSWER; HOWEVER, +"
4640,"T:THE RANDOM NUMBER FUNCTION IS EXACTLY THE SAME EXCEPT FOR THE +",4650,"T:INSTRUCTION AND THE PURPOSE OF THE STATEMENT.",4660,"T:THE PREVIOUS VALUE STORED IN THE NUMERIC VARIABLE IS LOST WHEN +",4670,"T:THE RANDOM NUMBER FUNCTION IS EXECUTED AND IT TAKES ON THE NEW +",4680,"T:RANDOM NUMBER.",4690,"T:LET'S TRY A FEW!  HOW MANY WOULD YOU LIKE +",4700,"C:N=10",4710,"A:#N",4720,"TB:WELL, SINCE YOU DIDN'T SPECIFY A NUMBER I WILL GIVE YOU 10.",4730,"T(N<3):LET'S TRY AT LEAST A FEW, HOW ABOUT 10!",4740,"C(N<3):N=10"
4750,"T(N>20):THAT IS QUITE A FEW.  LET'S TRY ONLY 20 AT FIRST.",4760,"C(N>20):N=20",4770,"T:",4780,"*4IL C:I=I+1",4790,".X:A",4800,"T:#A+",4810,"J(I<N):*4IL",4820,"T:",4830,"T:",4840,"J(P):*NMR",4850,"T:THESE ARE JUST RANDOM VALUES.  RE-EXECUTING, WE GET:",4860,"T:",4870,"C:I=0"
4880,"C:P=1",4890,"J:*4IL",4900,"*NMR T:SOMETIMES ONE WISHES RANDOM INTEGERS BETWEEN ONE +",4910,"T:AND TEN (AS AN EXAMPLE).  BY COMBINING THE .I AND THE .X +",4920,"T:STATEMENTS THIS CAN BE EASILY DONE.  CONSIDER:",4930,"T:",4940,"T:        8720 .X:A",4950,"T:        8730 C:A=10*A+1",4960,"T:        8740 .I:A",4970,"T:",4980,"T:AFTER THE EXECUTION OF 8730 'A' CONTAINS A VALUE 1 <= A < 11 +",4990,"T:WHICH WHEN INTEGERIZED BY 8740 PRODUCES A RANDOM INTEGER +",5000,"T:UNIFORMLY DISTRIBUTED FROM 1 TO 10."
5010,"T:HOW WOULD YOU REWRITE 8730 SO THAT THIS ROUTINE PRODUCES A +",5020,"T:UNIFORM DISTRIBUTION OF INTEGERS FROM ZERO TO 100??",5030,"A:",5040,"M:+1,1+",5050,"Y:YOU'RE COMPLICATING IT AND THAT MAKES IT WRONG!",5060,"JY:*COMPLICATE",5070,"M:101*A,A*101",5080,"Y:FANTASTIC!  +",5090,"N:NOT QUITE, +",5100,"*COMPLICATE T:SINCE 101 DIFFERENT INTEGERS ARE REQUIRED STARTING +",5110,"T:WITH ZERO, THE PROPER STATEMENT TO ACHEIVE THIS IS JUST:",5120,"T:",5130,"T:        8730 C:A=101*A"
5140,"T:",5150,"T:IN SOME PARTICULAR PROGRAM YOU MAY WANT TO USE THIS ROUTINE IN +",5160,"T:SEVERAL DIFFERENT PLACES.  ONE WAY WOULD BE TO WRITE IT OVER +",5170,"T:EACH TIME YOU WISHED TO GENERATE A RANDOM VALUE.  (ACTUALLY, +",5180,"T:SINCE THIS ROUTINE IS SO SHORT, THIS WOULDN'T BE TOO BAD, BUT +",5190,"T:TRY IT WITH A 30 OR 70 STATEMENT ROUTINE!)",5200,"T:CAN YOU THINK OF ANOTHER WAY??",5210,"A:",5220,".M:[Y],[YE,RIGHT,OF*COURS,CERT",5230,"Y:OK, WHAT +",5240,"AY:",5250,".M:[J],[JUMP"
5260,"Y:THAT IS A WAY BUT SOMEWHAT CLUMSY!  LET ME ILLUSTRATE:",5270,"JY:*CLUMSY",5280,".M:[U],[USE,SUBROUTIN",5290,"Y:AHA, YOU ARE ON TOP TODAY!",5300,"JY:*OVERCLUMSY",5310,"T:THERE ARE TWO OTHER POSSIBLE METHODS THAT I CAN THINK OF.  ONE +",5320,"T:IS BY THE USE OF JUMP STATEMENTS WITH CONDITIONS.  CONSIDER:",5330,"*CLUMSY T:",5340,"T:       2710 C:I=1",5350,"T:       2720 J:*RANDOM",5360,"T:       2730 *BACK1 ...",5370,"T:        .",5380,"T:       4960 C:I=2"
5390,"T:       4970 J:*RANDOM",5400,"T:       4980 *BACK2 ...",5410,"T:        .",5420,"T:       9800 *RANDOM R:  RANDOM INTEGER (1-10) ROUTINE",5430,"T:       9810 .X:A",5440,"T:       9820 C:A=10*A+1",5450,"T:       9830 .I:A",5460,"T:       9840 J(I=1):*BACK1",5470,"T:       9850 J(I=2):*BACK2",5480,"T:        .",5490,"T:",5500,"T:WHAT PURPOSE DOES 'I' SERVE +",5510,"A:"
5520,".M:RETURN,REMEMB,COM*BACK,JUMP,CAM*FROM,[AD*RES],INDEX",5530,"Y:RIGHT!  +",5540,"N:WELL, +",5550,"T:THE VARIABLE 'I' GIVES INFORMATION AS TO WHERE THE COMPUTER IS +",5560,"T:TO RETURN TO AFTER EXECUTING THE ROUTINE.  THUS THE ROUTINE MAY +",5570,"T:BE USED AS MANY TIMES AND IN AS MANY DIFFERENT PLACES AS ONE +",5580,"T:WISHES.  NOTE, HOWEVER, THAT TO USE IT INVOLVES AT LEAST FOUR +",5590,"T:STATEMENTS, AND THAT THE ROUTINE ITSELF MUST BE MODIFIED WHEN +"
5600,"T:IT IS TO BE USED IN A DIFFERENT PLACE.  IT WOULD BE NICE IF THE +",5610,"T:PILOT LANGUAGE HAD SOME PROVISION TO DO THIS EASILY AND +",5620,"T:AUTOMATICALLY.  BEHOLD!  IT DOES!!!",5630,"T:TWO NEW STATEMENTS PROVIDE THIS SERVICE.  THE FIRST IS A 'USE' +",5640,"T:STATEMENT.  WHAT IS THE INSTRUCTION FOR THIS +",5650,"A:",5660,"M:.U",5670,"Y:YOU OUTSMARTED YOURSELF!  +",5680,"JY:*OUTSMART",5690,".M:[U]",5700,"Y:VERY, VERY GOOD!  +",5710,"N:NO WAY, +",5720,"*OUTSMART T:IT IS SIMPLY THE SINGLE LETTER 'U'.  +"
5730,"*OVERCLUMSY T:THE USE STATEMENT LOOKS LIKE:",5740,"T:",5750,"T:        4500 U:*RANDOM",5760,"T:        4980 UY:*GOPROCESSTHEGOODS",5770,"T:        7350 U(B<M):*BEAMDOWN",5780,"T:",5790,"T:WHICH OTHER PILOT STATEMENT DOES THIS RESEMBLE +",5800,"A:",5810,".M:[J],[JUMP",5820,"Y:OF COURSE!",5830,"N:HEY, WAKE-UP OUT THERE!  THIS IS JUST LIKE A JUMP STATEMENT!",5840,"T:THUS OUR SAMPLE PROGRAM BEGINS LIKE THIS:",5850,"T:"
5860,"T:       2710 U:*RANDOM",5870,"T:       2720  ...",5880,"T:        .",5890,"T:       4960 U:*RANDOM",5900,"T:       4970  ...",5910,"T:        .",5920,"T:       9800 *RANDOM R:  RANDOM INTEGER (1-10) ROUTINE",5930,"T:       9810 .X:A",5940,"T:       9820 C:A=10*A+1",5950,"T:       9830 .I:A",5960,"T:       9840 E:  RANDOM ROUTINE END",5970,"T:        .",5980,"T:"
5990,"T:WHAT DO YOU THINK THE 'E' STATEMENT DOES +",6000,"A:",6010,".M:[END,RETURN,GOES*BACK,BRANCH",6020,"Y:TOO MUCH!!  YOU'RE A REAL COOL DUDE!  +",6030,"N:THIS IS A TOUGHY, A NEW STATEMENT SPRUNG ON YOU UNAWARES!  +",6040,"T:THE 'E' STANDS FOR 'END' AND TELLS THE COMPUTER TO JUMP BACK TO +",6050,"T:THE NEXT STATEMENT AFTER THE LAST EXECUTED USE STATEMENT.  THUS +",6060,"T:THE ORDER OF EXECUTION WILL BE:",6070,"T:",6080,"T: 2710 --> 9800 --> 9810 --> 9820 --> 9830 --> 9840 --> 2720 --> .",6090,"T:"
6100,"T:IF THE USE AT 4960 IS EXECUTED WHERE WILL THE END IN 9840 +",6110,"T:RETURN CONTROL TO AFTER THE ROUTINE IS EXECUTED +",6120,"A:",6130,"M:4970",6140,"Y:FAR OUT!  +",6150,"N:NOPE, +",6160,"T:SINCE 4960 WAS THE LAST EXECUTED USE, THE END WILL CAUSE A JUMP +",6170,"T:BACK TO THE NEXT STATEMENT AFTER IT.",6180,"T:WHAT PURPOSE DO YOU THINK THE OBJECT OF THE END STATEMENT SERVES?",6190,"A:",6200,".M:[NONE,[NO*PURP,[NOTHI,[LIST,INFORM,[R],[REM",6210,"Y:VERY ASTUTE!  +",6220,"N:I DON'T QUITE UNDERSTAND THAT.  +"
6230,"T:IT SERVES EXACTLY THE SAME PURPOSE AS THE OBJECT OF THE REMARK +",6240,"T:STATEMENT AND THAT IS JUST TO INFORM THE PERSON WHO LOOKS AT +",6250,"T:THE LISTING.",6260,"T:OK, WHAT HAPPENS IF AN 'END' IS ENCOUNTERED AND EXECUTED BEFORE +",6270,"T:A 'USE' HAS BEEN EXECUTED +",6280,"A:",6290,".M:[STOP,[HALT,[TRY*AGAIN,END*PROGRAM",6300,"Y:YOU'RE A REAL SWINGER!  +",6310,"N:WOOPS, +",6320,"T:SINCE THERE HAS NOT BEEN A 'USE', THE COMPUTER DOES NOT KNOW +",6330,"T:WHERE TO 'RETURN' TO, SO IT MERELY ENDS THE PROGRAM!"
6340,"T:THE USE ROUTINES MAY BE 'NESTED', THAT IS, INSIDE ONE ROUTINE +",6350,"T:ENTERED BY A 'USE' STATEMENT THERE MAY BE ANOTHER USE TO +",6360,"T:BRANCH TO ANOTHER ROUTINE.  HERE IS AN EXAMPLE STRUCTURE:",6370,"T:",6380,"T:         1940 U:*ONEROUTINE",6390,"T:         1950 ...",6400,"T:          .",6410,"T:         2340 U:*ONEROUTINE",6420,"T:         2350 ...",6430,"T:          .",6440,"T:         5600 U:*TWOROUTINE",6450,"T:         5610 ...",6460,"T:          ."
6470,"T:         8200 *ONEROUTINE R:     -",6480,"T:          .                       !",6490,"T:         8280 U:*TWOROUTINE       !",6500,"T:         8290 ...                 !",6510,"T:          .                       !",6520,"T:         8430 E:                 -",6530,"T:          .",6540,"T:         8600 *TWOROUTINE R:     -",6550,"T:          .                       !",6560,"T:         8730 E:                 -",6570,"T:",6580,"T:WHAT STATEMENT IS EXECUTED IMMEDIATELY AFTER 8730 +",6590,"A:"
6600,"M:8290",6610,"M:5610",6620,".D:2",6630,"Y:FANTASTIC, YOU GOT BOTH POSSIBLE ANSWERS, OUT OF SIGHT!",6640,"JY:*FB",6650,".D:1",6660,"Y:GOOD, BUT YOU OVERLOOKED ONE.  +",6670,"N:OH BOY!  I THINK YOU MISSED SOMETHING IN THE TRANSLATION!  +",6680,"MY:5610",6690,"Y:YOU DETECTED THE FIRST ONE, BUT YOU MISSED THE TRICKY ONE +",6700,"Y:INSIDE THE 'ONE' ROUTINE.",6710,"M:8290",6720,"Y:YOU GOT THE TRICKY ONE, BUT DIDN'T NOTICE THE 'USE' AT 8280!"
6730,"T:BOTH 'USE' STATEMENTS THAT REFERENCE 'TWOROUTINE' WILL SET THE +",6740,"T:'RETURN' SO THAT THE 'END' BRANCHES BACK PROPERLY.",6750,"*FB T:LET'S SEE THE FLOW FOR THIS PROGRAM:",6760,"T:",6770,"T:    1940 U:*ONE    -->  2340 U:*ONE    -->  5600 U:*TWO",6780,"T:     8200 *ONE    /      8200 *ONE    /      8600 *TWO",6790,"T:      .          ^        .          ^        .",6800,"T:     8280 U:*TWO ^       8280 U:*TWO ^       8730 E:",6810,"T:      8600 *TWO  ^        8600 *TWO  ^      5610"
6820,"T:       .         ^         .         ^       .",6830,"T:      8730 E:    ^        8730 E:    ^",6840,"T:     8290        ^       8290        ^",6850,"T:      .          ^        .          ^",6860,"T:     8430 E:     ^       8430 E:     ^",6870,"T:    1950        /       2350        /",6880,"T:     .    --> -          .    --> -",6890,"T:",6900,"T:HERE EACH LEVEL OF 'USE' ROUTINE IS INDENTED ONE SPACE TO HELP +",6910,"T:YOU FOLLOW THE PROGRAM.  WHERE ONE ROUTINE USES ANOTHER IS +"
6920,"T:CALLED 'NESTING'.  USE ROUTINES MAY BE NESTED UP TO 6 DEEP!",6930,"T:HOW MANY LEVELS IS THIS PROGRAM ABOVE NESTED +",6940,"A:#L",6950,"T(L=2):PERFECT!  +",6960,"T(L<1):YOU ARE TOO LOW!  +",6970,"T(L>1):TOO MUCH!!  +",6980,"T:THE OUTER ROUTINE (FIRST ONE CALLED) IS LEVEL ONE, THE SECOND +",6990,"T:IS LEVEL TWO.",7000,"T:WHAT LEVEL IS THE 'MAIN LINE' PROGRAM BEFORE ANY USE IS +",7010,"T:EXECUTED +",7020,"C:L=9",7030,"A:#L",7040,"M:ZER,O"
7050,"CY:L=0",7060,"T(L=0):WILD, MAN!  WILD!!  YOU ARE EXACTLY RIGHT.  +",7070,"T(L):NO WAY, +",7080,"T:BEFORE ANY USE STATEMENT IS EXECUTED THE 'USE LEVEL' IS MERELY +",7090,"T:ZERO!",7100,"T:ANY EXECUTED END STATEMENT REDUCES THE USE LEVEL BY ONE, EXCEPT +",7110,"T:FOR LEVEL ZERO!  WHAT HAPPENS THEN +",7120,"A:",7130,".M:[HALT,[STOP,TRY*AGAIN,END*PROGR",7140,"Y:FANTASTIC!!  YOU REMEMBERED!!",7150,"N:WE JUST DID THIS!  SIGH!  THE PROGRAM ENDS!",7160,"T:HOW DOES THE USE LEVEL CHANGE FOR AN EXECUTED USE STATEMENT??",7170,"A:"
7280,"T:WELL, IT IS TIME TO STRETCH YOUR LEGS!  WE ARE ALMOST FINISHED!",7290,"T:TELL ME, WHAT IS YOUR NICKNAME +",7300,"A:$NAME",7310,"T:FINE!  WE HAVE ONLY ONE MORE STATEMENT TO DISCUSS AND YOU WILL +",7320,"T:KNOW AS MUCH ABOUT PILOT AS I DO!",7330,"T:WHAT KIND OF STATEMENT EXAMINES A STUDENT'S RESPONSE FOR A +",7340,"T:PARTICULAR ANSWER??",7350,"A:",7360,".M:[M],[MATCH",7370,"Y:WOW!  YOU REMEMBERED FROM THE SECOND LESSON!",7380,"JY:*WOWMATCH",7390,"T:I AM DISAPPOINTED, YOU DID NOT REMEMBER.  IT IS THE MATCH +"
7400,"T:STATEMENT!  IT LOOKS LIKE:",7410,"T:",7420,"T:         4530 M:PILOT,BASIC,FORTRAN,SNOBOL",7430,"T: OR      6790 M:COW,SHEEP,GOAT,$PREVIOUS,$LAST",7440,"T:",7450,"T:WHAT ARE THE ITEMS DELIMITED BY COMMAS CALLED +",7460,"A:",7470,"M:ALTERNAT,KEYWORD",7480,"Y:OK, THAT WASN'T SO HARD!  +",7490,"N:SORRY, +",7500,"T:THEY ARE CALLED ALTERNATIVES AND MAY INCLUDE A PREVIOUSLY +",7510,"T:REFERENCED STRING VARIABLE.",7520,"*WOWMATCH T:THE SIMPLE MATCH IS FAIRLY POWERFUL, BUT IT CERTAINLY +"
7530,"T:IS FAR FROM PERFECT.  CONSIDER:",7540,"T:",7550,"T:        1300 T:NAME THE FOURTH LETTER OF THE ALPHABET + ",7560,"T:        1310 A:",7570,"T:        1320 M:D",7580,"T:        1330 Y:RIGHT!",7590,"T:        1340 N:NOPE.",7600,"T:",7610,"T:OK $NAME+, WHAT WILL BE TYPED OUT IF 'I DON'T KNOW' IS ENTERED??",7620,"A:",7630,"M:RIGHT",7640,"Y:EXACTLY!  +",7650,"N:THAT IS NOT CORRECT.  +"
7660,"T:SINCE THERE IS THE LETTER 'D' SOMEWHERE WITHIN THE RESPONSE, +",7670,"T:THE MATCH WILL BE SUCCESSFUL.  IN THIS CASE WHAT IS NEEDED IS +",7680,"T:A METHOD WHEREBY YOU COULD CHECK IF THE D DID NOT OCCUR WITHIN +",7690,"T:A WORD.",7700,"T:THERE IS SUCH A METHOD $NAME+!!  IT IS AN EXTENDED MATCH +",7710,"T:STATEMENT.  (THE LAST PILOT STATEMENT TO LEARN!!)",7720,"T:GUESS THE INSTRUCTION +",7730,"A:",7740,".M:[.M]",7750,"Y:HOORAY!!",7760,"N:AARGH, LET'S BE LOGICAL.  EXTENDED INSTRUCTIONS BEGIN WITH A +"
7770,"N:PERIOD (.) AND HAVE A SINGLE LETTER, SINCE IT IS A KIND OF +",7780,"N:MATCH STATEMENT IT IS MOST LOGICAL TO GUESS THE LETTER IS AN M.",7790,"T:THE EXTENDED MATCH IS JUST '.M'.  AND IT IS VERY SIMILIAR IN +",7800,"T:APPEARANCE TO THE ORDINARY MATCH.  HOWEVER, IT HAS SOME +",7810,"T:ADDITIONAL FEATURES.",7820,"T:THE FIRST IS THE 'BRACKET'.  AN EXAMPLE:",7830,"T:",7840,"T:        4560 .M:[MALE,SIX],[D],NONE",7850,"T:",7860,"T:NOTICE THAT EACH ALTERNATIVE IS STILL DELIMITED WITH A COMMA.  +"
7870,"T:THE LEADING AND TRAILING BRACKET ([ AND ], RESPECTIVELY) ARE +",7880,"T:SPECIAL SYMBOLS TO DESIGNATE A FURTHER CHECK BEFORE THE MATCH +",7890,"T:IS ACTUALLY DECLARED TO BE SUCCESSFUL.  THE CHARACTERS AFTER +",7900,"T:THE LEADING BRACKET ([) AND BEFORE THE TRAILING ONE (]) ARE +",7910,"T:USED AS IN AN +",7920,"T:ORDINARY MATCH. IF THEY ARE FOUND, THEN AN ADDITIONAL CHECK IS +",7930,"T:MADE.  IF A LEFT BRACKET BEGINS THE ALTERNATIVE, THEN NO +",7940,"T:ALPHABETIC CHARACTER MAY IMMEDIATELY PRECEED THE 'MATCHED' +"
7950,"T:CHARACTERS.  IF ONE DOES, THEN THE MATCH FAILS!",7960,"T:LET'S TRY A FEW:",7970,"T:WILL STATEMENT 4560 FAIL OR BE SUCCESSFUL FOR:",7980,"T:  FEMALE         +",7990,"A:",8000,".M:[F],[FAIL",8010,"CY:G=1",8020,"N:NO, THE MATCHED CHARACTERS ARE MALE, BUT AN 'E' IMMEDIATELY +",8030,"N:PRECEEDS IT, SO THE LEFT BRACKET CAUSES THE MATCH TO FAIL.",8040,"T:  MALEFACTOR     +",8050,"A:",8060,".M:[S],[SUC",8070,"CY:G=G+1"
8080,"N:NOPE, MALE IS THERE AND NO ALPHABETIC CHARACTER PRECEEDS IT!",8090,"T:  I AM SIXTEEN   +",8100,"A:",8110,".M:[F],[FAIL",8120,"CY:G=G+1",8130,"N:WOOPS, SIX IS THERE, BUT IS IMMEDIATELY FOLLOWED BY A LETTER, +",8140,"N:THUS THE ] WILL MAKE IT FAIL.",8150,"T:  ANONEMOUS      +",8160,"A:",8170,".M:[S],[SUC",8180,"CY:G=G+1",8190,"N:OH MY NO, NONE IS RIGHT THERE!",8200,"J(G=4):*ENOUGH"
8210,"T:  I DON'T KNOW   +",8220,"A:",8230,".M:[F],[FAIL",8240,"CY:G=G+1",8250,"N:NO, NO, NO!  A D IS PRESENT, BUT IT IS FOLLOWED BY A LETTER.",8260,"J(G=4):*ENOUGH",8270,"T:  NO WAY         +",8280,"A:",8290,".M:[F],[FAIL",8300,"CY:G=G+1",8310,"N:ARE YOU KIDDING??  THERE IS NO MATCH!",8320,"T(G>2):WELL, I THINK YOU UNDERSTAND.",8330,"T(G<3):MY, YOU CERTAINLY ARE NOT WITH IT TODAY!"
8340,"*ENOUGH T:NOTE THAT THE BRACKETS ARE OPTIONAL, AN ALTERNATIVE MAY +",8350,"T:HAVE A LEFT BRACKET AND/OR A RIGHT BRACKET OR NEITHER!",8360,"T:ALSO, ONLY A LEFT BRACKET THAT IS THE FIRST CHARACTER OF THE +",8370,"T:ALTERNATIVE, OR A RIGHT BRACKET THAT IS THE LAST CHARACTER HAS +",8380,"T:ANY EFFECT.  CONTRAST THIS WITH THE ORDINARY MATCH:",8390,"T:",8400,"T:        1200 M:[LEFT    <==>    2400 .M:[LEFT",8410,"T:",8420,"T:WHAT CHARACTERS WILL 1200 BE SUCCESSFUL FOR +",8430,"A:",8440,".M:[[LEFT]",8450,"Y:PRECISELY!  +"
8460,"N:AHA, I FOOLED YOU!  +",8470,"T:THE ORDINARY MATCH LOOKS FOR EVERYTHING BETWEEN THE DELIMITERS.",8480,"T:OK, HOW ABOUT:  .M:A[INPUT  +",8490,"A:",8500,".M:[A[INPUT]",8510,"Y:GOOD!  +",8520,"N:NO, +",8530,"T:SINCE THE [ DOES NOT OCCUR AT THE BEGINNING OF AN ALTERNATIVE +",8540,"T:IT IS IGNORED AND 'A[INPUT' ARE THE 'MATCHED' CHARACTERS.",8550,"T:",8560,"T:THE SECOND FEATURE OF THE .M IS THE ASTERISK DELIMITER.  WITH +",8570,"T:A COMMA THE DIFFERENT ALTERNATIVES ARE COMPLETELY INDEPENDENT.  +"
8580,"T:THE ASTERISK FORCES THE COMPUTER TO START LOOKING WHERE THE +",8590,"T:FIRST PART WAS FOUND FOR THE NEXT PORTION.  THIS IS EQUIVALENT +",8600,"T:TO CONSIDERING THAT THE * MATCHES ANY NUMBER OF CHARACTERS +",8610,"T:(INCLUDING ZERO).",8620,"T:",8630,"T:    4560 .M:NOT*HARD,EASY,NOT]*DIF*ICULT]",8640,"T:",8650,"T:HERE 'NOT' IS USED, THEN IF IT IS FOUND, 'HARD' IS USED +",8660,"T:STARTING AT THE POINT 'NOT' WAS FOUND.  THUS IT WILL MATCH:",8670,"T:",8680,"T:  NOT HARD    NOT VERY HARD    NOTHARD    NOTHING HARD"
8690,"T:",8700,"T:THE THIRD ONE HERE MAY BE ELIMINATED BY:  .M:NOT*[HARD",8710,"T:THE LAST TWO MAY BE ELIMINATED WITH:  .M:NOT]*HARD",8720,"T:WILL THE MATCH BE SUCCESSFUL OR FAIL IF:",8730,"T: 'NOT DIFFICULT' IS ENTERED +",8740,"A:",8750,".M:[S],[SUC",8760,"N:NO, 'NOT ' IS FOUND, THEN 'DIF', THEN 'ICULT.",8770,"T: HOW ABOUT 'NOT AT ALL DIFFICULT' +",8780,"A:",8790,".M:[S],[SUC",8800,"N:NOPE, IT IS SUCCESSFUL!",8810,"T: 'NOT VERY DIFICULT' +"
8820,"A:",8830,".M:[S],[SUC",8840,"N:AHA, FOOLED YOU, THE * CAN ALSO 'MATCH' 'NO CHARACTERS'!",8850,"T:",8860,"T:WELL $NAME+, THAT IS THAT!  YOU NOW CAN WRITE ANY PILOT PROGRAM +",8870,"T:USING ANY AND ALL OF THE POSSIBLE PILOT CONSTRUCTS.",8880,"T:",8890,"T:    GOOD LUCK $NAME+!",8900,"T:",8910,"E:    FINALLY!"
