User interface language: English | Español

Date May 2021 Marks available 8 Reference code 21M.1.HL.TZ0.14
Level HL Paper 1 Time zone no time zone
Command term Construct Question number 14 Adapted from N/A

Question

The following flowchart is intended to represent an algorithm in which numbers that are input cannot be negative.

The flowchart contains a logic error that will affect the algorithm’s functionality.

The algorithm is to be altered to restrict the values that are input to whole numbers between 0 and 1000.

Identify the logic error in the algorithm.

[1]
a.i.

Outline how the error in the algorithm identified in part (i) can be corrected.

[2]
a.ii.

State the name of the method that could be used to restrict the values that are input.

[1]
b.

A further change has been requested for the algorithm to enable it to calculate the average of all the numbers entered. The average will be output when the algorithm terminates.

Based on the flowchart, construct this algorithm using pseudocode. You must include the required changes:

[8]
c.

Markscheme

Award [1 max] 

The algorithm will always output zero as the value of LOWEST, for any set of the input values (because all input values are greater than or equal to 0);
The LOWEST is initialized to 0 and negative inputs are not allowed, zero will be the permanently lowest number;

a.i.

Award [2 max] 

Example 1:

Replace LOWEST = 0;
With LOWEST=99999999/ any very high number;

Example 2:

Before the loop/ Accept “at the beginning”;
The first number NUMBER should be inputted and LOWEST set to NUMBER / LOWEST=input(NUMBER);
Loop only 999 times (because 1 number already inputted)/ condition in the loop should be changed to COUNTER>998;

Example 3:

If statement should be used within the loop;
after the statement ‘input NUMBER’;
For example, if COUNTER==0 then LOWEST = NUMBER/ set LOWEST to the first inputted number;

a.ii.

Award [1 max] 
Validation (check);
Data type check;
Range check;

b.

Award [8 max] 

Correct initialization of HIGHEST, LOWEST and TOTAL;
Correct use of loop for 1000 inputs (doesn’t have to be while loop);
Checking if NUMBER is between 0 to 1000(accept inclusive or exclusive range);
Checking if NUMBER is a whole number;
Running total of numbers (for average calculation);
Correct comparison and changing the value of HIGHEST if needed;
Correct comparison and changing the value of LOWEST if needed;
Appropriate calculation of AVERAGE;
Output of AVERAGE, HIGHEST and LOWEST (outside loop);

Example answer 1

HIGHEST = −1    //any value lesser than or equal to 0
LOWEST = 10000 //any value greater than or equal to 1000
COUNTER = 0
TOTAL = 0
loop while COUNTER < 1000 // allow COUNTER <= 999
input NUMBER
if NUMBER<0 or NUMBER>1000 or NUMBER div 1 ≠ NUMBER/1
//accept NUMBER<1 or NUMBER>999 or NUMBER mod 1 ≠ 0
output " Your number is invalid, please try again"
else
if NUMBER > HIGHEST then
HIGHEST = NUMBER
end if
if NUMBER < LOWEST then
LOWEST = NUMBER
end if
TOTAL = TOTAL + NUMBER
COUNTER = COUNTER + 1
endif
end loop
AVERAGE = TOTAL / COUNTER // allow TOTAL / 1000
output HIGHEST
output LOWEST
output AVERAGE

Example answer 2: (the lowest and the highest are set to the value of the first inputted number)

input NUMBER
loop while NUMBER<0 or NUMBER>1000 or NUMBER div 1 ≠ NUMBER/1
output " Your number is invalid, please try again"
input NUMBER
end loop
HIGHEST = NUMBER
LOWEST = NUMBER
TOTAL = 0
loop COUNTER FROM 0 to 998
input NUMBER
loop while NUMBER<0 or NUMBER>1000 or NUMBER div 1 ≠ NUMBER/1
output " Your number is invalid, please try again"
input NUMBER
end loop
if NUMBER > HIGHEST then
HIGHEST = NUMBER
end if
if NUMBER < LOWEST then
LOWEST = NUMBER
end if
TOTAL = TOTAL + NUMBER

end loop
AVERAGE = TOTAL / 1000
output HIGHEST, LOWEST, AVERAGE

Example answer 3

HIGHEST = -1     //any value lesser than or equal to 0
LOWEST = 10000 //any value greater than or equal to 1000
C = 0
TOTAL = 0
loop while C<1000
input NUMBER
if NUMBER>=0 and NUMBER<=1000
if NUMBER mod 1 == 0
if NUMBER > HIGHEST then
HIGHEST = NUMBER
else
if NUMBER < LOWEST then
LOWEST = NUMBER
endif
end if
TOTAL = TOTAL + NUMBER
C=C+1
endif
else
output(“invalid input, enter another number”)
endif
end loop
output HIGHEST, LOWEST, TOTAL/1000
c.

Examiners report

The term logic error was not always familiar to candidates. Many candidates correctly identified the logic error in Part(a)(i).

a.i.

A large number gave less precise or incorrect answers to Part(a)(ii).

a.ii.

A large number of candidates did not score any marks for question in Part (b) because they were not able to state the name of the method that could be used to restrict the values that are input.

b.

In Part (c) candidates were required to produce an algorithm based on the flowchart given in the question. Most candidates achieved some marks for this algorithm, but full marks were rare.

c.

Syllabus sections

Topic 4: Computational thinking, problem-solving and programming » 4.2 Connecting computational thinking and program design
Show 59 related questions
Topic 4: Computational thinking, problem-solving and programming

View options