
       SUBROUTINES
  Here's a simple program:
10 PRINT "THE"
20 GO TO 1000
30 PRINT "DEAD"
40 END

1000 PRINT "BIRD"
1010 PRINT "IS"
1020 GO TO 30
  It makes the computer print:
THE
BIRD
IS
DEAD
  The program consists of two parts. The main part (lines 10-40) 
is called the main routine; the bottom part (lines 1000-1020) is 
called the subroutine. The bottom line of the main routine says 
END.
  Line 20, which is in the main routine, makes the computer skip 
to the subroutine. Line 1020, in the subroutine, makes the 
computer return to the main routine.
  To make the program more elegant, change lines 20 and 1020:
10 PRINT "THE"
20 GOSUB 1000
30 PRINT "DEAD"
40 END

1000 PRINT "BIRD"
1010 PRINT "IS"
1020 RETURN
The new line 20 says: GO to the SUBroutine that begins at line 
1000. The new line 1020 says: RETURN to the main routine, where 
you left off. Like the old program, the new program prints:
THE
BIRD
IS
DEAD
  GOSUB is like GO TO. The GOSUB 1000 means ``GO TO line 1000, 
and remember where you came from''; so the computer goes to line 
1000, while remembering that it came from line 20. In line 1020, 
the RETURN means ``RETURN to where you came from''; so the 
computer returns to line 20, and then proceeds from line 20 to 
line 30, which prints the word ``DEAD''.
                                             Bottom lines
                             The bottom line of a main routine 
should say END. The bottom line of a subroutine should say 
RETURN.

                                             Yankee Doodle
                             This program prints the original 
version of Yankee Doodle:
Print the first verse:                       10 PRINT "FATHER AND 
I WENT DOWN TO CAMP"
                                             20 PRINT "ALONG WITH 
CAPTAIN GOODING,"
                                             30 PRINT "AND THERE 
WE SAW THE MEN AND BOYS"
                                             40 PRINT "AS THICK 
AS HASTY PUDDING."

Do the chorus, and then come back:           50 GOSUB 1000

Print the second verse:                      60 PRINT "AND THERE 
WAS CAPTAIN WASHINGTON"
                                             70 PRINT "UPON A 
SLAPPING STALLION,"
                                             80 PRINT "A-GIVING 
ORDERS TO HIS MEN;"
                                             90 PRINT "I GUESS 
THERE WERE A MILLION!"

Do the chorus, and then come back:           100 GOSUB 1000

Print the third verse:                       110 PRINT "THE 
FLAMING RIBBONS IN HIS HAT,"
                                             120 PRINT "THEY 
LOOKED SO TARNAL FINE, AH,"
                                             130 PRINT "I WANTED 
POCKILY TO GET"
                                             140 PRINT "TO GIVE 
TO MY JEMIMAH."

Do the chorus, and then come back:           150 GOSUB 1000

That's the end of the song:                  160 END

Here's the chorus:                           1000 PRINT
                                             1010 PRINT "YANKEE 
DOODLE, KEEP IT UP."
                                             1020 PRINT "YANKEE 
DOODLE DANDY,"
                                             1030 PRINT "MIND THE 
MUSIC AND THE STEP,"
                                             1040 PRINT "AND WITH 
THE GIRLS BE HANDY."
                                             1050 PRINT
                                             1060 RETURN
                             Lines 10-40 print the first verse. 
Lines 60-90 print the second. Lines 110-140 print the third.
                             At the end of each verse, the 
computer is told to ``GOSUB 1000'', which means go to line 1000, 
print the chorus (lines 1000-1050), and then RETURN to where it 
left off.
                             Lines 1000-1060, which print the 
chorus, are the subroutine. The verses (lines 10-160) are the 
main routine.
                             Lines 1000 and 1050 make the 
computer print a blank line at the beginning and end of the 
chorus.
                             The bottom line of the main routine 
is END. The bottom line of the subroutine is RETURN.
                             If you accidentally omit line 160 
