Cambridge A Level Computer Science 9618 — 2023 Oct/Nov Paper 2 · Variant 3
9618/23/O/N/23 · 8 questions · 75 marks · ≈84 min
The question paper and its mark scheme, free to read here and free to download. This is Cambridge’s own paper, exactly as it was sat.
Question paper20 pages




















Mark scheme11 pages
Answers below. Sit the paper first if you are practising.











Questions as text
Q1 · A program is being developed in pseudocode before being converted into a programming…
1 A program is being developed in pseudocode before being converted into a programming language. (a) The following table shows four valid pseudocode assignment statements. Complete the table by giving the data type that should be used to declare the variable underlined in each assignment statement. Assignment statement Data type MyVar1 Total1 / Total2 ← MyVar2 27/10/2023 ← MyVar3 "Sum1 / Sum2" ← MyVar4 Result1 AND Result2 ← [4] (b) Other variables in the program have example values as shown: Variable Value Active TRUE Fraction 0.2 Code "Ab12345" Complete the table by evaluating each expression using the example values. Expression Evaluates to Fraction >= 0.2 AND NOT Active INT((Fraction * 100) + 13.3) STR_TO_NUM(MID(Code, 4, 2)) + 5 LENGTH("TRUE" & Code) [4] (c) The program makes use of complex statistical functions. The required functions are not built-in to the programming language and are too complicated for the programmer to write. One solution would be to employ another programmer who has experience of writing these functions, as there is no time to train the existing programmer. State one other way that these functions may be provided for inclusion in the program. ................................................................................................................................................... ............................................................................................................................................. [1] (d) The hardware that runs the program is changed and the program needs to be modified so that it works with the new hardware. Identify the type of maintenance that this represents and give one other reason why this type of maintenance may be needed. Type .......................................................................................................................................... Reason ..................................................................................................................................... ................................................................................................................................................... [2]
Mark scheme: Question Answer Marks 1(a) 4 Assignment statement Data type MyVar1 Total1 / Total2 REAL MyVar2 27/10/2023 DATE MyVar3 "Sum1 / Sum2" STRING MyVar4 Result1 AND Result2 BOOLEAN 1(b) 4 Expression Evaluates to Fraction >= 0.2 AND NOT Active FALSE INT((Fraction1 * 100) + 13.3) 33 STR_TO_NUM(MID(Code, 4, 2)) + 5 28 LENGTH("TRUE" & Code) 11 1(c) The use of a program library (routines) 1 1(d) MP1 Type: Adaptive 2 MP2 Reason: The (user) requirement(s) changes // to accommodate legislative changes
Q2 · Data is a 1D array of integers, containing 30 elements
2 Data is a 1D array of integers, containing 30 elements. All element values are unique. (a) An algorithm will output the index of the element with the smallest value. Draw a program flowchart to represent the algorithm. START END [5] (b) The 30 data values could have been stored in separate variables rather than in an array. Explain the benefits of using an array when designing a solution to part (a). ................................................................................................................................................... ............................................................................................................................................. [2] (c) The requirement changes. Array Data needs to hold 120 elements and each value may include a decimal place. Write a pseudocode statement to declare the modified array. ................................................................................................................................................... ............................................................................................................................................. [2]
Mark scheme: 2(a) 5 MP1 Initialise Min to first value in Data and MinIndex to 1 MP2 Loop through 29 more values (or 30 values in total) MP3 Compare element from Data[] with Min MP4 Set new Min AND save MinIndex when element value < Min in a loop MP5 Output MinIndex 2(b) MP1 Simplifies the algorithm // easier to write / understand / test / debug 2 MP2 It is possible to iterate through the values // can use a loop // allows the storage of many values using a single identifier 2(c) One mark per underlined section 2 DECLARE Data : ARRAY[1:120] OF REAL
Q3 · The diagram represents a queue Abstract Data Type (ADT)
3 The diagram represents a queue Abstract Data Type (ADT). The organisation of this queue may be summarised as follows: • The FrontOfQueue pointer points to the next data item to be removed. • The EndOfQueue pointer points to the last data item added. Queue D3 FrontOfQueue ← D4 D1 D2 D5 EndOfQueue ← The queue is implemented using three variables and a 1D array of eight elements as shown. The variable NumItems stores the number of items in the queue. The pointer variables store indices (index numbers) of the array. (a) Complete the diagram to represent the state of the queue as shown above. Index Array 1 2 3 4 Variable 5 FrontOfQueue 6 EndOfQueue 7 NumItems 5 8 [3] (b) A module AddTo() will add a value to the queue by manipulating the array and variables in part (a). The queue implementation is circular. When pointers reach the end of the queue, they will ‘wrap around’ to the beginning. Before a value can be added to the queue, it is necessary to check the queue is not full. The algorithm to add a value to the queue is expressed in six steps. Complete the steps. 1. If NumItems .............................. then jump to step 6. 2. Increment ................................... . 3. If ................................................. then set EndOfQueue to .............................. . 4. Increment ................................... . 5. Set the ............................ at the index stored in ........................... to the ............................ being added. 6. Stop. [6]
Mark scheme: 3(a) 3 : MP1 D3, D4, D1, D2 and D5 in question order or reversed - in any five consecutive locations MP2 FoQ value matches index with D3 MP3 EoQ value matches index with D5 3(b) MP1 If NumItems is / = 8 // (queue) full then jump to step 6 6 MP2 Increment EndOfQueue MP3 If EndOfQueue = 9 then set EndOfQueue to 1 MP4 Increment NumItems MP5 Set the Element at the index … MP6 stored in EndOfQueue to value/data/item being added Mark as follows: Steps 1 to 4: One mark for gaps filled as shown Step 5: One mark for 'element' and one mark for other two terms
Q4 · A procedure RandList() will output a sequence of 25 random integers, where each integer…
4 A procedure RandList() will output a sequence of 25 random integers, where each integer is larger than the previous one. (a) Write pseudocode for procedure RandList(). ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ............................................................................................................................................. [6] (b) Procedure RandList() is modified so that the random numbers are also written into a 1D array Result. A new module is written to confirm that the numbers in the array are in ascending order. This module contains an IF statement that performs a comparison between elements: IF (Result[x + 1] = Result[x]) OR (Result[x] > Result[x + 1]) THEN Sequence FALSE ← ENDIF Write a simplified version of the conditional clause. ................................................................................................................................................... ................................................................................................................................................... ............................................................................................................................................. [1]
Mark scheme: 4(a) PROCEDURE RandList() 6 DECLARE Count, BaseNum, ThisNum : INTEGER CONSTANT StepVal = 10 BaseNum 0 FOR Count 1 TO 25 ThisNum BaseNum + INT(RAND(StepVal)) OUTPUT ThisNum BaseNum BaseNum + StepVal NEXT Count ENDPROCEDURE MP1 Procedure heading and ending MP2 Local loop counter Count as integer MP3 Loop to iterate 25 times or more for each unique number MP4 ‘Attempt’ to generate a random number including use of INT() in a loop MP5 Ensure that number generated is greater than previous and change ‘previous’ MP6 Output random number after an attempt at MP5 in a loop 4(b) One mark for simplified logical expression: 1 MP1 Result[x + 1] <= Result[x] ALTERNATIVE SOLUTION: Result[x] >= Result[x + 1]
Q5 · A global 1D array of integers contains four elements, which are assigned values as shown…
5 A global 1D array of integers contains four elements, which are assigned values as shown: Mix[1] 4 ← Mix[2] 2 ← Mix[3] 3 ← Mix[4] 5 ← A procedure Process() manipulates the values in the array. The procedure is written in pseudocode as follows: PROCEDURE Process(Start : INTEGER) DECLARE Value, Index, Total : INTEGER Index Start ← Total 0 ← WHILE Total < 20 Value Mix[Index] ← Total Total + Value ← IF Index < 4 THEN Mix[Index] Mix[Index] + Mix[Index+1] ← ELSE Mix[Index] Mix[Index] + Mix[1] ← ENDIF Index (Value MOD 4) + 1 ← ENDWHILE Mix[1] Total * Index ← ENDPROCEDURE Complete the trace table on the opposite page by dry running the procedure when it is called as follows: CALL Process(2) Index Value Total Mix[1] Mix[2] Mix[3] Mix[4] [6]
Mark scheme: 5 6 MP1 Row 1 (initialisation) Each iteration (1 – 5): MP2 1 – Total 2 MP3 2 – Total 5 MP4 3 – Total 10 MP5 4 – Total 15 MP6 5 – Total 28 and final Mix[1] = 56
Q6 · A function TestNum() will take a six-digit string as a parameter
6 A function TestNum() will take a six-digit string as a parameter. The function will test whether the string meets certain conditions and will return an integer value as follows: Return value Condition Example 1 The last three digits are the same but non-zero. "253444" 2 The last three digits are zero. "253000" 3 The first three and last three digits are the same. "410410" The function will return the highest possible value for the given string. If the string does not meet any of the conditions, zero is returned. Write pseudocode for function TestNum(). Assume that the parameter is valid. .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .......................................................................................................................................................... .................................................................................................................................................... [6]
Mark scheme: 6 6 FUNCTION TestNum(ThisNum : STRING) RETURNS INTEGER IF LEFT(ThisNum,3) = RIGHT(ThisNum 3) THEN RETURN 3 ENDIF IF RIGHT(ThisNum, 3) = "000" THEN RETURN 2 ENDIF IF MID(ThisNum, 4, 1) = MID(ThisNum, 5, 1)__ AND MID(ThisNum, 5, 1) = MID(ThisNum, 6, 1) THEN RETURN 1 ENDIF RETURN 0 ENDFUNCTION MP1 Function heading and ending including parameter and return type MP2 Test for Condition 1 MP3 Test for Condition 2 MP4 Test for Condition 3 MP5 Return the highest value if more than one condition is satisfied MP6 Return zero if no condition matched
Q7 · A structure chart shows the modular structure of a program: Module-A() T1 RA SA RB…
7 A structure chart shows the modular structure of a program: Module-A() T1 RA SA RB Sub-Y1() Sub-Y2() Sub-9() (a) Explain the meaning of the curved arrow symbol which begins and ends at Module-A(). ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ............................................................................................................................................. [2] (b) The structure chart shows that Sub-9() is a function. A Boolean value is returned by Sub-9() for processing by Module-A(). The original parameter RA is of type integer and RB is of type string. A record type MyType will be defined with three fields to store the values passed between the two modules. (i) Write pseudocode to define MyType. ........................................................................................................................................... ........................................................................................................................................... ........................................................................................................................................... ........................................................................................................................................... ........................................................................................................................................... ..................................................................................................................................... [3] (ii) The design is modified and Sub-9() is changed to a procedure. The procedure will be called with a single parameter of type MyType. Write the pseudocode header for procedure Sub-9(). ........................................................................................................................................... ..................................................................................................................................... [2]
Mark scheme: 7(a) MP1 iteration / looping 2 MP2 naming all four modules correctly in the correct sequence // e.g. Module-A repeatedly calls Sub-Y1,then SubY2 then Sub-9 7(b)(i) TYPE MyType 3 DECLARE RA : INTEGER DECLARE RB : STRING DECLARE RC : BOOLEAN ENDTYPE MP1 TYPE MyType... ENDTYPE MP2 RA as integer and RB3 as string MP3 RC as Boolean 7(b)(ii) PROCEDURE Sub-9(BYREF Param : MyType) 2 MP 1 One mark for BYREF MP 2 One mark for the rest of the statement
Q8 · A class of students are developing a program to send data between computers
8 A class of students are developing a program to send data between computers. Many computers are connected together to form a wired network. Serial ports are used to connect one computer to another. Each computer: • is assigned a unique three-digit ID • has three ports, each identified by an integer value • is connected to between one and three other computers. Messages are sent between computers as a string of characters organised into fields as shown: <STX><DestinationID><SourceID><Data><ETX> Field name Description a single character marking the start of the message STX (ASCII value 02) DestinationID three numeric characters identifying the destination computer SourceID three numeric characters identifying the source computer a variable length string containing the data being sent Data (Minimum length is 1 character) a single character marking the end of the message ETX (ASCII value 03) For example, the following message contains the data "Hello Jack" being sent from computer "202" to computer "454": <STX>"454202Hello Jack"<ETX> Each computer will run a copy of the same program. Each program will contain a global variable MyID of type string which contains the unique ID of the computer in which the program is running. The first two program modules are defined as follows: Module Description • returns the data field from a message that has been received GetData() • If no message is available, the module waits until one has been (already written) received. • takes a file name as a parameter of type string • creates a text file with the given file name (no checking required) • writes the data field returned by GetData() to the file ReceiveFile() • repeats until the data field is "****", which is not written to the file • outputs a final message giving the total number of characters written to the file, for example: 132456 characters were written to newfile.txt (a) Write pseudocode for module ReceiveFile(). Module GetData() has already been written and must be used. ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ............................................................................................................................................. [7] (b) The use of the string "****" as explained in the module description for ReceiveFile() may cause a problem. Explain the problem and suggest a solution. Problem .................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... Solution ..................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... ................................................................................................................................................... [3] (c) Two new modules are defined, which will allow two users to exchange messages. Module Description • takes two parameters: Transmit() ○ a string representing a message (already written) ○ an integer representing a port number • transmits the message using the given port • takes two parameters: ○ a string representing a Destination ID ○ an integer representing a port number • extracts data from a received message using GetData() and Chat() outputs it • forms a message using data input by the user and sends it using Transmit() • repeats until either the output string or the sent string is "Bye" Reminders: • Each program contains a global variable MyID of type string which contains the unique ID of the computer in which the program is running. • Messages are sent between computers as a string of characters organised into fields as shown: <STX><DestinationID><SourceID><Data><ETX>
Mark scheme: 8(a) PROCEDURE ReceiveFile(FileName : STRING) 7 DECLARE FileData : STRING DECLARE CharCount : INTEGER CONSTANT Terminator = "****" OPENFILE FileName FOR WRITE FileData GetData() CharCount 0 WHILE FileData <> Terminator WRITEFILE FileName, FileData CharCount CharCount + LENGTH(FileData) FileData GetData() ENDWHILE CLOSEFILE FileName OUTPUT CharCount (, " characters were written to ", FileName) ENDPROCEDURE MP1 OPEN file in WRITE mode and subsequently CLOSE MP2 Conditional loop until terminator received MP3 ‘Attempted’ use of GetData() – Ignore CALL … MP4 Fully correct use GetData()to return the data in a loop MP5 Maintain CharCount in a loop MP6 Write each line to the file - except the terminator in a loop MP7 Final output of message giving number of characters written outside loop 8(b) Max 3 marks 3 Problem: • If the file being sent contains a line of the string "****" • then the file being written by ReceiveFile() will end at this point // subsequent file lines will be lost Solution: • Read the file (at the sending end) to find the number of lines it contains • Send an initial message which defines the number of lines in the file ALTERNATIVE SOLUTION: • (Transmitter program) chooses a different terminator string / character that doesn't occur in the file • Transmitter program sends the terminator string / character before first line of file / before the transfer begins 8(c) PROCEDURE Chat(Destination : STRING, Port : INTEGER) 7 DECLARE Data : STRING DECLARE Finished : BOOLEAN CONSTANT Terminator = "Bye" CONSTANT STX = CHR(2) CONSTANT ETX = CHR(3) Finished FALSE REPEAT Data GetData() OUTPUT Data IF Data = Terminator THEN Finished TRUE ENDIF IF NOT Finished THEN //about to reply INPUT Data Transmit(STX & Destination & MyID & Data & ETX, Port) IF Data = Terminator THEN Finished TRUE ENDIF ENDIF UNTIL Finished = TRUE ENDPROCEDURE Conditional loop MP1 Conditional loop MP2 Test for terminator in both cases MP3 Use GetData() to get the data from the message MP4 OUTPUT the data in a loop MP5 INPUT the data reply MP6 ‘Attempted ‘ use of Transmit to send it in a loop MP7 Correct formation of parameters to Transmit() 8(d) Note: Max 3 marks (from either limitation or modification list) 3 Limitation: 1 GetData() does not return a value until a message has been received 2 So once a message has been sent the user has to wait for a reply // chat is half-duplex Modification: 3 If no response allow the receiver to exit chat at any time … 4 GetData() should immediately return a suitable message // set a time limit 5 ... which Chat() can detect and respond by allowing the conversation to continue
What you needed in this session
Cambridge’s own grade thresholds for 2023 Oct/Nov, Paper 2 · Variant 3. A higher threshold means an easier paper — the bar moves with how the cohort did.