Arrays and Loops

This section discusses the concept of data arrays as a way to store many data elements without much effort and loops to scan over these.

Arrays

Multiple variables of one data type can be packed together in a variable list or array. In this list, each variable is identified by a unique index value. Typical for the definition of an array are the squared brackets '[' and ']' that contain the number of elements the array should store. The following example creates an array with five integer values:

Example

int i[5]

Of course we can create arrays of other data types as well. Lets denote the number of elements (in this case 5) as N to be more general. If an array has N elements, the index values of the elements of the array range from 0 to N-1. After the array has been defined, the squared brackets are used to contain the index values of the very element that is addressed by the expression:

Example

int i[5]
i[0] = 10
i[1] = 20
i[2] = 40
i[3] = 197
i[4] = 200
echo( i[2] )

Output

40

The example assigns each element of the array another value and outputs the third. Note that the value N (in this case: 5) cannot be used as an index of an element since it is already out of range.

The elements of an array can be addressed in an arbitrary order. The index value can be expressed by another variable what is useful when performing loops.

Short hand notation

In the previous example, each entry of the array was set in a single line. Since this might be tedious for larger arrays, a short hand notation exists to achieve the same result:

Example

int i[] = [10, 20, 40, 197, 200]
echo( i[2] )

Output

40

Here, the array with its N values is defined on the right-hand-side of the equation. Note that the the squared brackets behind the declaration of i are empty.

Since this short hand notation can be used in all places of the code, it might not always be clear what data type the array shall be of. Therefore the following rules apply:

  • the data type of the elements of an array in short hand notation can be placed before the array in pointy brackets
  • if this explicit definition of the data type is missing, the first element inside the short hand notation determines the element data type

In an example this looks like this:

Example

echo( <string>[5, 6.3] )
echo( [5, 6.3] )

Output

["5","6.3"]
[5,6]

Length of an array

The length of an array refers to its number of elements N. It can be checked by the length member function of the array: by writing the array name followed by a dot and the function name length() we can get the value of N:

Example

int i[5]
echo( i.length() )

Output

5

This is especially useful if we did not create the array by ourselves but got it from another source.

Other operations on arrays.

There are a few more member operations that can be used to modify the structure of an array:

Array member function Description
int erase( int n ) Removes the element with index n from the array.
push_back( dtype e ) Adds one element e to the end of the array. This increases the array length by one.
resize( int n ) Changes the size of the array to a new size size.

Multidimensional arrays

Suppose we want to address each tile of a chess board. We could create an array of 64 elements and map the indices as following: a1 = 0, a2 = 1, ... ,a8 = 7, b1 = 8, ... ,h8 = 63. Addressing the field f2 would include a certain amount of calculation to get the array index value: f is the sixth letter of the alphabet, giving it an index of 5. The row 2 has an index of 1. 5 * 8 (the number of elements per column) + 1 = 41. As an alternative, we can let the computer do the calculation for us by defining an 8 x 8 two-dimensional array:

Example

int i[8][8]

This allows us to address the field f2 directly by using its column index value 5 and row index 1:

Example

int i[8][8]
i[5][1] = 4

It is also possible to define arrays with a dimension larger than two. If the array gets addressed with fewer indices than its dimension, it returns an array of the remaining dimension. We could expand the chess board example to having 15 rooms with 20 chess boards each. This could addressed like that:

Example

int i[15][20][8][8]     // Array for storing values on 20 chessboards in 15 rooms.
int j[8][8]             // Another chess board array.
j = i[3][13]            // Copy the 14. (index 13) chess board of room 4 (index 3) into j.
echo( i[12].length() )    // Output the number of chess boards in room 13 ( index 12).

Output

20

Like in the case of one-dimensional arrays, the short hand notation can be used to fill multidimensional arrays at once:

Example

int i[][] = [[1,2],[2,3],[3,4]]

Empty arrays

In some cases one wants to define a one- or more-dimensional array that contains no elements. This might be the case when using an array as an open parameter. That goal can be achieved in three different ways. The first is to explicitly set the size of the respective dimension to zero:

Example

int i[0]

The same thing can be achieved by leaving out the length at all:

Example

int i[]

The third way uses the short hand notation that doesn't require a variable name. The data type of the array must be given in pointy brackets in front of the array:

Example

<int>[]

See also the reference about arrays.

Loops

Often it is required to perform a task multiple times or to scan over each element of an array. The method of choice for such tasks is to use loops. These are control commands that perform a given part of code repeatedly until a certain condition is fulfilled or a break-off command is encountered.

Loops with while

The while loop has the form while( condition ) statement. It repeatedly executes the statement as long as the condition, a boolean value, is found to be 'true'. This implies that the statement should change the condition value in order leave the loop. This can be seen in the following example:

Example

int i = 0
while( i < 10 )
  i = i + 1

In the example, the program increases i until it reaches the value 10. Then the condition of the while command evalutes to 'false' what causes the loop to quit.

Remark

Please be aware that a badly constructed loop that does not break off runs "forever" (i.e. until the program is killed externally). This is a common source of "freezing" of a program.

Of course the statement of the while loop can be a code block including other commands, e.g. an echo output:

Example

int i = 0
while( i < 5 )
{
  echo( i )
  i = i + 1
}

Output

0
1
2
3
4

Loops with for

The for loop is an alternative to the while loop. It has the following signature: for( initialization ; condition ; iterator ) statement. It expects three different arguments: the first one is the initialization. This is a statement that is executed before the first cycle is started. This is typically used to initialize a running variable like i in the while loop examples. The second argument is the break-off condition. Like in a while loop, the condition is checked before each iteration and the looping is stopped, if the condition has the value 'false'. The last argument is the iterator statement that is executed after each cycle. Typically the iterator statement is used to increment or decrement the running variable. The statement is executed during each loop iteration.

An example of a for loop would be:

Example

for( int i = 0; i < 5; i++ )
  echo( i )

Output

0
1
2
3
4

In the following example, a for loop is used to scan over an array's elements. The value of each element is then set to be its index:

Example

int i[10]
for( int j = 0; j < i.length(); j++ )
  i[j] = j

The break Command

For both the while and the for loop there is special way of escaping early: the break command. If this command is encountered during the looping, the loop is quit immediately. This can be used to terminate a loop when a certain task is done and no further cycles are required.

In the following example the argument of the while loop is always true, making it technically infinite. Nevertheless, after some cycles the break is encountered when i reaches the value 10. This terminates the loop.

Example

int i = 0
while( true )
{
  if( i == 10 )
    break
  i = i + 1
}

The continue Command

Like the break command, the continue command changes the behavior of a loop when encountered in the statement section. Unlike the break command it does not quit the loop completely but only the current cycle. This means that everything the would normally follow the continue command in the loop's statement block is skipped for this cycle and the next cycle is started. In an example this looks like that:

Example

for( int i = 0; i < 6; i++ )
{
  echo( "Start cycle " + i )
  if( i > 2 )
    continue
  echo( "End cycle " + i )
}

Output

Start cycle 0
End cycle 0
Start cycle 1
End cycle 1
Start cycle 2
End cycle 2
Start cycle 3
Start cycle 4
Start cycle 5