(which says END), the computer will proceed to do the subroutine 
an extra time, and then won't know where to RETURN. It will 
gripe, by saying:
RETURN BEFORE GOSUB
To avoid such gripes, the last line of a main routine should be 
END.
                    Love poem
  This program prints a love poem:
10 PRINT "THE MOST BEAUTIFUL THING"
20 PRINT "IN THE WHOLE WIDE WORLD"
30 PRINT "IS..."
40 PRINT "LOVE!"
50 PRINT "THE OPPOSITE OF HATE IS"
60 PRINT "LOVE!"
70 PRINT "THE OPPOSITE OF WAR IS"
80 PRINT "LOVE!"
90 PRINT "THE OPPOSITE OF DESPAIR IS"
100 PRINT "LOVE!"
110 PRINT "AND WHEN I LOOK AT YOU,"
120 PRINT "I FEEL LOTS OF"
130 PRINT "LOVE!"
  In that program, lines 40, 60, 80, 100, and 130 print the word 
LOVE. Let's make those lines print the word LOVE larger, like 
this:
*               *       *       *     * * * * *
*             *   *      *     *      *
*           *       *     *   *       * * *
*             *   *        * *        *
* * * * *       *           *         * * * * *
  Here's how:
          10 PRINT "THE MOST BEAUTIFUL THING"
          20 PRINT "IN THE WHOLE WIDE WORLD"
          30 PRINT "IS..."
          40 GOSUB 1000
          50 PRINT "THE OPPOSITE OF HATE IS"
          60 GOSUB 1000
          70 PRINT "THE OPPOSITE OF WAR IS"
          80 GOSUB 1000
          90 PRINT "THE OPPOSITE OF DESPAIR IS"
          100 GOSUB 1000
          110 PRINT "AND WHEN I LOOK AT YOU,"
          120 PRINT "I FEEL LOTS OF"
          130 GOSUB 1000
          140 END       

Lines 1000-10701000 PRINT "*               *       *       *     
* * * * *"
are the subroutine1010 PRINT "*             *   *      *     *      
*"        
          1020 PRINT "*           *       *     *   *       * * 
*"    
          1030 PRINT "*             *   *        * *        *"        
          1040 PRINT "* * * * *       *           *         * * * 
* *"
          1050 PRINT                                                  
          1060 PRINT                                                  
          1070 RETURN                                                 
In that new version, lines 40, 60, 80, 100, and 130 say GOSUB 
1000 instead of PRINT ``LOVE!''. The GOSUB 1000 means: do the 
subroutine that begins at line 1000. The subroutine prints the 
word LOVE in large letters.

        Old lady
  Here are the lyrics to a famous song:
There was an old lady who swallowed a fly,
But I don't know why she swallowed the fly.
Perhaps she'll die.

There was an old lady who swallowed a spider
That wiggled and jiggled and tickled inside her.
She swallowed the spider to catch the fly,
But I don't know why she swallowed the fly.
Perhaps she'll die.

There was an old lady who swallowed a bird.
Oh, how absurd! To swallow a bird!
She swallowed the bird to catch the spider
That wiggled and jiggled and tickled inside her.
She swallowed the spider to catch the fly,
But I don't know why she swallowed the fly.
Perhaps she'll die.

There was an old lady who swallowed a cat.
Imagine that! To swallow a cat!
She swallowed the cat to catch the bird.
She swallowed the bird to catch the spider
That wiggled and jiggled and tickled inside her.
She swallowed the spider to catch the fly,
But I don't know why she swallowed the fly.
Perhaps she'll die.

There was an old lady who swallowed a dog.
I swear on this log! She swallowed that dog!
She swallowed the dog to catch the cat.
She swallowed the cat to catch the bird.
She swallowed the bird to catch the spider
That wiggled and jiggled and tickled inside her.
She swallowed the spider to catch the fly,
But I don't know why she swallowed the fly.
Perhaps she'll die.

There was an old lady who swallowed a goat.
Including its coat, she swallowed that goat!
She swallowed the goat to catch the dog.
She swallowed the dog to catch the cat.
She swallowed the cat to catch the bird.
She swallowed the bird to catch the spider
That wiggled and jiggled and tickled inside her.
She swallowed the spider to catch the fly,
But I don't know why she swallowed the fly.
Perhaps she'll die.

