ALevel-CS Chapter 12
Algorithm design and problem-solving
12.01 What is computational thinking?
computational thinking
Computational thinking involves four key strands:: abstraction, decomposition, data modelling, pattern recognition and algorithmic thinking.
computational thinking
Abstraction
Abstraction gives us the power to deal with complexity.
An algorithm is an abstraction of a process that takes inputs, executes a sequence of steps, and produces outputs.
An abstract data type defines an abstract set of values and operations for manipulating those values.
Decomposition
Decomposition means breaking problems down into sub-problems in order to explain a process more clearly. Decomposition leads us to the concept of program modules and using procedures and functions.
Data modelling
Data modelling involves analysing and organising data. We can set up abstract data types to model real-world concepts, such as queues or stacks.
Pattern recognition
Pattern recognition means looking for patterns or common solutions to common problems and using these to complete tasks in a more efficient and effective way.
Algorithm design
Algorithm design involves developing step-by-step instructions to solve a problem.
12.02 What is an algorithm?
12.03 Expressing algorithm
Key Terms
- Structured English:: a subset of the English language that consists of command statements used to describe an algorithm
- Pseudocode:: a way of using keywords and identifiers to describe an algorithm without following the syntax of a particular programming language
- Flowchart:: shapes linked together to represent the sequential steps of an algorithm
Expressing algorithm


expression
- Assignment: a value is given a name (identifier) or the value associated with a given identifier is changed.
- Sequence: a number of steps are performed, one after the other.
- Selection: under certain conditions some steps are performed, otherwise different (or no) steps are performed.
- Repetition: a sequence of steps is performed a number of times. This is also known as iteration or looping.
12.04 Variables
Key Terms
- Variable - a storage location for a data value that has an identifier
Variables
We need to be able to refer to a specific memory location so that we can write statements of what to do with the value stored there. We refer to these named memory locations as variables.
You can imagine these variables like boxes with name labels on them. When a value is input, it is stored in the box with the specified name (identifier) on it.

12.05 Assignments
Key Terms
- Identifier table - a table listing the variable identifiers required for the solution, with explanations and data types.
assigning value
Assigning a value

INPUT Number
NumberOfGuesses ← 1
Updating a value

NumberOfGuesses ← NumberOfGuesses + 1
Copying a value

Value2 ← Value1
Swapping two values
Temp ← Value1 
Value1 ← Value2 
Value2 ← Temp
12.06 Logic statements
Key Terms
Nested IF statements - conditional statements within conditional statements
Logic statements
IF A < B 
    THEN 
        <statement(s)> 
    ELSE 
        <statement(s)> 
ENDIF

IF Guess = SecretNumber
    THEN 
        OUTPUT "Well done. You have guessed the secret number" 
    ELSE
        IF Guess > SecretNumber AND NumberofGuesses = 10
            THEN 
                OUTPUT "You still have not guessed the secret number" 
            ELSE 
                IF Guess > SecretNumber 
                    THEN 
                        OUTPUT "secret number is smaller" 
                    ELSE 
                        OUTPUT "secret number is greater" 
                ENDIF 
        ENDIF 
ENDIF
12.07 Loops
Key Terms
Rogue value - a value used to terminate a sequence of values Nested loop - loop containing another loop
Example 1 - Repetition using REPEAT UNTIL
Requirement
The problem to be solved:: Take 10 numbers as input and output the largest number.
Identifier

Pseudocode
INPUT BiggestSoFar 
Counter ← 1 
REPEAT 
    INPUT NextNumber 
    Counter ← Counter + 1 
    IF NextNumber > BiggestSoFar 
        THEN 
            BiggestSoFar ← NextNumber 
    ENDIF 
UNTIL Counter = 10 
OUTPUT BiggestSoFar
Example 2 - Repetition using FOR NEXT
Requirement
The problem to be solved:: Take 10 numbers as input and output the largest number.
Identifier

Pseudocode
INPUT BiggestSoFar 
FOR Counter ← 2 TO 10 
    INPUT NextNumber 
    IF NextNumber > BiggestSoFar 
        THEN 
            BiggestSoFar ← NextNumber 
    ENDIF 
NEXT Counter 
OUTPUT BiggestSoFar
Example 3 - Repetition using a rogue value
Requirement
A sequence of non-zero numbers is terminated by 0. Take this sequence as input and output the largest number.
Identifier

Pseudocode
INPUT BiggestSoFar 
REPEAT 
    INPUT NextNumber 
    IF NextNumber > BiggestSoFar 
        THEN 
            BiggestSoFar ← NextNumber 
    ENDIF 
