Show a nested loop which searches a two-dimensional array filled with random numbers uniformly distributed over 



[
1
,
…
,
20
]


{\displaystyle [1,\ldots ,20]}

.

The loops iterate rows and columns of the array printing the elements until the value 



20


{\displaystyle 20}

 is met.

Specifically, this task also shows how to break out of nested loops.



Related tasks

   Loop over multiple arrays simultaneously
   Loops/Break
   Loops/Continue
   Loops/Do-while
   Loops/Downward for
   Loops/For
   Loops/For with a specified step
   Loops/Foreach
   Loops/Increment loop index within loop body
   Loops/Infinite
   Loops/N plus one half
   Loops/Nested
   Loops/While
   Loops/with multiple ranges
   Loops/Wrong ranges


 
PROGRAM "loopsnested"
 
IMPORT "xst" ' for XstGetSystemTime
 
DECLARE FUNCTION Entry()
 
' Pseudo-random number generator
' Based on the rand, srand functions from Kernighan & Ritchie's book
' 'The C Programming Language'
DECLARE FUNCTION Rand()
DECLARE FUNCTION SRand(seed%%)
 
FUNCTION Entry()
  DIM array%[10, 10]
  XstGetSystemTime (@msec)
  SRand(INT(msec) MOD 32768)
  FOR row% = 0 TO 10
    FOR col% = 0 TO 10
      array%[row%, col%] = INT(Rand() / 32768.0 * 20.0) + 1
    NEXT col%
  NEXT row%
 
  isFound% = $$FALSE
  FOR row% = 0 TO 10
    PRINT "Row:"; row%
    FOR col% = 0 TO 10
      PRINT " Col:"; col%; ", value:"; array%[row%, col%]
      IF array%[row%, col%] = 20 THEN
        isFound% = $$TRUE
        EXIT FOR
      END IF
    NEXT col%
    IFT isFound% THEN
      EXIT FOR
    END IF
  NEXT row%
END FUNCTION
 
' Return pseudo-random integer on 0..32767
FUNCTION Rand()
  #next&& = #next&& * 1103515245 + 12345
END FUNCTION USHORT(#next&& / 65536) MOD 32768
 
' Set seed for Rand()
FUNCTION SRand(seed%%)
  #next&& = seed%%
END FUNCTION
 
END PROGRAM
 