There was an old lady who swallowed a cow.
I don't know how she swallowed that cow!
She swallowed the cow to catch the goat.
She swallowed the goat to catch the dog.
She swallowed the dog to catch the cat.
She swallowed the cat to catch the bird.
She swallowed the bird to catch the spider
That wiggled and jiggled and tickled inside her.
She swallowed the spider to catch the fly,
But I don't know why she swallowed the fly.
Perhaps she'll die.

There was an old lady who swallowed a horse,
And she died, of course!

                             This program prints the song:
10 A$="THERE WAS AN OLD LADY WHO SWALLOWED A "
20 PRINT A$;"FLY.": GOSUB 1070
30 PRINT A$;"SPIDER": GOSUB 1050
40 PRINT A$;"BIRD.": PRINT "OH, HOW ABSURD! TO SWALLOW A BIRD!": 
GOSUB 1040
50 PRINT A$;"CAT.": PRINT "IMAGINE THAT! TO SWALLOW A CAT!": 
GOSUB 1030
60 PRINT A$;"DOG.": PRINT "I SWEAR ON THIS LOG! SHE SWALLOWED 
THAT DOG!": GOSUB 
1020
70 PRINT A$;"GOAT.": PRINT "INCLUDING ITS COAT, SHE SWALLOWED 
THAT GOAT!": GOSUB
 1010
80 PRINT A$;"COW.": PRINT "I DON'T KNOW HOW SHE SWALLOWED THAT 
COW!": GOSUB 1000
90 PRINT A$;"HORSE,": PRINT "AND SHE DIED, OF COURSE!"
100 END

1000 PRINT "SHE SWALLOWED THE COW TO CATCH THE GOAT."
1010 PRINT "SHE SWALLOWED THE GOAT TO CATCH THE DOG."
1020 PRINT "SHE SWALLOWED THE DOG TO CATCH THE CAT."
1030 PRINT "SHE SWALLOWED THE CAT TO CATCH THE BIRD."
1040 PRINT "SHE SWALLOWED THE BIRD TO CATCH THE SPIDER"
1050 PRINT "THAT WIGGLED AND JIGGLED AND TICKLED INSIDE HER."
1060 PRINT "SHE SWALLOWED THE SPIDER TO CATCH THE FLY,"
1070 PRINT "BUT I DON'T KNOW WHY SHE SWALLOWED THE FLY."
1080 PRINT "PERHAPS SHE'LL DIE."
1090 PRINT
1100 RETURN
                             Lines 1000-1100 are a subroutine. 
That subroutine tells the whole story.
                             In line 20, the GOSUB says to do 
just part of the subroutine ___ the part that begins at line 
1070. Line 30 says to do more of the subroutine ___ by beginning 
at line 1050. Lines 40, 50, 60, and 70 do progressively larger 
chunks of the subroutine. Line 80 is the climax: it says to do 
all of the subroutine.
                             Line 90 provides a humorous ending.

                                                Nesting
                             One subroutine can lead to another:
Main routine:                        10 PRINT "MY"
                                     20 GOSUB 1000
                                     30 PRINT "NOSE"
                                     40 END

Subroutine 1000:                     1000 PRINT "TOE"
                                     1010 PRINT "IS"
                                     1020 GOSUB 2000
                                     1030 PRINT "YOUR"
                                     1040 RETURN

Subroutine 2000:                     2000 PRINT "STUCK"
                                     2010 PRINT "IN"
                                     2020 RETURN
                             The program consists of three 
routines. The main routine ends with END; each subroutine ends 
with RETURN.
                             The main routine consists of lines 
10, 20, 30, and 40. Let's see what those lines do.
                             Line 10 prints MY.
                             Line 20 makes the computer do 
subroutine 1000, which prints TOE, prints IS, does subroutine 
2000 (STUCK and IN), and prints YOUR.
                             Line 30 prints NOSE.
                             Line 40 ends.
                             So altogether, the computer prints:
