Chapter 15 Answers
Chapter 15 Answers
PROCEDURE Averages;
DECLARE Average : REAL
DECLARE Number1, Number2 : INTEGER
CALL InputNumbers(Number1, Number2)
Average CalculateAverage(Number1, Number2)
CALL OutputMessage(Average)
ENDPROCEDURE
PROCEDURE NumberGuessingGame
DECLARE SecretNumber, Guess : INTEGER
SecretNumber GenerateSecretNumber
Guess InputGuess
CALL OutputMessage(Guess, SecretNumber)
ENDPROCEDURE
PROGRAM Connect4
DECLARE Board : ARRAY[0..6, 0..7] OF CHAR
DECLARE ThisPlayer : CHAR
DECLARE GameFinished, WinnerFound : BOOLEAN
CALL InitialiseBoard(Board)
CALL SetUpGame(ThisPlayer, GameFinshed)
CALL OutputBoard(Board)
WHILE GameFinished = FALSE DO
CALL PlayerMakesMove(ThisPlayer, Board)
CALL OutputBoard(Board)
CALL CheckGameFinished(Board, GameFinished)
IF GameFinished = FALSE
THEN
CALL SwapThisPlayer(ThisPlayer)
ENDIF
ENDWHILE
ENDPROGRAM
PROCEDURE ListEvents
OUTPUT "1 : Start button"
OUTPUT "2: Enter PIN"
OUTPUT "3: Activate Sensor"
ENDPROCEDURE
PROCEDURE Wait
DECLARE i : INTEGER
FOR i := 1 TO 2000 DO
// do nothing
OUTPUT ''
NEXT i
ENDPROCEDURE
Question 15.01
1101 (in order of output) but this represents the number 1011
Task 15.06
FUNCTION ConvertFromHex(HexString : STRING) RETURNS INTEGER
DECLARE ValueSoFar, HexValue, HexLength, i : INTEGER
DECLARE HexDigit : CHAR
ValueSoFar 0
HexLength Length(HexString)
FOR i 1 TO HexLength
HexDigit HexString[i]
CASE OF HexDigit
'A': HexValue 10
'B': HexValue 11
'C': HexValue 12
'D': HexValue 13
'E': HexValue 14
'F': HexValue 15
OTHERWISE HexValue StringToInt(HexDigit)
ENDCASE
ValueSoFar ValueSoFar * 16 + HexValue
NEXT i
RETURN ValueSoFar
ENDFUNCTION
Task 15.07
Test data for the number guessing game
1 Type of test data Example test data Expected output
Task 15.08
INPUT BinaryString
StringLength Length(BinaryString)
FOR i 1 TO StringLength
Bit BinaryString[i]
BitValue IntegerValue(Bit) // convert string to integer
DenaryValue DenaryValue + 2 + BitValue
NEXT i
3 Errors:
DenaryValue should be initialised to 0 before the loop
The + highlighted in the code above should be a *.
Task 15.09
01 CALL InitialiseBoard
02 CALL SetUpGame
03 CALL OutputBoard
04 WHILE GameFinished = FALSE
05 CALL ThisPlayerMakesMove
06 CALL OutputBoard
07 CALL CheckIfThisPlayerHasWon
08 IF GameFinished = FALSE
09 THEN
10 CALL SwapThisPlayer
11 ENDIF
12 ENDWHILE
// main program
Number1 GetPositiveNumber
Number2 GetPositiveNumber
Exam-style Questions
1 FUNCTION Binary(Number : INTEGER) : STRING
DECLARE BinaryString : STRING
DECLARE PlaceValue : INTEGER
BinaryString '' // empty string
PlaceValue 8
REPEAT
IF Number >= PlaceValue
THEN
BinaryString BinaryString & '1'
Number Number - PlaceValue
ELSE
BinaryString BinaryString & '0'
ENDIF
PlaceValue PlaceValue DIV 2
UNTIL Number = 0
RETURN BinaryString
ENDFUNCTION
a Dry-run the function call Binary(11) by completing the given trace table.
Number BinaryString PlaceValue Number>=PlaceValue
'' 8
11 '1' 4 TRUE
3 '10' 2 FALSE
1 '101' 1 TRUE
0 '1011' 0 TRUE
Marking guidance:
For each type of test data row award:
1 mark for suitable example of test data of the correct type
1 mark for correct expected output
1 mark for suitable justification
Marking guidance:
1 mark for each correct label