10  REM ***  HP TIME-SHARED BASIC PROGRAM LIBRARY  *********************
11  REM
12  REM         TUT12:  TUTOR SERIES BASIC LANGUAGE PROGRAMMING COURSE,
13  REM                 (PART 12 OF 25)
14  REM         36139 (A810) REV A -- 7/71
15  REM
16  REM ***  CONTRIBUTED PROGRAM  **************************************
17  REM
100  PRINT "BEFORE WE GO ON TO DEFINING FUNCTIONS, WOULD YOU LIKE TO REVIEW"
110  PRINT "THE MEANINGS OF THE STANDARD ONES (0=NO, 1=YES) ";
120  INPUT Y
130  PRINT 
140  IF Y=0 THEN 1020
150  IF Y=1 THEN 180
160  PRINT "PLEASE USE BINARY (ONLY '0' OR '1'), WHICH IS IT . . . . ";
180  PRINT "GOOD, USE THIS ANSWER SELECTION:"
190  PRINT 
200  PRINT "   (1) SIN(X)  (2) COS(X)  (3) TAN(X)  (4) ATN(X)"
210  PRINT 
220  PRINT "   (5) EXP(X)  (6) ABS(X)  (7) LOG(X)  (8) SQR(X)"
230  PRINT 
240  LET R=0
250  PRINT "USE THE NUMBER OF YOUR CHOICE FOR EACH QUESTION BELOW."
260  PRINT 
270  PRINT "WHICH FUNCTION FINDS THE ABSOLUTE VALUE";
280  INPUT A
290  LET R=R+1
300  PRINT 
310  IF A=6 THEN 360
320  PRINT "NOPE, THE FUNCTION NAME IS AN ABBREVIATION FOR WHAT IT DOES."
330  PRINT "TRY AGAIN - WHICH ONE....";
340  GOTO 280
350  GOTO 310
360  PRINT "GOOD, THE NEXT QUESTION IS HARDER: WHAT FUNCTION DETERMINES THE"
370  PRINT "NATURAL LOGARITHM OF 'X'";
380  INPUT A
390  LET R=R+1
400  PRINT 
410  IF A=7 THEN 440
420  PRINT "NO - CHECK THE ABBREVIATION FOR 'LOGARITHM'. NOW WHICH....";
430  GOTO 380
440  PRINT "VERY GOOD.  THE NEXT ONE IS EASY: WHAT'S THE SINE FUNCTION";
450  INPUT A
460  LET R=R+1
470  PRINT 
480  IF A=1 THEN 510
490  PRINT "TRY AGAIN, PLEASE. WHICH ONE....";
500  GOTO 450
510  PRINT "RIGHT. WHICH FUNCTION GIVES AN ANGLE WHOSE TANGENT IS 'X'";
520  INPUT A
530  LET R=R+1
540  PRINT 
550  IF A=4 THEN 580
560  PRINT "IT'S TRICKY. TRY AGAIN: WHICH IS IT..";
570  GOTO 520
580  PRINT "EXCELLENT.  NOW FOR THE HARDEST:  WHAT FUNCTION COMPUTES 'E^X'";
590  INPUT A
600  LET R=R+1
610  PRINT 
620  IF A=5 THEN 650
630  PRINT "WELL IT'S HARD. HINT: WHAT IS THE EXPONENTIAL (POWER) OF 'E'";
640  GOTO 590
650  PRINT "TERRIFIC, THE REST ARE TRIVIAL, SO WE MIGHT AS WELL MOVE ON."
660  IF R=5 THEN 680
670  GOTO 690
680  PRINT "BY THE WAY, YOU GET A 'BIG FAT GOLD STAR' FOR A PERFECT SCORE."
690  PRINT "HERE ARE SOME RESTRICTIONS WHICH APPLY TO CERTAIN FUNCTIONS:"
700  PRINT "THE ARGUMENT OF THE SINE, COSINE, AND TANGENT FUNCTIONS MUST"
710  PRINT " BE IN RADIAN MEASURE, THE ARCTANGENT GIVES AN ANGLE IN RADIANS."
720  PRINT 
730  PRINT "THE LOGARITHM OF A NEGATIVE NUMBER IS NOT DEFINED, SO IF THE"
740  PRINT " ARGUMENT IS NEGATIVE, AN ERROR MESSAGE WILL APPEAR.  IF 'SQR'"
750  PRINT "HAS A NEGATIVE ARGUMENT, THEN ANOTHER ERROR MESSAGE APPEARS."
770  PRINT "THE ARGUMENT OF A FUNCTION MAY BE ANY EXPRESSION, AS LONG AS IT"
780  PRINT "HAS A NUMERICAL VALUE."
790  PRINT 
800  PRINT "LET'S MAKE A TABLE OF 'X' AND 'SIN(X)' FOR 0<=X<=360 DEGREES IN"
810  PRINT "STEPS OF 60 DEGREES, HERE'S A PROGRAM WHICH WILL DO IT:"
820  PRINT 
830  PRINT "   10 LET X=3.14159/180      (DEGREES TO RADIANS)"
840  PRINT "   20 FOR I=0 TO 360 STEP 60 (START OF LOOP)"
850  PRINT "   30 PRINT I, SIN(X*I)      (OUTPUT STATEMENT)"
860  PRINT "   40 NEXT I                 (END OF LOOP)"
880  PRINT 
890  PRINT "IF YOU WOULD LIKE TO HAVE THIS PROGRAM RUN, TYPE '1', IF NOT,"
900  PRINT "TYPE ANY OTHER NUMBER, WOULD YOU....";
910  INPUT B
920  PRINT 
930  IF B <> 1 THEN 1040
940  LET X=3.14159/180
950  FOR I=0 TO 360 STEP 60
960  PRINT I,SIN(X*I)
970  NEXT I
980  PRINT 
990  PRINT "COLUMN HEADINGS WOULD PROBABLY HAVE IMPROVED THE OUTPUT, ALSO,"
1000  PRINT "TWO FUNCTIONS WERE NOT SHOWN ABOVE, 'INT' EXTRACTS THE WHOLE"
1010  GOTO 1060
1020  PRINT "OK, BUT TWO SHOULD INTEREST YOU, 'INT' EXTRACTS THE WHOLE"
1030  GOTO 1060
1040  PRINT "ANYWAY, IT DOES THE JOB. DON'T FORGET: IN ADDITION TO THE"
1050  PRINT "EIGHT FUNCTIONS ABOVE, THERE'S 'INT', WHICH EXTRACTS THE WHOLE"
1060  PRINT "NUMBER PART OF ANY NUMBER. IF N=27.68, THEN WHEN THE STATEMENT"
1070  PRINT "'PRINT INT(N)' IS USED, THE COMPUTER WILL PRINT '27', THE OTHER"
1080  PRINT "STANDARD FUNCTION IS 'RND(X)' WHICH GENERATES A NUMBER (NOT"
1090  PRINT "SPECIFIED) BETWEEN 0 AND 1, IT HAS AN UNUSED ('DUMMY') ARGUMENT."
1100  PRINT 
1110  IF Y=0 THEN 1130
1120  PRINT "I'LL REMIND YOU OF A PROGRAM ON STANDARD FUNCTIONS LATER, NOW"
1130  PRINT "LET'S SHOW HOW WE CAN WRITE OUR OWN FUNCTIONS, THIS IS DONE"
1140  PRINT "BY MEANS OF THE TERM 'DEF' (FOR 'DEFINE'), HERE IS AN EXAMPLE:"
1150  PRINT 
1160  PRINT "   DEF FNP(C) = C+.57*C"
1170  PRINT 
1180  PRINT "THE 'FN' MEANS 'FUNCTION' TO THE COMPUTER, AND 'P' IS THE NAME"
1190  PRINT "OF THE FUNCTION, A FUNCTION NAME IS A SINGLE LETTER, SO YOU"
1200  PRINT "ARE ALLOWED 26 PER PROGRAM, TYPE '1' IF YOU THINK 'C' IS THE"
1210  PRINT "ARGUMENT, OTHERWISE TYPE ANOTHER NUMBER, WHAT DO YOU SAY";
1220  INPUT A
1230  PRINT 
1240  IF A=1 THEN 1270
1250  PRINT "WRONG GUESS - 'C' IS OPERATED ON; THE RIGHT SIDE SHOWS HOW."
1260  GOTO 1280
1270  PRINT "OF COURSE, ANY FUNCTION NEEDS AN ARGUMENT, ON THE RIGHT SIDE."
1280  PRINT "'C+.57*C' WILL HAVE A VALUE DEPENDENT UPON THE SIZE OF 'C'.IF"
1290  PRINT "'P' IS A SALES PRICE BASED ON A 57 PERCENT MARKUP OVER COST,"
1300  PRINT "THEN THE EXPRESSION COULD BE READ: 'THE PRICE FUNCTION OF COST"
1310  PRINT "IS DEFINED AS C+.57*C'."
1320  PRINT 
1330  PRINT "THE FOLLOWING SAMPLE PROGRAM INCORPORATES THE ABOVE FUNCTION:"
1340  PRINT 
1350  PRINT "   100 DEF FNP(C) = C+.57*C"
1360  PRINT "   110 READ C"
1370  PRINT "   120 PRINT ''THE PRICE IS'';C;'%MARK UP IS''FNP(C)"
1380  PRINT "   130 DATA 1.00"
1390  PRINT "   140 END"
1410  PRINT 
1420  PRINT "FOR A COMPLICATED FUNCTION USED MORE THAN ONCE IN A PROGRAM,"
1430  PRINT "THE DEFINE STATEMENT HAS OBVIOUS ADVANTAGES, MORE EXAMPLES"
1440  PRINT "OF USING DEFINED FUNCTIONS WILL BE INCLUDED IN LATER LESSONS."
1450  PRINT 
1460  PRINT "WE'LL CONCLUDE THIS LESSON WITH A DISCUSSION OF SUBROUTINES"
1470  PRINT "AND A BRIEF EXPLANATION OF THE USE OF THE 'REMARK' STATEMENT."
1480  PRINT "YOU'LL FIND THESE THINGS IN THE PROGRAM CALLED 'TUT13'."
1490  IF Y=0 THEN 1520
1500  PRINT "REMEMBER, YOU CAN GET PRACTICE WITH STANDARD FUNCTIONS IF YOU"
1510  PRINT "CALL IN 'TUT11' BEFORE YOU DO 'TUT13', YOUR CHOICE...."
1520  END 