MY
TOE
IS
STUCK
IN
YOUR
NOSE
                             In that example, subroutine 2000 is 
nested in subroutine 1000.

             SUBSCRIPTS
  Instead of being a single string, X$ can be a whole list of 
strings, like this:
      "HATE"
      "LOVE"
      "KILL"
X$=   "KISS"
      "WAR"
      "PEACE"
      "WHY"
Here's how to make X$ be that list of strings. . . . 
  Begin your program by saying:
10 DIM X$(7)
That says X$ will be a list of 7 strings. DIM means dimension; 
the line says the dimension of X$ is 7.
  Next, tell the computer what strings are in X$. Type these 
lines:
20 X$(1)="HATE"
30 X$(2)="LOVE"
40 X$(3)="KILL"
50 X$(4)="KISS"
60 X$(5)="WAR"
70 X$(6)="PEACE"
80 X$(7)="WHY"
Line 20 says X$'s first string is HATE. Line 30 says X$'s second 
string is LOVE. The remaining lines define the other strings in 
X$.
  If you'd like the computer to print all those strings, type 
this:
90 FOR I = 1 TO 7: PRINT X$(I): NEXT
That means: print all the strings in X$. The computer will print:
HATE
LOVE
KILL
KISS
WAR
PEACE
WHY
  In that program, line 20 talks about X$(1). Instead of saying 
X$(1), math books say:
X1
The ``1'' is called a subscript. Similarly, in line 30, which 
says X$(2)=``LOVE'', the number 2 is a subscript. Some 
programmers pronounce line 30 like this: ``X string, subscripted 
by 2, is LOVE''. Some programmers simply say: ``X string 2 is 
LOVE''.
  In that program, X$ is called an array (or matrix). Definition: 
an array (or matrix) is a variable that has subscripts.

          Subscripted DATA
  That program said X$(1) is HATE, and X$(2) is LOVE, and so on. 
This program does the same thing, more briefly:
10 DIM X$(7)
20 DATA HATE,LOVE,KILL,KISS,WAR,PEACE,WHY
30 FOR I=1 TO 7: READ X$(I): NEXT
40 FOR I=1 TO 7: PRINT X$(I): NEXT
Line 10 says X$ will be a list of 7 strings. Line 20 contains a 
list of 7 strings. Line 30 makes the computer READ those strings 
and call them X$. Line 40 makes the computer print them.
  In that program, the first three lines say:
DIM
DATA
FOR I
Most practical programs begin with those three lines.
                                         Let's lengthen the 
program, so that the computer prints all this:
HATE
LOVE
KILL
KISS
WAR
PEACE
WHY

WHY HATE
WHY LOVE
WHY KILL
WHY KISS
WHY WAR
WHY PEACE
WHY WHY
That consists of two verses. The second verse resembles the first 
verse, except that each line of the second verse begins with WHY.
                                         To make the computer 
print all that, just add these lines to the program:
50 PRINT
60 FOR I = 1 TO 7: PRINT "WHY ";X$(I): NEXT
Line 50 leaves a blank line between the first verse and the 
second verse. Line 60 prints the second verse. Line 60 resembles 
line 40 (which printed the first verse), except that line 60 
prints ``WHY '' before each X$(I).
                                         Let's add a third verse, 
which prints the words in reverse order:
WHY
PEACE
WAR
KISS
KILL
LOVE
HATE
Before printing that third verse, print a blank line:
70 PRINT
Then print the verse itself. To print the verse, you must print 
X$(7), then print X$(6), then print X$(5), etc. To do that, you 
could say:
80 PRINT X$(7)
90 PRINT X$(6)
100 PRINT X$(5)
etc.
But this way is shorter:
80 FOR I = 7 TO 1 STEP -1: PRINT X$(I): NEXT

                                                  Numeric arrays
                                         Let's make Y be this 
list of six numbers: 100, 26, 94, 201, 8.3, and -7. To begin, 
tell the computer that Y will consist of six numbers:
10 DIM Y(6)
Next, tell the computer what the six numbers are:
20 DATA 100,26,94,201,8.3,-7
Make the computer READ all that data:
30 FOR I = 1 TO 6: READ Y(I): NEXT
                                         To make the computer 
