User Tools

Site Tools


re-dimensioning_20arrays

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Last revision Both sides next revision
re-dimensioning_20arrays [2018/03/31 13:19]
127.0.0.1 external edit
re-dimensioning_20arrays [2018/04/17 18:21]
tbest3112 Added syntax highlighting
Line 2: Line 2:
  
 //by Richard Russell, May 2014//\\ \\  BBC BASIC does not have a **REDIM** or **REDIM PRESERVE** statement, as found in some other dialects of BASIC (REDIM allows you to increase the dimensions of an existing array - the contents are lost - and REDIM PRESERVE allows you to increase the dimensions of an array without destroying its contents). However it is not difficult to provide an equivalent functionality using user-defined procedures:​\\ ​ //by Richard Russell, May 2014//\\ \\  BBC BASIC does not have a **REDIM** or **REDIM PRESERVE** statement, as found in some other dialects of BASIC (REDIM allows you to increase the dimensions of an existing array - the contents are lost - and REDIM PRESERVE allows you to increase the dimensions of an array without destroying its contents). However it is not difficult to provide an equivalent functionality using user-defined procedures:​\\ ​
 +<code bb4w>
         DEF PROCredim1d(RETURN P%,S%,D%)         DEF PROCredim1d(RETURN P%,S%,D%)
         LOCAL A%         LOCAL A%
Line 49: Line 50:
         P% = A%         P% = A%
         ENDPROC         ENDPROC
 +</​code>​
 The above procedures support 1-dimensional and 2-dimensional arrays; equivalent routines for arrays with more dimensions can be derived if required. If you REDIM PRESERVE a 2-dimensional (or more) array you should normally only change the **first** dimension; if you change another dimension the data will be '​preserved'​ but will appear to have **moved**. Note that it isn't usually sensible to **reduce** the size of an array.\\ \\  In each case the parameters to the procedure are the name of the array, the size of each element of the array (see table below) and the required dimension(s). As with the normal **DIM** statement, the available indices run from zero to the specified value.\\ \\  Here is a simple demonstration program:​\\ ​ The above procedures support 1-dimensional and 2-dimensional arrays; equivalent routines for arrays with more dimensions can be derived if required. If you REDIM PRESERVE a 2-dimensional (or more) array you should normally only change the **first** dimension; if you change another dimension the data will be '​preserved'​ but will appear to have **moved**. Note that it isn't usually sensible to **reduce** the size of an array.\\ \\  In each case the parameters to the procedure are the name of the array, the size of each element of the array (see table below) and the required dimension(s). As with the normal **DIM** statement, the available indices run from zero to the specified value.\\ \\  Here is a simple demonstration program:​\\ ​
 +<code bb4w>
         DIM array(100)         DIM array(100)
         FOR I% = 0 TO 100         FOR I% = 0 TO 100
Line 63: Line 66:
         PRINT "Test completed successfully"​         PRINT "Test completed successfully"​
         END         END
 +</​code>​
 Note that if you REDIM (not REDIM PRESERVE) a **string array** you must explicitly empty the array first:​\\ ​ Note that if you REDIM (not REDIM PRESERVE) a **string array** you must explicitly empty the array first:​\\ ​
 +<code bb4w>
         array$() = ""​         array$() = ""​
         PROCredim1d(array$(),​ ^array$(1)-^array$(0),​ newsize%)         PROCredim1d(array$(),​ ^array$(1)-^array$(0),​ newsize%)
 +</​code>​
 \\  The most reliable way of determining the element size is to calculate it at run-time, as in the above examples, but for reference here are the appropriate sizes for each type of array:\\ \\  \\  The most reliable way of determining the element size is to calculate it at run-time, as in the above examples, but for reference here are the appropriate sizes for each type of array:\\ \\ 
  
re-dimensioning_20arrays.txt ยท Last modified: 2019/04/09 22:08 by richardrussell