UNTIL NextNumber = 0 
OUTPUT BiggestSoFar
INPUT NextNumber 
BiggestSoFar ← NextNumber 
WHILE NextNumber <> 0 DO // sequence terminator not encountered
    INPUT NextNumber
    IF NextNumber > BiggestSoFar
        THEN
            BiggestSoFar ← NextNumber
    ENDIF
ENDWHILE 
OUTPUT BiggestSoFar
Example 4 - Implementing the number-guessing game with a loop
requirement
- The player repeatedly inputs a number to guess the secret number stored.
- If the guess is correct, the number of guesses made is output and the game stops.
- If the number input is larger than the secret number, the player is given the message to input a smaller number.
- If the number input is smaller than the secret number, the player is given the message to input a larger number.
structured english
SET value for secret number 
REPEAT the following UNTIL correct guess 
    INPUT guess 
    count number of guesses 
    COMPARE guess with secret number 
    OUTPUT comment 
OUTPUT number of guesses
Identifier

flowchart

pseudocode - post-condition loop
SecretNumber ← Random 
NumberOfGuesses ← 0 
REPEAT
    INPUT Guess 
    NumberOfGuesses ← NumberOfGuesses + 1 
    IF Guess > SecretNumber
        THEN 
            // the player is given the message to input a smaller number 
    ENDIF 
    IF Guess < SecretNumber 
        THEN 
            // the player is given the message to input a larger number 
    ENDIF 
UNTIL Guess = SecretNumber 
OUTPUT NumberOfGuesses
pseudocode - pre-condition loop
SecretNumber ← Random 
INPUT Guess 
NumberOfGuesses ← 1 
WHILE Guess <> SecretNumber DO 
    IF Guess > SecretNumber 
        THEN 
            // the player is given the message to input a smaller number
    ENDIF 
    IF Guess < SecretNumber 
        THEN 
            // the player is given the message to input a larger number 
    ENDIF 
    INPUT Guess 
    NumberOfGuesses ← NumberOfGuesses + 1 
ENDWHILE 
OUTPUT NumberOfGuesses
Example 5 - Calculating running totals and averages
Requirement
Take 10 numbers as input and output the sum of these numbers and the average.
Identifier

Pseudocode
RunningTotal ← 0 
FOR Counter ← 1 TO 10
    INPUT NextNumber
    RunningTotal ← RunningTotal + NextNumber 
NEXT Counter 
OUTPUT RunningTotal 
Average ← RunningTotal / 10 
OUTPUT Average
Example 6 - Using nested loops
Requirement
Take as input two numbers and a symbol. Output a grid made up entirely of the chosen symbol, with the number of rows matching the first number input and the number of columns matching the second number input.
&&&&&&&
&&&&&&&
&&&&&&&
Identifier

Pseudocode - nested loop
INPUT NumberOfRows 
INPUT NumberOfColumns 
INPUT Symbol 
FOR RowCounter ← 1 TO NumberOfRows
    FOR ColumnCounter ← 1 TO NumberOfColumns
        OUTPUT Symbol // without moving to next line
    NEXT ColumnCounter
    OUTPUT Newline // move to the next line 
NEXT RowCounter
12.08 Stepwise refinement
Key Terms
Stepwise refinement - breaking down the steps of an outline solution into smaller and smaller steps
Example 1 - Drawing a pyramid using stepwise refinement
Requirement
Take as input a chosen symbol and an odd number. Output a pyramid shape made up entirely of the chosen symbol, with the number of symbols in the final row matching the number input.
    A
   AAA
  AAAAA
 AAAAAAA
AAAAAAAAA
structured english
Set up initial values 
REPEAT
    Output number of spaces
    Output number of symbols
    Adjust number of spaces and number of symbols to be output in next row UNTIL the required number of symbols have been output in one row
identifier

step 06 - check whether the number of sysbols for the next row is greater than the value input at the begining
UNTIL NumberOfSymbols > MaxNumberOfSymbols
Step
step 01 - Set up initial values expands into::
INPUT Symbol
INPUT MaxNumberOfSymbols
NumberOfSpaces ← (MaxNumberOfSymbols – 1) / 2
NumberOfSymbols ← 1
step 02 - Make sure the input is an odd number
REPEAT
    INPUT MaxNumberOfSymbols
UNTIL MaxNumberOfSymbols MOD 2 = 1
// MOD 2 gives the remainder after integer division by 2
step 03 - Output number of spaces enpands into
FOR i ← 1 TO NumberOfSpaces
    OUTPUT Space // without moving to next line
NEXT i
step 04 - Output number of symbols expands into::
FOR i ← 1 TO NumberOfSymbols
    OUTPUT Symbol // without moving to next line
