Free until 14 Nov · 80% off for the first 100 · Pricing

Computer Science 9618/21 May/June 2025: question paper and mark scheme

Cambridge AS & A Level Computer Science (9618), Paper 2 Fundamental Problem-solving and Programming Skills, May/June 2025. Read both free below, or download them. Done the paper? Get it marked by AI against this mark scheme.

9618_s25_qp_219618_s25_ms_219618/21/M/J/25

Paper
Paper 2 Fundamental Problem-solving and Programming Skills
Total marks
75
Time
2 hours
Code on the paper
9618/21/M/J/25
9618_s25_ms_21.pdf

9618/21 mark scheme, question by question

Each question as it's printed, and the mark scheme's points for it, as text. Diagrams, tables and graphs are in the PDFs above.

Question 116 marks

Question

A program is being developed to help the manager of a shop control the stock. (a) An identifier table has been used during the design stage. Complete the identifier table: Example value Explanation Variable name Data type a category of stock "Fruit" that is sold in the shop when an item was 20/02/2025 sold 12.67 the cost of an item to indicate if an item is TRUE in stock [4] (b) A module Sales() is part of the stock control program. The table contains pseudocode extracts from the module Sales() Each extract may include all or part of: • assignment • selection • iteration (repetition). Complete the table by placing one or more ticks (✓) in each row: Pseudocode extract Assignment Selection Iteration Result CalculateTotal() WHILE IsClosed REPEAT INPUT Value UNTIL Sales[4] > Value IF Sales[Current] <= 150 THEN Discount TRUE ENDIF CASE OF Option [5] (c) Decomposition has been used to design the program to help the shop manager control the stock. Describe decomposition. …… [3]

Mark scheme

1(a) 4 Example Explanation Variable name Data type value "Fruit" a category of stock that is Category STRING sold in the shop 20/02/2025 when an item was sold DateSold DATE 12.67 the cost of an item (Item)Cost/Price REAL TRUE to indicate if an item is in (Item)InStock BOOLEAN stock Mark as follows: 1 mark per row for each variable name and data type 1(b) 5 Pseudocode extract Assignment Selection Iteration Result ← CalculateTotal() ✓ WHILE IsClosed ✓ REPEAT ✓ ✓ INPUT Value UNTIL Sales[4] > Value IF Sales[Current] <= 150 THEN ✓ ✓ Discount ← TRUE ENDIF CASE OF Option ✓ Mark as follows: One mark for each correct row 1(c) Decomposition involves: 3 MP1 Breaking down a problem into sub problems MP2 In order to explain / understand the process/task of how a (stock control) can be managed in more detail MP3 Leading to the concept of the program designed as a series of modules / procedures / functions // or by example of different stock control modules MP4 Makes the program easier to test / debug Max 3 Max 2 if no mention of stock control

Question 210 marks

Question

A program is being developed to calculate the pay of employees working for a company. A function CalculateBonus() calculates bonus pay based on the value of sales. Bonus pay is calculated as shown in the table. Value of sales Bonus pay (in dollars) (in dollars) below 2000 0 between 2000 and 4000 inclusive 10 above 4000 100 A flowchart for the function CalculateBonus() has been designed. START Set BonusPay to 0 INPUT ValueOfSales Is NO ValueOfSales > 4000 ? YES Is NO Set BonusPay to 10 ValueOfSales >= 2000 ? YES Set BonusPay to 100 RETURN BonusPay END (a) The flowchart contains logic errors. One logic error is that BonusPay will not be set to 10 although the ValueOfSales input is between 2000 and 4000 inclusive. (i) Explain why this error occurs. …… [1] (ii) Explain how this error could be corrected. …… [1] (b) There are different ways to reduce the risk of errors when developing the new program, such as the use of constants. (i) State a value that could be replaced by a constant in the function CalculateBonus() …… [1] (ii) Explain how the use of constants helps to reduce the risk of programming errors. …… [2] (iii) One other way that can reduce the risk of errors when writing the program is the use of library routines. Explain how library routines can reduce the risk of programming errors. …… [1] (c) All the logic errors have been corrected, and the program has been coded. Identify and describe two other types of error that the program could contain. Type of error …… Description …… Type of error …… Description …… [4]

Mark scheme

2(a)(i) MP1 The two decision boxes are in the wrong order // 1 The first decision symbol is wrong MP2 The first decision should check for values greater than or equal to 2000 Max 1 2(a)(ii) Explaining how to correct the flowchart. 1 MP1 Swap around the two decision boxes MP2 The first decision box should check for values greater than or equal to 2000 and the second decision box should check for values above 4000 Max 1 2(b)(i) 2000 / 4000 / 10 / 100 1 2(b)(ii) MP1 The value cannot be changed // avoids being different in two places 2 MP2 Makes the program easier to understand MP3 Avoids repeatedly writing the same value throughout the program MP4 A change to the value requires a change in only one statement Max 2 2(b)(iii) MP1 (The code is) tried and tested so error free 1 MP2 Provides functionality / code that the programmer may find difficult to code themselves Max 1 2(c) MP1 Syntax (error) 4 MP2 Rules of programming language // the language grammar was not followed MP3 Run-time (error) MP4 The program performs an illegal operation Mark as follows: One mark for naming each type of error and one mark for the description

