10  REM ***  HP TIME-SHARED BASIC PROGRAM LIBRARY  *********************
11  REM
12  REM         TUT13:  TUTOR SERIES BASIC LANGUAGE PROGRAMMING COURSE,
13  REM                 (PART 13 OF 25)
14  REM         36139 (A810) REV A -- 7/71
15  REM
16  REM ***  CONTRIBUTED PROGRAM  **************************************
17  REM
100  PRINT "A SUBROUTINE MAY BE THOUGHT OF AS A PROGRAM WITHIN A PROGRAM."
110  PRINT "THE STANDARD FUNCTIONS ARE USUALLY SUBROUTINES, SINCE WHEN ONE"
120  PRINT "OF THEM IS CALLED FOR, THE MACHINE SUBSTITUTES THE ARGUMENT INTO"
130  PRINT "A SERIES (SUM OF TERMS) TO EVALUATE THE FUNCTION, WE MAY WRITE"
140  PRINT "OUR OWN SUBROUTINE FOR A PROCESS TO BE DONE MORE THAN ONCE IN"
150  PRINT "OUR MAIN PROGRAM. THE SUBROUTINE WILL BE EXECUTED WHEN THE MAIN"
160  PRINT "PROGRAM TRANSFERS CONTROL TO IT, NOTE THESE EXPRESSIONS:"
170  PRINT 
180  PRINT "   (1) GOSUB  (2) DOSUB  (3) GOFOR  (4) ROUTINE"
190  PRINT 
200  PRINT "WHICH LOOKS LIKE IT MIGHT CALL IN A SUBROUTINE (NUMBER ONLY)";
210  INPUT S
220  PRINT 
230  IF S=1 THEN 290
240  IF S <= 4 THEN 270
250  PRINT "WAIT A MINUTE, NOW, USE '1', '2', '3', OR '4'. AGAIN: WHICH";
260  GOTO 210
270  PRINT "IT DOESN'T, THOUGH, TRY ANOTHER ONE, OK";
280  GOTO 210
290  PRINT "THAT'S IT. FOR INSTANCE, 'GOSUB 400' MEANS 'GO TO THE PROGRAM"
300  PRINT "(SUBROUTINE)  WHICH BEGINS ON LINE 400' . AFTER THE SUBPROGRAM"
310  PRINT "HAS BEEN EXECUTED, CONTROL IS RETURNED TO THE STATEMENT AFTER"
320  PRINT "THE ONE WHICH CALLED FOR THE SUBROUTINE, HOW IS THIS DONE:"
330  PRINT 
340  PRINT "   (1) GOBACK  (2) MAIN  (3) RETURN  (4) GO TO"
350  PRINT 
360  PRINT "DO YOU THINK (NUMBER OF CHOICE) ";
370  INPUT R
380  PRINT 
390  IF R=3 THEN 420
400  PRINT "YOU HAVEN'T HIT THE RIGHT KEY, YET, NUMBER OF CHOICE....";
410  GOTO 370
420  PRINT "YOU'VE GOT IT, YOU USE THIS ONE AS THE LAST STATEMENT IN YOUR"
430  PRINT "SUBPROGRAM SO AS TO RETURN TO THE POINT WHERE YOU LEFT THE MAIN"
440  PRINT "PROGRAM. THE NEXT STATEMENT IN THE LATTER IS THEN EXECUTED."
460  PRINT "WE'LL TRY AN EXAMPLE."
540  PRINT "HERE'S ONE THAT WILL GIVE US THE MAXIMUM AND MINIMUM VALUES OF"
550  PRINT "N NUMBERS, ASSUMING NO TWO NUMBERS ARE EQUAL, I'LL LEAVE ONE OF"
590  PRINT "THE MAIN PROBLEM STATEMENTS BLANK; WHEN I STOP TYPING, YOU FILL"
600  PRINT "IT IN CORRECTLY SO THAT IT WILL CALL IN OUR SUBROUTINE."
620  FOR J=100 TO 130 STEP 10
630  PRINT 
640  PRINT "   ";J;"(MAIN PROGRAM STATEMENT)"
650  NEXT J
660  PRINT 
670  PRINT "   ";J
680  FOR J=150 TO 170 STEP 10
690  PRINT 
700  PRINT "   ";J;"(MAIN PROGRAM STATEMENT)"
710  NEXT J
720  PRINT 
730  PRINT "(THE NEXT 11 STATEMENTS CONSTITUTE THE SUBROUTINE)"
740  PRINT 
760  PRINT "   200 LET B=A(1)"
770  PRINT 
780  PRINT "   210 LET C=A(1)"
790  PRINT 
800  PRINT "   220 FOR I=2 TO N"
810  PRINT 
820  PRINT "   230 IF A(I)<B THEN 260"
830  PRINT 
840  PRINT "   240 IF A(I)>C THEN 265"
850  PRINT 
860  PRINT "   250 GO TO 268"
870  PRINT 
875  PRINT "   260 LET B=A(I)"
877  PRINT 
880  PRINT "   262 GO TO 268"
881  PRINT 
882  PRINT "   265 LET C=A(I)"
883  PRINT 
884  PRINT "   268 NEXT I"
890  PRINT 
900  PRINT "   270"
930  PRINT 
940  PRINT "NOW FILL IN LINE 140. WHAT STATEMENT DID YOU REFER TO";
950  INPUT U
960  PRINT 
961  IF U=140 THEN 966
962  IF U=200 THEN 975
963  PRINT "IT'S A LINE NUMBER IN THE SUBROUTINE.  WHICH ONE";
964  GOTO 967
966  PRINT "NO, I MEAN WHAT SUBROUTINE STATEMENT DID YOU REFER TO";
967  INPUT V
968  PRINT 
969  IF V=200 THEN 975
970  PRINT "IT HAS TO BE 200. THIS IS THE FIRST LINE IN THE SUBROUTINE. NOW"
971  GOTO 980
975  PRINT "RIGHT. SINCE THIS ONE IS THE FIRST LINE IN THE SUBROUTINE. NOW"
980  PRINT "FILL IN LINE 270. WHAT IS THE FIRST LETTER YOU PUT DOWN";
990  INPUT L$
1000  PRINT 
1010  PRINT "IT'S 'R', BECAUSE ALL YOU NEED HERE IS THE WORD 'RETURN'. THE"
1020  PRINT "COMPUTER WILL RETURN CONTROL TO LINE 150. SEE HOW IT'S DONE?"
1030  PRINT "TO COMPLETE THE PROGRAM, AN 'END' STATEMENT IS NECESSARY. THIS"
1040  PRINT "MUST CARRY THE HIGHEST LINE NUMBER - SUBROUTINES INCLUDED."
2000  PRINT 
2010  PRINT "IF THE SUBROUTINE OCCURS BETWEEN THE MAIN PROGRAM AND THE 'END'"
2020  PRINT "STATEMENT, A 'STOP' STATEMENT MAY ALSO BE NEEDED TO AVOID A"
2030  PRINT "'NONSENSE' OUTPUT. SO THE FINAL PROGRAM COULD IN GENERAL BE:"
2050  PRINT 
2060  PRINT "   100 (MAIN PROGRAM BEGINS)"
2070  PRINT "   .    ...."
2080  PRINT "   .    ...."
2100  PRINT "   140 GOSUB 200"
2110  PRINT "   . (MAIN PROGRAM RESUMES)"
2120  PRINT "   .    ...."
2130  PRINT "   190 STOP"
2140  PRINT "   200 (SUBROUTINE BEGINS)"
2150  PRINT "   .    ...."
2160  PRINT "   .    ...."
2170  PRINT "   270 RETURN"
2180  PRINT "   300 END"
2190  PRINT 
2200  PRINT "I HOPE YOU WILL TRY USING SUBROUTINES IN YOUR OWN PROGRAMS."
2210  PRINT "SO THAT YOU CAN BECOME PROFICIENT AT WRITING THEM."
2215  PRINT 
2220  PRINT "THERE IS AN EASY WAY OF ADDING GENERAL INFO TO YOUR PROGRAM."
2250  PRINT "THE COMPUTER WILL NOT EXECUTE (BUT IT WILL LIST) THE STATEMENT."
2255  PRINT "HERE IS AN EXAMPLE OF A REMARK:"
2260  PRINT 
2270  PRINT "   460 REM THIS PROGRAM COMPUTES PROBABLE HEAT LOSS"
2280  PRINT 
2290  PRINT "NOTE THAT A STATEMENT NUMBER IS REQUIRED. SINCE THE COMPUTER"
2300  PRINT "IGNORES A REMARK, CONTROL SHOULD NOT BE TRANSFERRED TO IT."
2310  PRINT "REMARKS, LIKE OTHER STATEMENTS, MUST PRECEDE 'END'. OBVIOUSLY"
2320  PRINT "THE PURPOSE OF 'REM' IS TO ENABLE A PROGRAMMER TO PUT COMMENTS"
2330  PRINT "THROUGHOUT HIS PROGRAM."
2340  PRINT "CALL 'TUT14' FOR YOUR NEXT LESSON."
2400  END 