PRINT all that data, type this:
40 FOR I = 1 TO 6: PRINT Y(I): NEXT
If you want the computer to add those 6 numbers together and 
print their sum, say:
50 PRINT Y(1)+Y(2)+Y(3)+Y(4)+Y(5)+Y(6)
                 Strange example
  Getting tired of X and Y? Then pick another letter! For 
example, you can play with Z:
Silly, useless programWhat the program means
10 DIM Z(5)           Z will be a list of 5 numbers.
20 FOR I = 2 TO 5
30     Z(I)=I*100     Z(2)=200. Z(3)=300. Z(4)=400. Z(5)=500.
40 NEXT
50 Z(1)=Z(2)-3        Z(1) is 200-3, so Z(1) is 197.
60 Z(3)=Z(1)-2        Z(3) changes to 197-2, which is 195.
70 FOR I = 1 TO 5: PRINT Z(I): NEXTPrint Z(1), Z(2), Z(3), Z(4), 
and Z(5).
  Line 70 prints:
 197
 200
 195
 400
 500

             Problems and solutions
  Suppose you want to analyze 50 numbers. Begin your program by 
saying:
10 DIM X(50)
Then type the 50 numbers, as data, like this:
20 DATA etc.
30 DATA etc.
40 DATA etc.
Tell the computer to READ the data:
100 FOR I=1 TO 50: READ X(I): NEXT
  After line 100, do one of the following, depending on which 
problem you want to solve. . . . 
  Print all the values of X Solution:
110 FOR I = 1 TO 50: PRINT X(I): NEXT
  Print all the values of X, in reverse order Solution:
110 FOR I = 50 TO 1 STEP -1: PRINT X(I): NEXT
  Print the sum of all the values of X In other words, print 
X(1)+X(2)+X(3)+ . . . +X(50). Solution: start the sum at 0 ___ 
110 S=0
and then increase the sum, by adding each X(I) to it:
120 FOR I = 1 TO 50: S=S+X(I): NEXT
Finally, print the sum:
130 PRINT "THE SUM OF ALL THE NUMBERS IS";S
  Find the average of X In other words, find the average of the 
50 numbers. Solution: begin by finding the sum ___ 
110 S=0
120 FOR I = 1 TO 50: S=S+X(I): NEXT
and then divide the sum by 50:
130 PRINT "THE AVERAGE IS";S/50
  Find out whether any of the values of X is 79.4 In other words, 
find out whether 79.4 is a number in the list. Solution: if X(I) 
is 79.4, print ``YES'' ___ 
110 FOR I = 1 TO 50
120    IF X(I)=79.4 THEN PRINT "YES, 79.4 IS IN THE LIST": END
130 NEXT
otherwise, print ``NO'':
140 PRINT "NO, 79.4 IS NOT IN THE LIST"


  In X's list, count how often 79.4 appears Solution: start the 
counter at zero ___ 
110 C=0
and increase the counter each time you see the number 79.4:
120 FOR I = 1 TO 50
130    IF X(I)=79.4 THEN C=C+1
140 NEXT
Finally, print the counter:
150 PRINT "THE NUMBER 79.4 APPEARS";C;"TIMES"
  Print all the values of X that are negative In other words, 
print all the numbers that have minus signs. Solution: begin by 
announcing your purpose ___ 
110 PRINT "HERE ARE THE VALUES THAT ARE NEGATIVE:"
and then print the values that are negative; in other words, 
print each X(I) that's less than 0:
120 FOR I = 1 TO 50
130    IF X(I)<0 THEN PRINT X(I)
140 NEXT
  Print all the values of X that are ``above average'' Solution: 
find the average, and call it A, like this ___ 
110 S=0
120 FOR I = 1 TO 50: S=S+X(I): NEXT
130 A=S/50
then announce your purpose:
140 PRINT "THE FOLLOWING VALUES ARE ABOVE AVERAGE:"
Finally, print the values that are above average; in other words, 
print each X(I) that's greater than A:
150 FOR I = 1 TO 50
160    IF X(I)>A THEN PRINT X(I)
170 NEXT
  Find the biggest value of X In other words, find which of the 
