Chapter 12 Answers
Chapter 12 Answers
Task 12.01
Task 12.02
These examples show the sort of detail students should show in their answers.
Task 12.04
IF Age < 12 OR Age > 60 THEN fare is free
Question 12.01
The greater than signs (>) have to be replaced by smaller than signs (<):
IF Number1 < Number2
THEN // Number1 is smaller
IF Number1 < Number3
THEN
OUTPUT Number1
ELSE
OUTPUT Number3
ENDIF
ELSE // Number2 is smaller
IF Number2 < Number3
THEN
OUTPUT Number2
ELSE
OUTPUT Number3
ENDIF
ENDIF
Question 12.02
First part
The logic statement for Until has to be changed:
INPUT BiggestSoFar
Counter 1
REPEAT
INPUT NextNumber
Counter Counter + 1
IF NextNumber > BiggestSoFar
THEN
BiggestSoFar NextNumber
Second part
An extra input is required and again the logic statement for Until has to be changed:
INPUT MaxNumbers
INPUT BiggestSoFar
Counter 1
REPEAT
INPUT NextNumber
Counter Counter + 1
IF NextNumber > BiggestSoFar
THEN
BiggestSoFar NextNumber
ENDIF
UNTIL Counter = MaxNumbers
OUTPUT BiggestSoFar
Task 12.05
If it is not known how many times the loop will need to be executed, a REPEAT loop (or a WHILE loop) is more
appropriate. To be able to calculate the average, a count must be kept of how many numbers have been added
together. Note that when using a REPEAT loop the rogue value is counted as a number, so calculating the average
needs to use (Count – 1)
Using a REPEAT loop:
RunningTotal 0
Count 0
REPEAT
INPUT NextNumber
RunningTotal RunningTotal + NextNumber
Count Count + 1
UNTIL NextNumber = 0
OUTPUT RunningTotal
Average RunningTotal / (Count – 1)
OUTPUT Average
Using a WHILE loop (note that rogue value is not counted as a number):
RunningTotal 0
Count 0
INPUT NextNumber
WHILE NextNumber <> 0 DO
Count Count + 1
RunningTotal RunningTotal + NextNumber
INPUT NextNumber
ENDWHILE
OUTPUT RunningTotal
Task 12.06
01 // Set up initial values
01.1 INPUT symbol
01.2 // Input Max Number Of Symbols
01.2.1 REPEAT
01.2.2 INPUT MaxNumberOfSymbols
01.2.3 UNTIL MaxNumberOfSymbols MOD 2 = 1
01.3 NumberOfLeadingSpaces (MaxNumberOfSymbols - 1) / 2
01.4 NumberOfSymbols 1
01.5 NumberOfMiddleSpaces -1
02 REPEAT
03 // Output number of leading spaces
03.1 FOR i 1 TO NumberOfLeadingSpaces
03.2 OUTPUT Space // without moving to next line
03.3 NEXT i
04 // Output symbol, middle spaces, symbol
04.01 IF NumberOfSymbols = 1 // top of pyramid
04.02 THEN
04.03 OUTPUT Symbol
04.04 ELSE
04.05 IF NumberOfSymbols < MaxNumberOfSymbols
04.06 THEN
04.07 OUTPUT Symbol
04.08 FOR i 1 TO NumberOfMiddleSpaces
04.09 OUTPUT Space // no new line
04.10 NEXT i
04.11 OUTPUT Symbol
04.12 ELSE // output the final line
04.13 FOR i 1 TO NumberOfSymbols
04.14 OUTPUT Symbol // no new line
04.15 NEXT i
04.16 ENDIF
04.17 ENDIF
04.18 OUTPUT Newline // move to next line
05 // Adjust values for next row
05.1 NumberOfLeadingSpaces NumberOfLeadingSpaces - 1
05.2 NumberOfMiddleSpaces NumberOfMiddleSpaces + 2
05.3 NumberOfSymbols NumberOfSymbols + 2
06 UNTIL NumberOfSymbols > MaxNumberOfSymbols
A better solution is to treat the tip and the base of the triangle separately and use the REPEAT loop for
the other lines.
PROCEDURE SetValues
INPUT symbol
// Input Max Number Of Symbols
REPEAT
INPUT MaxNumberOfSymbols
UNTIL MaxNumberOfSymbols MOD 2 = 1
NumberOfLeadingSpaces (MaxNumberOfSymbols - 1) / 2
NumberOfSymbols 1
NumberOfMiddleSpaces -1
ENDPROCEDURE
PROCEDURE OutputTopRow
CALL OutputLeadingSpaces
OUTPUT Symbol
OUTPUT Newline
ENDPROCEDURE
PROCEDURE AdjustValuesForNextRow
NumberOfLeadingSpaces NumberOfLeadingSpaces - 1
NumberOfMiddleSpaces NumberOfMiddleSpaces + 2
NumberOfSymbols NumberOfSymbols + 2
ENDPROCEDURE
PROCEDURE OutputLeadingSpaces
FOR i 1 TO NumberOfLeadingSpaces
OUTPUT Space // without moving to next line
NEXT i
ENDPROCEDURE
PROCEDURE OutputRow
OUTPUT Symbol
FOR i 1 TO NumberOfMiddleSpaces
OUTPUT Space // don’t move to next line
NEXT i
PROCEDURE OutputBaseRow
FOR i 1 TO NumberOfSymbols
OUTPUT Symbol
NEXT i
OUTPUT Newline
ENDPROCEDURE
Exam-style Questions
1 Weighting 10
Total 0
FOR Count 1 TO 9
INPUT Digit
Value Digit * Weighting
Total Total + Value
Weighting Weighting – 1
Count Count + 1
NEXT Count
Remainder Total MOD 11
CheckDigit 11 – Remainder
IF CheckDigit = 10
THEN
CheckDigit X
ENDIF
Marking guidance:
1 mark for initialising Weighting and Total correctly
1 mark for correct loop structure
1 mark for correct input statement within loop
1 mark for correct assignment to Value within loop
1 mark for correct assignment to Total within loop
1 mark for correct updating of Weighting and Count
1 mark for correct assignment to Remainder
1 mark for correct assignment to CheckDigit
1 mark for correct IF statement structure and correct Boolean expression
Marking guidance:
1 mark for initialising Positive correctly
1 mark for initialising Negative correctly
1 mark for correct REPEAT loop structure and correct Boolean expression
1 mark for correct input statement within the loop
1 mark for correct IF THEN ELSE structure within loop
1 mark for correct Boolean expression
1 mark for correctly incrementing Positive and Negative
3 RogueValue -1
Total 0
Count 0
INPUT Number
WHILE Number <>RogueValue DO
Count Count + 1
Total Total + Number
INPUT Number
ENDWHILE
If Count > 0
THEN
Average Total / Count
OUTPUT Average
ENDIF
Marking guidance:
1 mark for initialising RogueValue
1 mark for initialising Total and Count correctly
1 mark for INPUT statement before loop
1 mark for correct loop structure and correct Boolean expression
1 mark for correct assignments to Count and Total within loop
1 mark for correct input statement as last statement within loop
1 mark for correct IF statement structure and correct Boolean expression
1 mark for correct assignment to Average and output Average