NEXT i
OUTPUT Newline // move to the next line
step 05 - Adjust values for next row expends into
NumberOfSpaces ← NumberOfSpaces – 1
NumberOfSymbols ← NumberOfSymbols + 2
Pseudocode All
// Set Values
INPUT Symbol
// Input max number of symbols (an odd number)
REPEAT
    INPUT MaxNumberOfSymbols
UNTIL MaxNumberOfSymbols MOD 2 = 1
NumberOfSpaces ← (MaxNumberOfSymbols – 1) / 2
NumberOfSymbols ← 1 
REPEAT
    // Output number of spaces
    FOR i ← 1 TO 
        OUTPUT Space // without moving to next line
    NEXT i
    // Output number of symbols
    FOR i ← 1 TO NumberOfSymbols
        OUTPUT Symbol // without moving to next line
    NEXT i
    OUTPUT Newline // move to the next line
    // Adjust Values For Next Row
    NumberOfSpaces ← NumberOfSpaces – 1
    NumberOfSymbols ← NumberOfSymbols + 2
UNTIL NumberOfSymbols > MaxNumberOfSymbols
12.09 Modules
Key Terms
- Procedure - a sequence of steps that is given an identifier and can be called to perform a sub-task
- Function - a sequence of steps that is given an identifier and returns a single value; function call is part of an expression
- Local variable - a variable that is accessible only within the module in which it is declared
- Global variable - a variable that is accessible from all modules
Procedure
Example - CALL SetValues
CALL SetValues 
REPEAT
    CALL OutputSpaces
    CALL OutputSymbols
    CALL AdjustValuesForNextRow 
UNTIL NumberOfSymbols > MaxNumberOfSymbols
definitions
PROCEDURE SetValues 
    INPUT Symbol 
    CALL InputMaxNumberOfSymbols // need to ensure it is an odd number 
    NumberOfSpaces ← (MaxNumberOfSymbols - 1) / 2 
    NumberOfSymbols ← 1 
ENDPROCEDURE
PROCEDURE InputMaxNumberOfSymbols 
    REPEAT 
        INPUT MaxNumberOfSymbols 
    UNTIL MaxNumberOfSymbols MOD 2 = 1 
ENDPROCEDURE
PROCEDURE OutputSpaces 
    FOR Count1 ← 1 TO NumberOfSpaces 
        OUTPUT Space // without moving to next line 
    NEXT Count1 
ENDPROCEDURE
PROCEDURE OutputSymbols 
    FOR Count2 ← 1 TO NumberOfSymbols 
        OUTPUT Symbol // without moving to next line 
    NEXT Count2 
    OUTPUT Newline // move to the next line 
ENDPROCEDURE
PROCEDURE AdjustValuesForNextRow 
    NumberOfSpaces ← NumberOfSpaces – 1 
    NumberOfSymbols ← NumberOfSymbols + 2 
ENDPROCEDURE
function
Example
CALL SetValues 
REPEAT 
    CALL OutputSpaces 
    CALL OutputSymbols 
    NumberOfSpaces ← AdjustedNumberOfSpaces 
    NumberOfSymbols ← AdjustedNumbeOfSymbols 
UNTIL NumberOfSymbols > MaxNumberOfSymbols
PROCEDURE SetValues 
    INPUT Symbol 
    MaxNumberOfSymbols ← ValidatedMaxNumberOfSymbols 
    NumberOfSpaces ← (MaxNumberOfSymbols - 1) / 2 
    NumberOfSymbols ← 1 
ENDPROCEDURE
FUNCTION ValidatedMaxNumberOfSymbols RETURNS INTEGER 
    REPEAT 
        INPUT MaxNumberOfSymbols 
    UNTIL MaxNumberOfSymbols MOD 2 = 1 
    RETURN MaxNumberOfSymbols 
ENDFUNCTION
PROCEDURE OutputSpaces 
    FOR Count1 ← 1 TO NumberOfSpaces 
        OUTPUT Space // without moving to next line 
    NEXT Count1 
ENDPROCEDURE
PROCEDURE OutputSymbols 
    FOR Count2 ← 1 TO NumberOfSymbols 
        OUTPUT Symbol // without moving to next line 
    NEXT Count2 
    OUTPUT Newline // move to the next line 
ENDPROCEDURE
FUNCTION AdjustedNumberOfSpaces RETURNS INTEGER 
    NumberOfSpaces ← NumberOfSpaces – 1 
    RETURN NumberOfSpaces 
ENDFUNCTION
FUNCTION AdjustedNumberOfSymbols RETURNS INTEGER 
    NumberOfSymbols ← NumberOfSymbols + 2 
    RETURN NumberOfSymbols 
ENDFUNCTION