50 numbers is the biggest. Solution: let B stand for the biggest 
number. Begin by tentatively setting B equal to the first number 
___ 
110 B=X(1)
but if another number is bigger than that B, change B:
120 FOR I = 2 TO 50
130    IF X(I)>B THEN B=X(I)
140 NEXT
Afterwards, print B:
150 PRINT "THE BIGGEST NUMBER IN THE LIST IS";B
  Find the smallest value of X In other words, find which of the 
50 numbers is the smallest. Solution: let S stand for the 
smallest number. Begin by tentatively setting S equal to the 
first number ___ 
110 S=X(1)
but if another number is smaller than S, change S:
120 FOR I = 2 TO 50
130    IF X(I)<S THEN S=X(I)
140 NEXT
Afterwards, print S:
150 PRINT "THE SMALLEST NUMBER IN THE LIST IS";S
  Check whether X's list is in strictly increasing order In other 
words, find out whether the following statement is true: X(1) is 
a smaller number than X(2), which is a smaller number than X(3), 
which is a smaller number than X(4), etc. Solution: if X(I) is 
not smaller than X(I+1), print ``NO'' ___ 
110 FOR I = 1 TO 49
120    IF X(I)>=X(I+1) THEN PRINT "NO, THE LIST IS NOT IN 
STRICTLY INCREASING OR
DER": END
130 NEXT
otherwise, print ``YES'':
140 PRINT "YES, THE LIST IS IN STRICTLY INCREASING ORDER"


  Test yourself: look at those problems again, and see whether 
you can figure out the solutions without peeking at the answers.

                 Multiple arrays
  Suppose your program involves three lists. Suppose the first 
list is called A$ and consists of 18 strings; the second list is 
called B and consists of 57 numbers; and the third list is called 
C$ and consists of just 3 strings. To say all that, begin your 
program with this statement:
10 DIM A$(18),B(57),C$(3)

                Double subscripts
  You can make X be a table of strings, like this:
     "DOG"     "CAT"     "MOUSE"
X$=
     "HOTDOG"  "CATSUP"  "MOUSETARD"
Here's how to make X$ be that table. . . . 
  Begin by saying:
10 DIM X$(2,3)
That says X$ will be a table having 2 rows and 3 columns.
  Then tell the computer what strings are in X$. Type these 
lines:
20 X$(1,1)="DOG"
30 X$(1,2)="CAT"
40 X$(1,3)="MOUSE"
50 X$(2,1)="HOTDOG"
60 X$(2,2)="CATSUP"
70 X$(2,3)="MOUSETARD"
Line 20 says: the string in X$'s first row and first column is 
DOG. Line 30 says the string in X$'s first row and second column 
is CAT. The remaining lines define the other strings in X$.
  If you'd like the computer to print all those strings, type 
this:
80 FOR I = 1 TO 2: FOR J = 1 TO 3: PRINT X$(I,J),: NEXT: PRINT: 
NEXT
That means: print all the strings in X$. The computer will print:
DOG             CAT             MOUSE
HOTDOG          CATSUP          MOUSETARD
  In that program, X$ is called a table or two-dimensional array 
or doubly subscripted array.

              Multiplication table
  This program prints a multiplication table:
10 DIM X(10,4)
20 FOR I = 1 TO 10: FOR J = 1 TO 4: X(I,J)=I*J: NEXT: NEXT
30 FOR I = 1 TO 10: FOR J = 1 TO 4: PRINT X(I,J),: NEXT: PRINT: 
NEXT
  Line 10 says X will be a table having 10 rows and 4 columns.
  The middle of line 20 says X(I,J)=I*J. That means the number in 
row I and column J is I*J. For example, the number in row 3 and 
column 4 is 12.
  The beginning of line 20 says ``FOR I = 1 TO 10: FOR J = 1 TO 
