User Tools

Site Tools


summing_20part_20of_20an_20array

Summing part of an array

by Richard Russell, October 2013 (original concept by Michael Hutton)

The SUM() function returns the sum of all the elements of an array. It may occasionally be useful to discover the sum of only part of an array, but BBC BASIC doesn't have a built-in function to do that.

Of course it's straightforward to find the sum using a loop:

        total = 0
        FOR index% = first% TO last%
          total += array(index%)
        NEXT

where first% and last% define the range of indices (inclusive) over which the sum should be calculated.

However this approach is relatively slow, especially if the number of elements being summed is large, and it would be desirable to have a faster method. Fortunately there is a way, although the code isn't very nice:

        DEF FN_SumPartialArray(d(), first%, last%)
        LOCAL i%%
        i%% = ^d(first%)-5
        LOCAL ?i%%, i%%!1, a()
        ?i%% = 1 : i%%!1 = last%-first%+1
        PTR(a()) = i%%
        = SUM(a())

The array a() must be the same type (i.e. have the same suffix character, if any) as the array being summed.

Note that during execution of the function the array contents are temporarily changed, so don't use this method if your program has a timer interrupt in which the array is accessed.

If errors are trapped (using ON ERROR) and you need your program to resume execution after an error (e.g. pressing the Escape key), add a statement to ensure the array contents are restored:

        DEF FN_SumPartialArray(d(), first%, last%)
        LOCAL i%%
        i%% = ^d(first%)-5
        LOCAL ?i%%, i%%!1, a()
        ON ERROR LOCAL RESTORE LOCAL : ERROR ERR, REPORT$
        ?i%% = 1 : i%%!1 = last%-first%+1
        PTR(a()) = i%%
        = SUM(a())
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
summing_20part_20of_20an_20array.txt · Last modified: 2024/01/05 00:21 by 127.0.0.1