| We have seen the
        advantages of using various methods of iteration, or looping.Now
        let's take a look at what happens when we combine looping
        procedures.
 
        
          
            |     
              The placing of one loop inside the body of another loop is
  called nesting.  When you "nest"
              two loops, the outer loop
              takes control of the number of complete repetitions of the inner
              loop.  While all
              types of loops may be nested, the most
  commonly nested loops are for
  loops. | 
      
        
          |  nested
loops
 |  |       Let's look at an
  example of nested loops at work. We have all seen web page counters
  that resemble the one shown below ( well, OK, maybe not quite this
  spastic!!).  Your car's odometer works in a similar manner. 
 This counter (if it
            worked properly) and your car's odometer are little more than seven
            or eight nested for
  loops, each going from 0 to 9.  The far-right number iterates the
  fastest, visibly moving from 0 to 9 as you drive your car or increasing by one
            as people visit a web site.  A for
  loop which imitates the movement of the far-right number is shown below: 
    
      
        |  | for(num1 = 0; num1
          <= 9; num1++) {
 cout << num1 << endl;
 }
 |       The far-right number,
  however, is not the
  only number that is moving.  All of the other numbers are moving also, but at a much slower
  pace.  For every 10 numbers that move in the column on the right, the adjacent
  column is incremented by one.  The two nested loops shown below may be
  used to imitate the movement of the two far-right numbers of a web counter or an odometer: The number of digits in the web
  page counter or the odometer determine the number of
  nested loops needed to imitate the process.       
        
          
            | When
              working with nested loops, the outer loop changes
        only after the inner loop is completely finished (or is interrupted.). |  Let's take a look at a trace of two
            nested loops.  In order to keep the trace manageable, the 
			number of iterations have been
            shortened. 
              
                
                  | for(num2 = 0; num2 <=
                    3;  num2++) {
 for(num1 = 0; num1 <= 2; num1++)
 {
 cout<< num2<< "   " << num1<<
                    endl;
 }
 }
 |  
              
                
                  | Memory | Screen |  
                  | 
                      
                        
                          | int
                            num2 | int
                            num1 |  
                          |  | 0 |  | 0 |  
                          |  |  |  | 1 |  
                          |  |  |  | 2 |  
                          |  |  |  | 3 
                            end loop |  
                          |  | 1 |  | 0 |  
                          |  |  |  | 1 |  
                          |  |  |  | 2 |  
                          |  |  |  | 3 
                            end loop |  
                          |  | 2 |  | 0 |  
                          |  |  |  | 1 |  
                          |  |  |  | 2 |  
                          |  |  |  | 3 
                            end loop |  
                          |  | 3 |  | 0 |  
                          |  |  |  | 1 |  
                          |  |  |  | 2 |  
                          |  |  |  | 3 
                            end loop |  
                          |  | 4 
                            end loop |  |  |      Remember,
                    in the memory, for
                    loops will register a value one beyond (or the step beyond)
                    the requested ending value in order to disengage the loop. | 0  
                    00   1
 0   2
 1   0
 1   1
 1   2
 2   0
 2   1
 2   2
 3   0
 3   1
 3   2
 |  
        
          
            | Are
        we getting a little loopy?
             |  |    |