3. Sets of numbers

VC2M5N10: level 5: Follow a mathematical algorithm involving branching and repetition (iteration); create and use algorithms involving a sequence of steps and decisions and digital tools to experiment with factors, multiples and divisibility; identify, interpret and describe emerging patterns
  • manipulating sets of numbers using a given rule, for example, if a number is even, halve it; or if a number is odd, subtract 1 then halve it


3.1. Simple rule

Return a set of numbers using the rule: if a number is even, halve it; if a number is odd, subtract 1 then halve it.
FUNCTION manipulate_numbers(numbers)
    result ← EMPTY SET

    FOR EACH number IN numbers DO
        IF number MOD 2 = 0 THEN
            new_value ← number ÷ 2
        ELSE
            new_value ← (number - 1) ÷ 2
        ENDIF
        ADD new_value TO result
    ENDFOR

    RETURN result
ENDFUNCTION


BEGIN
    INPUTS:
        numbers ← SET OF INTEGERS FROM 1 TO 10

    PROCESS:
        manipulated_numbers ← CALL manipulate_numbers(numbers)

    OUTPUT:
        PRINT "Manipulated numbers are ", manipulated_numbers
END
 1def manipulate_numbers(numbers):
 2    """
 3    Takes a set of numbers and applies the following rule to each number:
 4    If the number is even, halve it.
 5    If the number is odd, subtract 1 then halve it.
 6    Returns a new set of manipulated numbers.
 7    """
 8    result = set()
 9    for num in numbers:
10        if num % 2 == 0:
11            result.add(num // 2)
12        else:
13            result.add((num - 1) // 2)
14    return result
15
16numbers = set(range(1, 11))
17manipulated_numbers = manipulate_numbers(numbers)
18print(manipulated_numbers)
19# {0, 1, 2, 3, 4, 5}

3.2. Even numbers

Return a set of even numbers.
FUNCTION get_even_numbers(numbers)
    even_numbers ← EMPTY SET

    FOR EACH number IN numbers DO
        IF number MOD 2 = 0 THEN
            ADD number TO even_numbers
        ENDIF
    ENDFOR

    RETURN even_numbers
ENDFUNCTION


BEGIN
    INPUTS:
        numbers ← SET OF INTEGERS FROM 1 TO 10

    PROCESS:
        even_numbers ← CALL get_even_numbers(numbers)

    OUTPUT:
        PRINT "Even numbers are ", even_numbers
END
 1def even_numbers(numbers):
 2    """
 3    Takes a set of numbers and returns a new set containing only the even numbers.
 4    """
 5    result = set()
 6    for num in numbers:
 7        if num % 2 == 0:
 8            result.add(num)
 9    return result
10
11numbers = set(range(1,11))
12even_nums = even_numbers(numbers)
13print(even_nums)

3.3. Sum numbers in sequence

Return a list of numbers that are a running total as each member of the set is added to the running total.
FUNCTION sum_numbers_in_sequence(numbers)
    running_totals ← EMPTY LIST
    total ← 0

    FOR EACH number IN numbers DO
        total ← total + number
        APPEND total TO running_totals
    ENDFOR

    RETURN running_totals
ENDFUNCTION


BEGIN
    INPUTS:
        numbers ← SET OF INTEGERS FROM 1 TO 10

    PROCESS:
        running_totals ← CALL sum_numbers_in_sequence(numbers)

    OUTPUT:
        PRINT "Running totals are ", running_totals
END
 1def sequential_addition(numbers):
 2    """
 3    Takes a set of numbers and forms a new list by sequentially adding them.
 4    Returns the new list of numbers.
 5    """
 6    result = list()
 7    current_sum = 0
 8    for num in numbers:
 9        current_sum += num
10        result.append(current_sum)
11    return result
12
13numbers = set(range(1,11))
14new_numbers = sequential_addition(numbers)
15print(new_numbers)
16# [1, 3, 6, 10, 15, 21, 28, 36, 45, 55]