Question 38 marks

Question

A student has been asked to create a simple guessing game program. This program will generate a random integer value between 1 and 100. It will then repeatedly prompt the user to input an integer value until they input the randomly generated value. The student has written a structured English description: step 1 – randomly generate an integer value between 1 and 100 inclusive step 2 – prompt the user to input an integer value step 3 – output an appropriate message if the value input was too high; then repeat from step 2 step 4 – output an appropriate message if the value input was too low; then repeat from step 2 step 5 – output an appropriate message if the value input was the same value that was randomly generated; then end the program. Write a pseudocode algorithm from this structured English description. Assume no input validation is needed. …… [8]

Mark scheme

3 Example solution: 8 DECLARE GeneratedValue : INTEGER DECLARE Guess : INTEGER GeneratedValue ← INT(RAND(100)) + 1 REPEAT OUTPUT "Enter a guess between 1 and 100: " INPUT Guess IF Guess > GeneratedValue THEN OUTPUT "Guess was too high" ENDIF IF Guess < GeneratedValue THEN OUTPUT "Guess was too low" ENDIF UNTIL Guess = GeneratedValue OUTPUT "Number guessed correctly" MP1 Declare all variables used MP2 Uses RAND() function MP3 Uses INT() function MP4 Correct syntax for random number between 1 and 100 MP5 Conditional loop until correct number guessed MP6 Prompt and input a guess in a loop MP7 Check if guess is too high in a loop MP8 Check if guess is too low in a loop MP9 Output appropriate message (x2) when the number is not guessed correctly (in the loop) and output correct guess message Max 8

Question 428 marks

Question

Study the algorithm: DECLARE Chars : ARRAY[1:4] OF CHAR DECLARE I, J : INTEGER DECLARE Key : CHAR I 2 Chars[1] 'D' Chars[2] 'T' Chars[3] 'H' Chars[4] 'R' WHILE I <= 4 //Outer loop Key Chars[I] J I – 1 WHILE J >= 0 AND Chars[J] > Key //Inner loop Chars[J + 1] Chars[J] J J – 1 ENDWHILE Chars[J + 1] Key I I + 1 ENDWHILE (a) The outer loop structure used in the algorithm is not the most appropriate one to use. State the type of loop structure that would be the most appropriate to use and justify why it is the most appropriate. Loop structure …… Justification …… [2] (b) Complete the trace table by dry running the algorithm. The first row has been completed. Chars I Key J Chars[J] [1] [2] [3] [4] 2 'D' 'T' 'H' 'R' [6]

Mark scheme

4(a) MP1 Count-controlled 2 MP2 The number of iterations required is known 4(b) I Key J Chars[J] Chars 6 [1] [2] [3] [4] 2 'D' 'T' 'H' 'R' 'T' 1 'D' MP1 3 'H' 2 'T' 'T' MP2 1 'D' MP3 'H' 4 'R' 3 'T' 'T' 2 'H' (‘R’) MP4 'R' 5 MP5 Chars array final values MP6 'D' 'H' 'R' 'T' Mark as follows: MP1, MP2, MP3, MP4, MP5 1 mark per enclosure

Question 57 marks

Question

Stacks and queues are both abstract data types. A stack uses a top-of-stack pointer to indicate the location of the last item added to the stack. A queue uses two pointers: • a front pointer to indicate the location of the next item to be removed from the queue • a rear pointer to indicate the location of the next item to be added to the queue. A queue can be used to reverse the items stored on a stack. For example, if a stack contains six items: Initial state of the stack: top-of-stack pointer item 6 item 5 item 4 item 3 item 2 item 1 Final state of the stack when the items have been reversed: top-of-stack pointer item 1 item 2 item 3 item 4 item 5 item 6 Describe how the queue could be used to reverse the items that are currently stored on the stack. Your description must include how the pointers are used in both the stack and queue. Assume: • The stack initially contains an unknown number of items. • The queue can store all the items currently stored on the stack. • The queue is initially empty. …… [7]

Mark scheme

5 MP1 Pop an item off the stack 7 MP2 Update Stack pointer MP3 Add it to the queue MP4 Update Rear pointer MP5 Repeat until the stack is empty MP6 Remove an item from the queue MP7 Update Front pointer MP8 Push it onto the stack MP9 Update the Stack pointer MP10 Repeat until the queue is empty Max 7