4'', so that X(I,J)=I*J for every I and J, so every entry in the 
table is defined by multiplication.
  Line 30 prints the whole table:
1               2               3               4
2               4               6               8
3               6               9               12
4               8               12              16
5               10              15              20
6               12              18              24
7               14              21              28
8               16              24              32
9               18              27              36
10              20              30              40
  Instead of multiplication, you can have addition, subtraction, 
or division: just change line 20.
  Most programmers follow this tradition: the row's number is 
called I, and the column's number is called J. Line 20 obeys that 
tradition. Notice I comes before J in the alphabet; I comes 
before J in X(I,J); and ``FOR I'' comes before ``FOR J''. If you 
follow the I-before-J tradition, you'll make fewer errors.

     Summing a table
  Suppose you want to analyze this table:
  32.7    19.4    31.6    85.1
  -8     402     -61       0
5106       -.2     0      -1.1
  36.9      .04    1      11
 777     666      55.44    2
   1.99    2.99    3.99    4.99
  50      40      30      20
  12      21      12      21
   0    1000       2     500
  Since the table has 9 rows and 4 columns, begin your program by 
saying:
10 DIM X(9,4)
Each row of the table becomes a row of the DATA:
11 DATA 32.7, 19.4, 31.6, 85.1
12 DATA -8, 402, -61, 0
13 DATA 5106, -.2, 0, -1.1
14 DATA 36.9, .04, 1, 11
15 DATA 777, 666, 55.44, 2
16 DATA 1.99, 2.99, 3.99, 4.99
17 DATA 50, 40, 30, 20
18 DATA 12, 21, 12, 21
19 DATA 0, 1000, 2, 500

Make the computer READ the data:
20 FOR I = 1 TO 9: FOR J = 1 TO 4: READ X(I,J): NEXT: NEXT
To make the computer print the table, say this:
30 FOR I = 1 TO 9: FOR J = 1 TO 4: PRINT X(I,J),: NEXT: PRINT: 
NEXT
                             Here are some problems, with 
solutions. . . . 
                             Find the sum of all the numbers in 
the table Solution: start the sum at 0 ___ 
100 S=0
and then increase the sum, by adding each X(I,J) to it:
110 FOR I = 1 TO 9: FOR J = 1 TO 4: S=S+X(I,J): NEXT: NEXT
Finally, print the sum:
120 PRINT "THE SUM OF ALL THE NUMBERS IS";S
The computer will print:
THE SUM OF ALL THE NUMBERS IS 8877.84
                             Find the sum of each row In other 
words, make the computer print the sum of the numbers in the 
first row, then the sum of the numbers in the second row, then 
the sum of the numbers in the third row, etc. Solution: the 
general idea is ___ 
100 FOR I = 1 TO 9
110     print the sum of row I
120 NEXT
Here are the details:
110 FOR I = 1 TO 9
110     S=0
111     FOR J = 1 TO 4: S=S+X(I,J): NEXT
112     PRINT "THE SUM OF ROW";I;"IS";S
120 NEXT
The computer will print:
THE SUM OF ROW 1 IS 168.8
THE SUM OF ROW 2 IS 333
THE SUM OF ROW 3 IS 5104.7
etc.
                             Find the sum of each column In other 
words, make the computer print the sum of the numbers in the 
first column, then the sum of the numbers in the second column, 
then the sum of the numbers in the third column, etc. Solution: 
the general idea is ___ 
100 FOR J = 1 TO 4
110     print the sum of column J
120 NEXT
Here are the details:
100 FOR J = 1 TO 4
110     S=0
111     FOR I = 1 TO 9: S=S+X(I,J): NEXT
112     PRINT "THE SUM OF COLUMN";J;"IS";S
120 NEXT
The computer will print:
THE SUM OF COLUMN 1 IS 6008.59
THE SUM OF COLUMN 2 IS 2151.23
THE SUM OF COLUMN 3 IS 75.03
THE SUM OF COLUMN 4 IS 642.99
In all the other examples, ``FOR I'' came before ``FOR J''; but 
in this unusual example, ``FOR I'' comes after ``FOR J''.