Page 1 of 1

What's Wrong With This DIM ?

Posted: Tue May 03, 2016 7:26 pm
by abrogard
I keep getting subscript out of range error when I write DIM spots(2,12000) but it works okay as DIM spots(2,2000).

Is this a qbasic limit?

Here's the whole piece FYI. You can see what I'm trying to do. Make a list of unique random points. Started having the problem when I wrote the bit to take newly created random co-ords (x,y) and check them to see if they were unique.

Code: Select all

 SCREEN 11

 CLS

DIM spots(2, 2000)

'init random

  RANDOMIZE (223)

'set 12000 random points

FOR i = 1 TO 12000
  x = INT(RND * 600)
  y = INT(RND * 440)

' search for matches

 match = 0

IF i > 4 THEN  ' this just a mad attempt to avoid subscript out of range errors.

 FOR k = 1 TO i - 2

 IF spots(1, k) = x THEN

 IF spots(2, k) = y THEN

 match = 1

 EXIT FOR

 END IF

 END IF

 NEXT k


END IF



IF match = 1 THEN

PRINT "match"; x; y
i = i - 1

ELSE

  PSET (x, y)
 
  spots(1, i) = x
  spots(2, i) = y

  PRINT i

END IF


 NEXT i

PRINT i

'put 2000 spots in an array

 
   

 '   FOR i = 1 TO 2000
 '   x = INT(RND * 600)
 '   spots(1, i) = x
 '   NEXT i


 '   FOR i = 1 TO 2000
 '   y = INT(RND * 440)
 '   spots(2, i) = y
 '   NEXT i

' print out 20 from array

'    FOR i = 1 TO 20

'    PRINT "Spot", i, "x", spots(1, i)
'    PRINT "Spot", i, "y", spots(2, i)


'    NEXT i


' match found printout

 '         IF match = 1 THEN
 '         PRINT "match found"
 '         PRINT spots(1, i)
 '         PRINT spots(2, i)
 '         END IF

Re: What's Wrong With This DIM ?

Posted: Tue May 10, 2016 4:05 pm
by burger2227
12,000 integers at 2 bytes each is 24,000 bytes times 2 for 2 levels exceeds 32767 bytes for integers.

Your loop still uses 12,000 so it runs out of array places and that is where it errors also.

QB64 can run it with 12,000 but QB will not.

Re: What's Wrong With This DIM ?

Posted: Tue May 10, 2016 5:10 pm
by abrogard
Yes, thank you. I have moved over to qb64 and all is good.

:)