Question 612 marks

Question

A program monitors the speed of vehicles as they move around a large building site. Each vehicle contains a sensor which reads an integer value that represents the speed of the vehicle. The value is expected to be in the range 0 to 60 inclusive. The sensors cannot read values less than 0. A program module has been written to validate the values read by the sensors. (a) A test plan is needed to fully test the module. Complete the table. The first line has been completed for you. Assume the sensors generate only integer values. Type of test data Test data value Expected outcome normal 36 data item is accepted [4] (b) Each sensor used in the system has a unique sensor ID number in the range 1 to 50. The program that is used to monitor the speed of each vehicle reads each sensor value every second and stores this value along with the sensor’s unique ID into a global 2D array Reading The global array Reading has been declared as follows: DECLARE Reading : ARRAY[1:2000, 1:2] OF INTEGER The array contains 4000 elements organised as 2000 rows and 2 columns. Column 1 contains the sensor value, and column 2 contains the sensor ID. When 2000 sensor readings have been taken, the array is full and the system stops taking any more sensor readings until the array has been processed. A procedure Sort() is needed to sort the array into ascending order of sensor value using an efficient bubble sort algorithm. Write efficient pseudocode for the procedure Sort() …… [8]

Mark scheme

6(a) 4 Type of test data Test data value Expected outcome normal 36 data item is accepted boundary/ 0/1 data item is accepted extreme/ normal boundary/ 59 / 60 data item is accepted extreme/ normal abnormal >= 61 data item is rejected normal 15 data item is accepted Mark as follows: 1 mark for each row with (Type and Value and Outcome) 6(b) Example solution: 8 PROCEDURE Sort() DECLARE Temp, J, Boundary : INTEGER DECLARE NoSwaps : BOOLEAN Boundary ← 1999 REPEAT NoSwaps ← TRUE FOR J ← 1 TO Boundary IF Reading[J, 1] > Reading[J+1, 1] THEN //first swap sensor value Temp ← Reading[J, 1] Reading[J, 1] ← Reading[J+1, 1] Reading[J+1, 1] ← Temp //now swap corresponding ID Temp ← Reading[J, 2] Reading[J, 2] ← Reading[J+1, 2] Reading[J+1, 2] ← Temp NoSwaps ← FALSE ENDIF NEXT J Boundary ← Boundary - 1 UNTIL NoSwaps = TRUE ENDPROCEDURE MP1 Procedure heading and ending MP2 Conditional loop correctly formed including Boolean flag declared and initialised MP3 An inner loop MP4 Correct range 1 to 1999 for inner loop MP5 Comparison of element J with J+1 in a loop MP6 Declare Temp variable and swap elements in a loop MP7 Both SensorID and Speed values were swapped in a loop MP8 'No-Swap' mechanism: • Conditional outer loop including flag reset • Flag set in inner loop to indicate swap MP9 Reducing Boundary in the outer loop

Question 718 marks

Question

A program is being developed to implement a customer loyalty scheme for a coffee shop. The programmer has decided that the following data items need to be stored for each customer: Data item Description customer ID a unique six-digit string an integer value that is increased by one for every cup of coffee the points customer orders When a customer visits the shop and orders coffee, the scheme operates as follows: • The total number of points is increased by the number of coffees ordered. • If just one cup of coffee is ordered and the number of points goes above 10, then: ◦ the cup of coffee they have just ordered is given to them free of charge ◦ the number of points is reduced by 11. • If the order is for multiple coffees and the number of points goes above 10, then: ◦ they get one coffee free of charge for every 11 points ◦ the number of points is reduced by 11 for each free coffee. For example, the: • customer currently has 9 points • customer orders 16 cups of coffee • total number of points now becomes 25 • customer gets 2 free coffees and now has 3 points left. The programmer has defined a program module that is called every time a customer places an order: Module Description • called with two integer parameters: ◦ the number of coffees ordered CustomerOrder() ◦ the current number of points • output a suitable message giving the number of free coffees • return a value for the new points total. (a) Write pseudocode for module CustomerOrder() …… [6] (b) A text file Loyalty.txt will be used to store the data items for the loyalty scheme. The data items for each customer will be stored on a separate line of the text file where each data item is separated by a comma: <CustomerID>,<Points> The contents of the text file Loyalty.txt will always be stored in ascending order by customer ID. When the data items are read from or written to the text file Loyalty.txt, they may need to be converted to the appropriate data type. Each customer has a unique customer ID starting at "100001" with this value increasing by one each time a new customer joins the loyalty scheme. When a customer joins the loyalty scheme, they are assigned the next customer ID and value of points is set to 0. For example, if the loyalty scheme has 204 customers and a new customer joins the loyalty scheme, the following line is added to the text file Loyalty.txt: "100205,0" You can assume that the number of customers in the loyalty scheme will never be more than 9000. The programmer has defined a program module as follows: Module Description • called with an integer parameter representing the number of new customers to be added to the loyalty scheme AddNewCustomers() • adds a new line, containing the required information, to the text file Loyalty.txt for each customer added to the loyalty scheme • outputs each new customer ID added to the loyalty scheme (i) Write pseudocode for module AddNewCustomers() Assume that there is at least one customer already in the loyalty scheme. …… [8] (ii) The requirements for AddNewCustomers() are changed. There may be no existing customers in the loyalty scheme. Explain the changes that will need to be made to the module AddNewCustomers() …… [4]

