A global integer variable Tick is always incremented every millisecond (1000 times per second) regardless of the other programs running. The value of Tick can be read by any program but the value should not be changed. Assume that the value of Tick does not overflow. As an example, the following pseudocode algorithm would output "Goodbye" 40 seconds after outputting "Hello". DECLARE Start : INTEGER OUTPUT "Hello" Start ← Tick REPEAT //do nothing UNTIL Tick = Start + 40000 OUTPUT "Goodbye" A program is needed to help a user to time an event such as boiling an egg. The time taken for the event is known as the elapsed time. The program contains a procedure Timer() which will: • take two integer values representing an elapsed time in minutes and seconds • use the value of variable Tick to calculate the elapsed time • output a warning message 30 seconds before the elapsed time is up • output a final message when the total time has elapsed. For example, to set an alarm for 5 minutes and 45 seconds the program makes the following call: CALL Timer(5, 45) When 5 minutes and 15 seconds have elapsed, the program will output: "30 seconds to go" When 5 minutes and 45 seconds have elapsed, the program will output: "The time is up!" Write pseudocode for the procedure Timer().
- Write pseudocode for the procedure Timer().[6]
Mark scheme
Marking points from the official mark scheme (Oct/Nov 2024). The mark or mark type is shown in brackets.
- [1] PROCEDURE Timer(Mins, Secs : INTEGER)
- [1] DECLARE WarningTick, EndTick : INTEGER
- [1] EndTick ← Tick + 1000 * ((Mins * 60) + Secs)
- [1] WarningTick ← EndTick - (30 * 1000)
- [1] REPEAT //do nothing UNTIL Tick = WarningTick
- [1] OUTPUT "30 seconds to go"
- [1] REPEAT //do nothing UNTIL Tick = EndTick
- [1] OUTPUT "The time is up!"
- [1] ENDPROCEDURE
Write your answer and get it marked
On Oracle Prep you can write or photograph your own answer and have it marked by AI against this mark scheme, with feedback on what you missed.
Sign up free →