Reading — step 1 of 5
Learn
~2 min readSubs, Functions, Arrays
BASIC arrays use DIM with bounds:
DIM nums(10) AS INTEGER ' 0..10 — 11 elements!
DIM names(1 TO 5) AS STRING ' 1..5 — 5 elements
DIM matrix(3, 3) AS INTEGER ' 4x4 (0..3, 0..3)
nums(0) = 100
nums(1) = 200
PRINT nums(0)
Like Pascal, BASIC declares inclusive upper bounds. DIM nums(10) gives 11 elements (0 through 10).
Initialization
Elements default to 0 / 0.0 / "" depending on type. Initialize:
DIM nums(4) AS INTEGER
FOR i AS INTEGER = 0 TO 4
nums(i) = (i + 1) * 10
NEXT i
Or inline (FreeBASIC):
DIM nums(4) AS INTEGER => {10, 20, 30, 40, 50}
Bounds
LBOUND(nums) ' 0 — lower bound
UBOUND(nums) ' 4 — upper bound (NOT length!)
UBOUND(nums) - LBOUND(nums) + 1 ' length
REDIM (resize)
DIM nums() AS INTEGER ' undimensioned
REDIM nums(9) ' size 10 (0..9)
REDIM PRESERVE nums(19) ' grow, keep contents
Without PRESERVE, contents are lost.
Iteration
FOR i AS INTEGER = LBOUND(nums) TO UBOUND(nums)
PRINT nums(i)
NEXT i
Using LBOUND/UBOUND adapts to any bound choice.
Multi-dim
DIM grid(2, 2) AS INTEGER ' 3x3
grid(1, 1) = 5
PRINT grid(1, 1) ' 5
' 3D:
DIM cube(9, 9, 9) AS INTEGER ' 1000 elements
Common operations (FreeBASIC)
ERASE arr— clear (zero out)- Sorting requires manual implementation or library
String arrays
DIM names(0 TO 2) AS STRING
names(0) = "Ada"
names(1) = "Bob"
names(2) = "Carol"
FOR i AS INTEGER = 0 TO UBOUND(names)
PRINT names(i)
NEXT i
Splitting strings
DIM text AS STRING
LINE INPUT "", text
DIM parts(0 TO 100) AS STRING
DIM count AS INTEGER = 0
DIM start AS INTEGER = 1
DIM idx AS INTEGER
DO
idx = INSTR(start, text, " ")
IF idx = 0 THEN
parts(count) = MID(text, start)
count += 1
EXIT DO
END IF
parts(count) = MID(text, start, idx - start)
count += 1
start = idx + 1
LOOP
FOR i AS INTEGER = 0 TO count - 1
PRINT parts(i)
NEXT i
Manual; FreeBASIC has no built-in SPLIT function. The INSTR and MID functions are your tools.
Discussion
Ask a question, share an insight, or help someone who’s stuck.
Sign in to post a comment or reply.
Loading…