Mark scheme

7(a) Example solution: 6 FUNCTION CustomerOrder(Number, Points : INTEGER) RETURNS INTEGER DECLARE NewPoints, NumberFree: INTEGER NewPoints ← Points + Number NumberFree ← 0 WHILE NewPoints >= 11 AND Number > 0 NumberFree ← NumberFree + 1 NewPoints ← NewPoints -11 Number ← Number - 1 END WHILE OUTPUT "Number of free coffees is: ", NumberFree RETURN NewPoints ENDFUNCTION MP1 Function header and ending and parameters and return type MP2 Number of coffees ordered added to points MP3 Correct calculation of one free coffee MP4 Attempted calculation of multiple free coffees and reduced NewPoints MP5 Output number of free drinks with suitable message MP6 Return of NewPoints 7(b)(i) Example solution: 8 PROCEDURE AddNewCustomers(NumToAdd : INTEGER) DECLARE CustomerID : INTEGER DECLARE Count : INTEGER DECLARE Line : STRING DECLARE NewLine : STRING OPENFILE "Loyalty.txt" FOR READ WHILE NOT EOF("Loyalty.txt") READFILE "Loyalty.txt", Line ENDWHILE CLOSEFILE "Loyalty.txt" OPENFILE "Loyalty.txt" FOR APPEND CustomerID ← STR_TO_NUM((LEFT(Line, 6)) FOR Count ← 1 TO NumToAdd CustomerID ← CustomerID + 1 OUTPUT CustomerID NewLine ← NUM_TO_STR(CustomerID) & ",0" WRITEFILE "Loyalty.txt", NewLine NEXT Count CLOSEFILE "Loyalty.txt" ENDPROCEDURE Mark as follows: MP1 All variables used are declared using the correct type including a string and an integer MP2 Open file in read mode and close (before opening in append mode) MP3 Conditional loop with EOF("Loyalty.txt") MP4 Read Line from file // Count number of records in the file MP5 Open the file in append mode and subsequently close MP6 Extract CustomerID from Line and convert to integer // use count from MP4 to generate last CustomerID stored MP7 A (count controlled) loop for the number of customers to add MP8 Increment CustomerID and output the new CustomerID in loop MP9 Create string for new CustomerID and write to file in loop Max 8 7(b)(ii) MP1 Check if the text file loyalty.txt exists / is empty 4 MP2 If file does not exist it must be created (using write mode) MP3 If the file has to be created / is empty then set the first CustomerID to 100001 MP4 Write "100001,0" to loyalty.txt (using write mode) MP5 For all but the first customer (to be added to the empty file) use the existing code / module Max 4

Checked your answers against these? Let AI mark the whole paper, on your own working.

Mark my 9618/21

How this paper is marked

Examiners follow the generic marking principles at the front of the scheme, then each question's points: method (M), accuracy (A) and independent (B) marks, error carried forward where the scheme allows it, and positive marking, so you're credited for what you got right.

Check your answers against it

Done this paper? Upload your script and CIE Buddy's AI marker marks it question by question against this exact scheme, puts the ticks on your own working and says what each lost mark needed.

9618/21 in other series

Find another Computer Science paper

Every AS & A Level Computer Science mark scheme

Question papers and mark schemes © Cambridge University Press & Assessment. CIE Buddy is independent and not connected to Cambridge.

9618/21 questions

Where can I find the 9618/21 May/June 2025 mark scheme?

On this page, free: the mark scheme for AS & A Level Computer Science 9618/21, May/June 2025 (9618_s25_ms_21), and the question paper (9618_s25_qp_21), to read or download, with each question's marking points written out underneath.

How many marks is 9618/21 out of?

Computer Science 9618/21 for May/June 2025 is out of 75 marks, with 2 hours to answer it.

Can I get my 9618/21 answers marked?

Yes. Upload your answers to 9618/21/M/J/25 as a PDF or photos, and CIE Buddy marks every question against this paper's official mark scheme, using Cambridge's marking rules. You get your score, each lost mark explained on your own script, and the topics to revise. It's a guide, not an official Cambridge grade.