Académique Documents
Professionnel Documents
Culture Documents
9691 COMPUTING
9691/23
This mark scheme is published as an aid to teachers and candidates, to indicate the requirements of
the examination. It shows the basis on which Examiners were instructed to award marks. It does not
indicate the details of the discussions that took place at an Examiners meeting before marking began,
which would have considered the acceptability of alternative answers.
Mark schemes should be read in conjunction with the question paper and the Principal Examiner
Report for Teachers.
Cambridge will not enter into discussions about these mark schemes.
Cambridge is publishing the mark schemes for the October/November 2012 series for most IGCSE,
GCE Advanced Level and Advanced Subsidiary Level components and some Ordinary Level
components.
Page 2
1
Mark Scheme
GCE AS/A LEVEL October/November 2012
Syllabus
9691
Paper
23
Enter bike
specification
[2]
(b)
Super Bikes
[1]
[3]
[1]
Page 3
Mark Scheme
GCE AS/A LEVEL October/November 2012
e.g. VB 2005
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BOOLEAN BikeRegValid
BikeRegValid = TRUE
IF LEN(BikeReg) <> 5 THEN
BikeRegValid = FALSE
END IF
IF NOT(MID(BikeReg,3,3)>=000
AND MID(BikeReg,3,3)<=999) THEN
BikeRegValid = FALSE
END IF
IF MID(BikeReg,1,2) <> BK THEN
BikeRegValid = FALSE
END IF
IF BikeRegValid THEN
Console.writeline(valid)
Else Console.writeline(invalid)
END IF
e.g. C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Syllabus
9691
Paper
23
Page 4
Mark Scheme
GCE AS/A LEVEL October/November 2012
Syllabus
9691
Paper
23
e.g. Python
1
2
3
4
5
6
7
8
9
10
11
12
bikeReg = input()
bikeRegValid = True
if len(bikeReg) != 5:
bikeRegValid = False
if ((bikeReg[2:5] >='000') & (bikeReg[2:5] <= '999')) != True:
bikeRegValid = False
if bikeReg[0:2]!='BK':
bikeRegValid = False
if bikeRegValid:
print ('valid')
else:
print ('invalid')
(f)
[10]
[2]
[3]
[3]
Page 5
2
Mark Scheme
GCE AS/A LEVEL October/November 2012
Syllabus
9691
Paper
23
(a)
Position
Row<=30
Position
<=4
BikeReg
<>BBB
BikeSpace
[1,1]
TRUE
TRUE
TRUE
[1,2]
[2,1]
BK380
BK162
BK747
FALSE
TRUE
1 mark for second decision in heading
1 mark for third decision in heading
1 mark for correct array elements in heading
1 mark for correct values into array elements
1 mark for correct values in first 5 columns
1 mark for correct placing of FALSE
(b)
[1,4]
BK707
[1,3]
e.g. Pascal
Row := 1;
REPEAT
Position := 1;
REPEAT
READLN(BikeReg);
IF BikeReg = BBB THEN Exit;
BikeSpace[Row,Position] := BikeReg;
Position := Position + 1;
UNTIL Position > 4;
Row := Row + 1;
UNTIL Row > 30;
e.g. VB 2005
Row = 1
DO
Position = 1
DO
BikeReg = CONSOLE.READLINE()
IF BikeReg = BBB THEN EXIT
BikeSpace(Row,Position) = BikeReg
Position = Position + 1
Position += 1
LOOP UNTIL Position > 4
Row = Row + 1
Row += 1
LOOP UNTIL Row > 30
BK913
[6]
Page 6
Mark Scheme
GCE AS/A LEVEL October/November 2012
Syllabus
9691
Paper
23
e.g. C#
row := 1;
do
{
position := 1;
do
{
bikeReg = Console.ReadLine();
if (bikeReg = BBB)
{
exit;
}
bikeSpace[row,position] = bikeReg;
position := position + 1;//position += 1;
}
WHILE (position <= 4)
row := row + 1; // row += 1;
}
WHILE (row <= 30)
[7]
[1]
[1]
(iii) check the value of the bracket before the division takes place // write error trapping
code
if bracket = 0 arrange for a message to be output // exception code
[2]
Accept answers in code
[4]
[7]
Page 7
4
Mark Scheme
GCE AS/A LEVEL October/November 2012
Syllabus
9691
Paper
23
(a)
BikeReg
PurchaseCost
InsuranceRating
ServiceDue
Data Type
String/alphanumeric/text
Currency/integer/real/decimal
8 (accept 48)
Char
Boolean
1
[4]
(b) (5 + 8 + 1 + 1)
* 1000 / 1024
* 1.1 (or equivalent)
= 16.1KB (f.t.)
[4]
e.g. VB 2005
STRUCTURE HireBike
DIM BikeReg AS String
DIM PurchaseCost AS Decimal
DIM InsuranceRating AS Char
DIM ServiceDue AS Boolean
END STRUCTURE
e.g. C#
struct hireBike
{
public string bikeReg;
public decimal purchaseCost;
public char insuranceRating;
public bool serviceDue;
}
[5]
Page 8
Mark Scheme
GCE AS/A LEVEL October/November 2012
Syllabus
9691
Paper
23
e.g. VB 2005
FS = NEW FileStream(SuperBikes,
FileMode.open)
BR = NEW BinaryReader(FS)
BikesForService = 0
DO WHILE FS.Position < FS.Length
HireBike.ServiceDue =
BR.ReadBoolean()
IF HireBike.ServiceDue THEN
BikesForService = BikesForService + 1
LOOP
WRITELINE(Number of bikes for service: ,
BikesForService);
BR.Close()
FS.Close()
e.g. C#
fs = new Filestream(SuperBikes, FileMode.Open);
br = new BinaryReader(fs);
bikesForService = 0;
do
{
hireBike.ServiceDue =br.Readbool();
IF (hireBike.ServiceDue)
{
bikesForService:=bikesForService+1;
}
}
while (fs.Position < fs.Length);
Console.Writeline(Number of bikes
for service: ,bikesForService);
br.Close();
fs.Close;
[9]