You are on page 1of 50

Chapter 14: Programming and data

representation: Answers to coursebook


questions and tasks
Syllabus sections covered: 11
It is suggested that Chapter 12 is worked through in parallel with Chapter 14.

Question 14.01
4 * 3 – 3 ^ 2 = 3

(4 * 3 – 3) ^ 2 = 81

4 * (3 – 3) ^ 2 = 0

4 * (3 – 3 ^ 2) = -24

© Cambridge University Press 2019


Task 14.01
Python

VB.NET

Java

© Cambridge University Press 2019


Task 14.02
1 Identifier Explanation Data type
Miles Distance as a whole number of miles INTEGER
Km The result from the conversion of Miles REAL
using the given formula: Miles * 1.61
Identifier Explanation Data type
Number1 The first number to be input INTEGER/REAL
Number2 The second number to be input INTEGER/REAL
Number3 The third number to be input INTEGER/REAL

Identifier Explanation Data type


BiggestSoFar Stores the biggest number input so far INTEGER/REAL
NextNumber The next number to be input INTEGER/REAL

Identifier Explanation Data type


BiggestSoFar Stores the biggest number input so far INTEGER/REAL
NextNumber The next number to be input INTEGER/REAL
Counter Stores how many numbers have been input INTEGER
so far

Identifier Explanation Data type


BiggestSoFar Stores the biggest number input so far INTEGER/REAL
NextNumber The next number to be input INTEGER/REAL
Counter Counts the number of times round the loop INTEGER

Identifier Explanation Data type


SecretNumber The number to be guessed INTEGER
NumberOfGuesses The number of guesses the player has made INTEGER
Guess The number the player has input as a guess INTEGER

Identifier Explanation Data type


RunningTotal Stores the sum of the numbers input so far INTEGER/REAL
Counter How many numbers have been input INTEGER
NextNumber The next number input INTEGER/REAL
Average The average of the numbers input REAL

© Cambridge University Press 2019


Identifier Explanation Data type
NumberOfRows Stores the number of rows of the grid INTEGER
NumberOfColumns Stores the number of columns of the grid INTEGER
Symbol Stores the chosen character symbol CHAR
RowCounter Counts the number of rows INTEGER
ColumnCounter Counts the number of columns INTEGER

Identifier Explanation Data type


Symbol The character symbol to form the pyramid CHAR
MaxNumberOfSymbols The number of symbols in the final row INTEGER
NumberOfSpaces The number of spaces to be output in the INTEGER
current row
NumberOfSymbols The number of symbols to be output in the INTEGER
current row

2 INPUT "Enter miles:" Miles


Km  Miles * 1.61
OUTPUT "km:" Km
Python # Miles : int No variable declarations in
# Km : float Python. However, learners
Miles = int(input("Enter miles: ")) should be encouraged to
Km = Miles * 1.61 write comments at the
print("km: ", Km) beginning of the program
to state the variables and
the data types to be used.
Note that Python only
accepts string values as
input. So a number must
be converted with the
built-in function int().
VB.NET Module Module1
Dim Miles As Integer
Dim Km As Single
Sub Main()
Console.Write("Enter miles: ")
Miles = Console.ReadLine()
Km = Miles * 1.61
Console.WriteLine("km: "& Km)
Console.ReadLine()
End Sub

End Module
Java import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);

© Cambridge University Press 2019


System.out.print("Enter miles: ");
int miles = console.nextInt();
double km = miles * 1.61;
System.out.println("km: " + km);
}
}

Task 14.03
INPUT BiggestSoFar
INPUT NextNumber
IF NextNumber > BiggestSoFar
THEN
BiggestSoFar ← NextNumber
ENDIF
INPUT NextNumber
IF NextNumber > BiggestSoFar
THEN
BiggestSoFar ← NextNumber
ENDIF
OUTPUT BiggestSoFar

Python BiggestSoFar = int(input("Enter first number: "))


NextNumber = int(input("Enter another number: "))
if NextNumber > BiggestSoFar:
BiggestSoFar = NextNumber
NextNumber = int(input("Enter another number: "))
if NextNumber > BiggestSoFar:
BiggestSoFar = NextNumber
print("biggest number is: ", BiggestSoFar)
VB.NET Module Module1
Dim BiggestSoFar, NextNumber As Integer

Sub Main()
Console.Write("Enter first number: ")
BiggestSoFar = Console.ReadLine()
Console.Write("Enter another number: ")
NextNumber = Console.ReadLine()
If NextNumber > BiggestSoFar Then
BiggestSoFar = NextNumber
End If
Console.Write("Enter another number: ")
NextNumber = Console.ReadLine()
If NextNumber > BiggestSoFar Then
BiggestSoFar = NextNumber
End If
Console.WriteLine("biggest number is: " &
BiggestSoFar)
Console.ReadLine()
End Sub

End Module

© Cambridge University Press 2019


Java import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.print("Enter first number: ");
int biggestSoFar = console.nextInt();
System.out.print("Enter another number: ");
int nextNumber = console.nextInt();
if (nextNumber > biggestSoFar)
biggestSoFar = nextNumber;
System.out.println("biggest number is: "
+ biggestSoFar);

}
}

Task 14.04
INPUT Number1
INPUT Number2
INPUT Number3
IF Number1 > Number2
THEN
// Number1 is bigger
IF Number1 > Number3
THEN
OUTPUT Number1
ELSE
OUTPUT Number3
ENDIF
ELSE
// Number2 is bigger
IF Number2 > Number3
THEN
OUTPUT Number2
ELSE
OUTPUT Number3
ENDIF
ENDIF
Python Number1 = int(input("Enter first number: "))
Number2 = int(input("Enter second number: "))
Number3 = int(input("Enter third number: "))
if Number1 > Number2:
if Number1 > Number3:
print(Number1)
else:
print(Number3)
elif Number2 > Number3:
print(Number2)
else:
print(Number3)

© Cambridge University Press 2019


VB.NET Module Module1
Dim Number1, Number2, Number3 As Integer

Sub Main()
Console.Write("Enter first number: ")
Number1 = Console.ReadLine()
Console.Write("Enter second number: ")
Number2 = Console.ReadLine()
Console.Write("Enter third number: ")
Number3 = Console.ReadLine()
If Number1 > Number2 Then
If Number1 > Number3 Then
Console.WriteLine(Number1)
Else
Console.WriteLine(Number3)
End If
ElseIf Number2 > Number3 Then
Console.WriteLine(Number2)
Else
Console.WriteLine(Number3)
End If
Console.ReadLine()
End Sub

End Module

Java import java.util.Scanner;


public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.print("Enter first number: ");
int number1 = console.nextInt();
System.out.print("Enter second number: ");
int number2 = console.nextInt();
System.out.print("Enter third number: ");
int number3 = console.nextInt();
if (number1 > number2)
if (number1 > number3)
System.out.println(number1);
else
System.out.println(number3);
else
if (number2 > number3)
System.out.println(number2);
else
System.out.println(number3);
}
}

© Cambridge University Press 2019


Task 14.05
INPUT MonthNumber
INPUT Year
Days ← 0
CASE OF MonthNumber
CASE 1,3,5,7,8,10,12 : Days ← 31
CASE 4,6,9,11 : Days ← 30
CASE 2 : Days ← 28
If Year MOD 400 = 0
THEN // it is a leap year
Days ← 29
ENDIF
IF (Year MOD 4 = 0) AND (Year MOD 100 > 0)
THEN // it is a leap year
Days ← 29
ENDIF
OTHERWISE OUTPUT "Invalid month number"
ENDCASE
OUTPUT Days
Python MonthNumber = int(input("Enter month number: "))
Year = int(input("Enter year: "))
Days = 0
if MonthNumber in [1,3,5,7,8,10,12]:
Days = 31
elif MonthNumber in [4,6,9,11]:
Days = 30
elif MonthNumber == 2:
Days = 28
if Year % 400 == 0:
Days = 29
if Year % 4 == 0 and Year % 100 > 0:
Days = 29
else:
print("Invalid month number")
print(Days)
VB.NET Module Module1
Dim MonthNumber, Year, Days As Integer

Sub Main()
Console.Write("Enter month number: ")
MonthNumber = Console.ReadLine()
Console.Write("Enter year: ")
Year = Console.ReadLine()
Days = 0
Select Case MonthNumber
Case 1, 3, 5, 7, 8, 10, 12
Days = 31
Case 4, 6, 9, 11
Days = 30
Case 2
Days = 28
If Year Mod 400 = 0 Then
Days = 29

© Cambridge University Press 2019


End If
If Year Mod 4 = 0 And Year Mod 100 > 0 Then
Days = 29
End If
Case Else
Console.WriteLine("invalid month number")
End Select
Console.WriteLine(Days)
Console.ReadLine()
End Sub

Java import java.util.Scanner;


public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.print("Enter month number: ");
int monthNumber = console.nextInt();
System.out.print("Enter year: ");
int year = console.nextInt();
int days = 0;
switch (monthNumber)
{
case 1: case 3: case 5: case 7: case 8:
case 10: case 12:
days = 31;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
case 2:
days = 28;
if (year % 400 == 0)
days = 29;
if ((year % 4 == 0) && (year % 100 >0))
days = 29;
break;
default:
System.out.print("Invalid month number:");
}
System.out.println(days);
}
}

Task 14.06
1 INPUT BiggestSoFar
FOR Counter ← 2 TO 10
INPUT NextNumber
IF NextNumber > BiggestSoFar
THEN
BiggestSoFar ← NextNumber

© Cambridge University Press 2019


ENDIF
NEXT Counter
OUTPUT BiggestSoFar
Python BiggestSoFar = int(input("Enter first number: "))
for Counter in range(2,11):
NextNumber = int(input("Enter another number: "))
if NextNumber > BiggestSoFar:
BiggestSoFar = NextNumber
print(BiggestSoFar)
VB.NET Module Module1
Dim BiggestSoFar, Counter, NextNumber As Integer

Sub Main()
Console.Write("Enter first number: ")
BiggestSoFar = Console.ReadLine()
For Counter = 2 To 10
Console.Write("Enter another number: ")
NextNumber = Console.ReadLine()
If NextNumber > BiggestSoFar Then
BiggestSoFar = NextNumber
End If
Next
Console.WriteLine(BiggestSoFar)
Console.ReadLine()
End Sub

End Module
Java import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.print("Enter first number: ");
int biggestSoFar = console.nextInt();
for (int counter = 2; counter <= 10; counter++)
{
System.out.print("Enter another number: ");
int nextNumber = console.nextInt();
if (nextNumber > biggestSoFar)
biggestSoFar = nextNumber;
}
System.out.println(biggestSoFar);
}
}

© Cambridge University Press 2019


2 RunningTotal ← 0
FOR Counter ← 1 TO 10
INPUT NextNumber
RunningTotal ← RunningTotal + NextNumber
NEXT Counter
OUTPUT RunningTotal
Average ← RunningTotal / 10
OUTPUT Average
Python RunningTotal = 0
for Counter in range(1,11):
NextNumber = int(input("Enter a number: "))
RunningTotal = RunningTotal + NextNumber
print(RunningTotal)
Average = RunningTotal / 10
print(Average)
VB.NET Module Module1
Dim RunningTotal, Counter, NextNumber As Integer
Dim Average As Single

Sub Main()
RunningTotal = 0
For Counter = 1 To 10
Console.Write("Enter a number: ")
NextNumber = Console.ReadLine()
RunningTotal = RunningTotal + NextNumber
Next
Console.WriteLine(RunningTotal)
Average = RunningTotal / 10
Console.WriteLine(Average)
Console.ReadLine()
End Sub

End Module
Java import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int runningTotal = 0;
for (int counter = 1; counter <= 10; counter++)
{
System.out.print("Enter a number: ");
int nextNumber = console.nextInt();
runningTotal = runningTotal + nextNumber;
}
System.out.println(runningTotal);
double average = runningTotal / 10.0;
System.out.println(average);
}
}

© Cambridge University Press 2019


3 INPUT NumberOfRows
INPUT NumberOfColumns
INPUT Symbol
FOR RowCounter ← 1 TO NumberOfRows
FOR ColumnCounter ← 1 TO NumberOfColumns
OUTPUT Symbol // without moving to next line
NEXT ColumnCounter
OUTPUT Newline // move to the next line
NEXT RowCounter
Python NumberOfRows = int(input("Enter number of rows: "))
NumberOfColumns = int(input("Enter number of columns: "))
Symbol = input("Enter symbol: ")
for RowCounter in range(0,NumberOfRows):
for ColumnCounter in range(0, NumberOfColumns):
print(Symbol, end='')
print()
VB.NET Module Module1
Dim NumberOfRows, NumberOfColumns, RowCounter,
ColumnCounter As Integer
Dim Symbol As Char

Sub Main()
Console.Write("Enter number of rows: ")
NumberOfRows = Console.ReadLine()
Console.Write("Enter number of columns: ")
NumberOfColumns = Console.ReadLine()
Console.Write("Enter symbol: ")
Symbol = Console.ReadLine()
For RowCounter = 1 To NumberOfRows
For ColumnCounter = 1 To NumberOfColumns
Console.Write(Symbol)
Next
Console.WriteLine()
Next
Console.ReadLine()
End Sub

End Module
Java import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.print("Enter number of rows: ");
int numberOfRows = console.nextInt();
System.out.print("Enter number of columns: ");
int numberOfColumns = console.nextInt();
System.out.print("Enter symbol: ");
String symbol = console.next();
for (int rowCounter = 1; rowCounter <=
numberOfRows; rowCounter++)
{

© Cambridge University Press 2019


for (int columnCounter = 1; columnCounter <=
numberOfColumns; columnCounter++)
{
System.out.print(symbol);
}
System.out.println();
}
}
}

Task 14.07
1 INPUT BiggestSoFar
Counter ← 0
REPEAT
INPUT NextNumber
Counter ← Counter + 1
IF NextNumber > BiggestSoFar
THEN
BiggestSoFar ← NextNumber
ENDIF
UNTIL Counter = 10
OUTPUT BiggestSoFar
Python BiggestSoFar = int(input("Enter first number: "))
Counter = 0
while Counter < 10:
NextNumber = int(input("Enter another number: "))
Counter = Counter + 1
if NextNumber > BiggestSoFar:
BiggestSoFar = NextNumber
print(BiggestSoFar)

VB.NET Module Module1


Dim BiggestSoFar, Counter, NextNumber As Integer

Sub Main()
Console.Write("Enter first number: ")
BiggestSoFar = Console.ReadLine()
Counter = 0
Do
Console.Write("Enter another number: ")
NextNumber = Console.ReadLine()
Counter = Counter + 1
If NextNumber > BiggestSoFar Then
BiggestSoFar = NextNumber
End If
Loop Until Counter = 10
Console.WriteLine(BiggestSoFar)
Console.ReadLine()
End Sub

End Module

© Cambridge University Press 2019


Java import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.print("Enter first number: ");
int biggestSoFar = console.nextInt();
int counter = 0;
do
{
System.out.print("Enter another number: ");
int nextNumber = console.nextInt();
counter = counter + 1;
if (nextNumber > biggestSoFar)
biggestSoFar = nextNumber;
} while (counter < 10);
System.out.println(biggestSoFar);
}
}

2 INPUT BiggestSoFar
REPEAT
INPUT NextNumber
IF NextNumber > BiggestSoFar
THEN
BiggestSoFar ← NextNumber
ENDIF
UNTIL NextNumber = 0
OUTPUT BiggestSoFar
Python NextNumber = int(input("Enter first number: "))
BiggestSoFar = NextNumber
while NextNumber != 0:
NextNumber = int(input("Enter another number: "))
if NextNumber > BiggestSoFar:
BiggestSoFar = NextNumber
print(BiggestSoFar)

VB.NET Module Module1


Dim BiggestSoFar, NextNumber As Integer

Sub Main()
Console.Write("Enter first number: ")
BiggestSoFar = Console.ReadLine()
Do
Console.Write("Enter another number: ")
NextNumber = Console.ReadLine()
If NextNumber > BiggestSoFar Then
BiggestSoFar = NextNumber
End If
Loop Until NextNumber = 0
Console.WriteLine(BiggestSoFar)
Console.ReadLine()
End Sub

© Cambridge University Press 2019


End Module

Java import java.util.Scanner;


public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.print("Enter first number: ");
int biggestSoFar = console.nextInt();
int nextNumber = 0;
do
{
System.out.print("Enter another number: ");
nextNumber = console.nextInt();
if (nextNumber > biggestSoFar)
biggestSoFar = nextNumber;
} while (nextNumber != 0);
System.out.println(biggestSoFar);
}
}

Task 14.08
INPUT NextNumber
BiggestSoFar ← NextNumber
WHILE NextNumber <> 0 DO // terminator not encountered
INPUT NextNumber
IF NextNumber > BiggestSoFar
THEN
BiggestSoFar ← NextNumber
ENDIF
ENDWHILE
OUTPUT BiggestSoFar
Python NextNumber = int(input("Enter first number: "))
BiggestSoFar = NextNumber
while NextNumber != 0:
NextNumber = int(input("Enter another number: "))
if NextNumber > BiggestSoFar:
BiggestSoFar = NextNumber
print(BiggestSoFar)

VB.NET Module Module1


Dim BiggestSoFar, NextNumber As Integer

Sub Main()
Console.Write("Enter first number: ")
NextNumber = Console.ReadLine()
BiggestSoFar = NextNumber
Do While NextNumber <> 0
Console.Write("Enter another number: ")
NextNumber = Console.ReadLine()

© Cambridge University Press 2019


If NextNumber>BiggestSoFar Then
BiggestSoFar = NextNumber
End If
Loop
Console.WriteLine(BiggestSoFar)
Console.ReadLine()
End Sub

End Module

Java import java.util.Scanner;


public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.print("Enter first number: ");
int nextNumber = console.nextInt();
int biggestSoFar = nextNumber;
while (nextNumber != 0)
{
System.out.print("Enter another number: ");
nextNumber = console.nextInt();
if (nextNumber > biggestSoFar)
biggestSoFar = nextNumber;
}
System.out.println(biggestSoFar);
}
}

Task 14.09
1 Python import random
for Count in range(20):
RandomNumber = random.randint(1,10)
print(RandomNumber)

VB.NET Module Module1


Dim Count, RandomNumber As Integer
Dim Number As New Random

Sub Main()
For Count = 1 To 20
RandomNumber = Number.Next(1, 11)
Console.WriteLine(RandomNumber)
Next

Console.ReadLine()
End Sub

End Module

© Cambridge University Press 2019


Java import java.util.Random;
public class Main
{
public static void main(String[] args)
{
Random randomNumber = new Random();
for (int count = 1; count <= 20; count++)
{
System.out.println(randomNumber.nextInt(10) +
1);
}
}
}

2 SecretNumber ← Random
INPUT Guess
NumberOfGuesses ← 1
WHILE Guess <> SecretNumber DO
IF Guess > SecretNumber
THEN
// the player is given the message to input a smaller number
ENDIF
IF Guess < SecretNumber
THEN
// the player is given the message to input a larger number
ENDIF
INPUT Guess
NumberOfGuesses ← NumberOfGuesses + 1

ENDWHILE
OUTPUT NumberOfGuesses
Python import random
SecretNumber = random.randint(1,100)
Guess = int(input("What is your guess? "))
NumberOfGuesses = 1
while Guess != SecretNumber:
if Guess >SecretNumber:
print("Input a smaller number: ", end='')
if Guess <SecretNumber:
print("Input a larger number: ", end='')
Guess = int(input())
NumberOfGuesses = NumberOfGuesses + 1

VB.NET Module Module1


Dim Guess, SecretNumber, NumberOfGuesses As Integer
Dim Number As New Random

Sub Main()

SecretNumber = Number.Next(1, 101)


Console.Write("What is your guess? ")
Guess = Console.ReadLine()
NumberOfGuesses = 1
While Guess <> SecretNumber

© Cambridge University Press 2019


If Guess > SecretNumber Then
Console.Write("Input a smaller number: ")
End If
If Guess <SecretNumber Then
Console.Write("Input a larger number: ")
End If
Guess = Console.ReadLine()
NumberOfGuesses = NumberOfGuesses + 1
EndWhile
Console.ReadLine()
End Sub

End Module

Java import java.util.Scanner;


import java.util.Random;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
Random randomNumber = new Random();
int secretNumber = randomNumber.nextInt(100) +
1;
System.out.print("What is your guess? ");
int guess = console.nextInt();
int numberOfGuesses = 1;
while (guess != secretNumber)
{
if (guess > secretNumber)
System.out.print("Input a smaller number:
");
if (guess < secretNumber)
System.out.print("Input a larger number:
");
guess = console.nextInt();
numberOfGuesses = numberOfGuesses + 1;
}
}
}

Task 14.10
CALL SetValues
REPEAT
CALL OutputSpaces
CALL OutputSymbols
CALL AdjustValuesForNextRow
UNTIL NumberOfSymbols > MaxNumberOfSymbols

PROCEDURE SetValues
INPUT Symbol
CALL InputMaxNumberOfSymbols // need to ensure it is an odd number
NumberOfSpaces ← (MaxNumberOfSymbols - 1) / 2

© Cambridge University Press 2019


NumberOfSymbols ← 1
ENDPROCEDURE

PROCEDURE InputMaxNumberOfSymbols
REPEAT
INPUT MaxNumberOfSymbols
UNTIL MaxNumberOfSymbols MOD 2 = 1
ENDPROCEDURE

PROCEDURE OutputSpaces
FOR Count1 ← 1 TO NumberOfSpaces
OUTPUT Space // without moving to next line
NEXT Count1
ENDPROCEDURE

PROCEDURE OutputSymbols
FOR Count2 ← 1 TO NumberOfSymbols
OUTPUT Symbol // without moving to next line
NEXT Count2
OUTPUT Newline // move to the next line
ENDPROCEDURE

PROCEDURE AdjustValuesForNextRow
NumberOfSpaces ← NumberOfSpaces – 1
NumberOfSymbols ← NumberOfSymbols + 2
ENDPROCEDURE

© Cambridge University Press 2019


Task 14.11
Python BLANK = "."
# Board(0:6, 0:7) : str (but ignore row 0 and column
0)
# ThisPlayer : str[1]
# GameFinished, WinnerFound : bool
# ColumnNumber : int
# ValidColumn, ValidRow : int

def InitialiseBoard() :
global Board
Board = [[BLANK for Column in range(8)] for Row in
range(7)]

def SetUpGame() :
global GameFinished
global ThisPlayer
global WinnerFound
ThisPlayer = "O" # Player O always starts
GameFinished = False
WinnerFound = False

def OutputBoard() :
for Row in range(6, 0, -1) :
for Column in range (1, 8) :
print(Board[Row][Column], end='')
print() # move to next line

def ColumnNumberValid(ColumnNumber):
Valid = False
if (ColumnNumber >= 1) and (ColumnNumber <= 7):
if Board[6][ColumnNumber] == BLANK :
Valid = True
return Valid

def PlayerChoosesColumn() : # returns a valid column


number
ColumnNumber = int(input("Enter a valid column
number: "))
while ColumnNumberValid(ColumnNumber) == False : #
check whether the column number is valid
ColumnNumber = int(input("Enter a valid column
number: "))
return ColumnNumber

def FindFreeRow() : # returns the next free position


ThisRow = 1
while Board[ThisRow][ValidColumn] != BLANK : #
find first empty cell
ThisRow += 1
return ThisRow

def PlayerMakesMove() :

© Cambridge University Press 2019


global ValidRow
global ValidColumn
print("Player ", ThisPlayer, "'s turn.")
ValidColumn = PlayerChoosesColumn()
ValidRow = FindFreeRow()
Board[ValidRow][ValidColumn] = ThisPlayer

def CheckHorizontalLine() :
global WinnerFound
for i in range(1,5) :
if ((Board[ValidRow][i] == ThisPlayer) and
(Board[ValidRow][i + 1] == ThisPlayer) and
(Board[ValidRow][i + 2] == ThisPlayer) and
(Board[ValidRow][i + 3] == ThisPlayer)) :
WinnerFound = True

def CheckVerticalLine() :
global WinnerFound
if (ValidRow == 4) or (ValidRow == 5) or (ValidRow
== 6):
if ((Board[ValidRow][ValidColumn] ==
ThisPlayer) and
(Board[ValidRow - 1][ValidColumn] ==
ThisPlayer) and
(Board[ValidRow - 2][ValidColumn] ==
ThisPlayer) and
(Board[ValidRow - 3][ValidColumn] ==
ThisPlayer)):
WinnerFound = True

def CheckForFullBoard():
global GameFinished
BlankFound = False
ThisRow = 0
while (ThisRow != 6) and (BlankFound == False):
ThisColumn = 0
ThisRow += 1
while (ThisColumn != 7) and (BlankFound ==
False):
ThisColumn += 1
if Board[ThisRow][ThisColumn] == BLANK:
BlankFound = True
if BlankFound == False:
print("It is a draw")
GameFinished = True

def CheckIfPlayerHasWon():
CheckHorizontalLine()
if WinnerFound == False:
CheckVerticalLine()

def CheckGameFinished():
global GameFinished
CheckIfPlayerHasWon()

© Cambridge University Press 2019


if WinnerFound == True:
GameFinished = True
print(ThisPlayer, " is the winner")
else :
CheckForFullBoard()

def SwapThisPlayer():
global ThisPlayer
if ThisPlayer == "O":
ThisPlayer = "X"
else :
ThisPlayer = "O"

def main():
InitialiseBoard()
SetUpGame()
OutputBoard()
while GameFinished == False:
PlayerMakesMove()
OutputBoard()
CheckGameFinished()
if GameFinished == False:
SwapThisPlayer()

main()
VB.NET Module Module1

Const BLANK = "_"

Dim ThisPlayer As Char


Dim GameFinished, WinnerFound As Boolean
Dim Board(6, 7) As Char
Dim ValidRow, ValidColumn As Integer

Sub InitialiseBoard()
Dim Row, Column As Integer
For Row = 1 To 6
For Column = 1 To 7
Board(Row, Column) = BLANK
Next
Next
End Sub

Sub SetUpGame()
ThisPlayer = "O"
GameFinished = False
End Sub

Sub OutputBoard()
Dim Row, Column As Integer
For Row = 6 To 1 Step -1
For Column = 1 To 7
Console.Write(Board(Row, Column))
Next

© Cambridge University Press 2019


Console.WriteLine()
Next
End Sub

Function ColumnNumberValid(ColumnNumber) As Boolean


Dim Valid As Boolean
Valid = False
If (ColumnNumber >= 1) And (ColumnNumber <= 7)
Then
If Board(6, ColumnNumber) = BLANK Then
Valid = True
End If
End If
Return Valid
End Function

Function PlayerChoosesColumn() As Integer


Dim ColumnNumber As Integer
Do
Console.Write("Enter a valid column number: ")
ColumnNumber = Console.ReadLine
Loop Until (ColumnNumberValid(ColumnNumber) =
True)
Return ColumnNumber
End Function

Function FindFreeRow() As Integer


Dim ThisRow As Integer
ThisRow = 1
Do While Board(ThisRow, ValidColumn) <> BLANK
ThisRow = ThisRow + 1
Loop
Return ThisRow
End Function

Sub PlayerMakesMove()
Console.WriteLine("Player " & ThisPlayer & " 's
turn.")
ValidColumn = PlayerChoosesColumn()
ValidRow = FindFreeRow()
Board(ValidRow, ValidColumn) = ThisPlayer
End Sub

Sub CheckHorizontalLine()
Dim i As Integer
For i = 1 To 4
If (Board(ValidRow, i) = ThisPlayer) And
(Board(ValidRow, i + 1) = ThisPlayer) And
(Board(ValidRow, i + 2) = ThisPlayer) And
(Board(ValidRow, i + 3) = ThisPlayer) Then
WinnerFound = True
End If
Next
End Sub

© Cambridge University Press 2019


Sub CheckVerticalLine()
If (ValidRow = 4) Or (ValidRow = 5) Or (ValidRow =
6) Then
If (Board(ValidRow, ValidColumn) = ThisPlayer)
And
(Board(ValidRow - 1, ValidColumn) =
ThisPlayer) And
(Board(ValidRow - 2, ValidColumn) =
ThisPlayer) And
(Board(ValidRow - 3, ValidColumn) =
ThisPlayer) Then
WinnerFound = True
End If
End If
End Sub

Sub CheckForFullBoard()
Dim BlankFound As Boolean
Dim ThisRow, ThisColumn As Integer
BlankFound = False
ThisRow = 0
Do
ThisColumn = 0
ThisRow = ThisRow + 1
Do
ThisColumn = ThisColumn + 1
If Board(ThisRow, ThisColumn) = BLANK Then
BlankFound = True
End If
Loop Until (ThisColumn = 7) Or (BlankFound =
True)
Loop Until (ThisRow = 6) Or (BlankFound = True)
If BlankFound = False Then
Console.WriteLine("It is a draw")
GameFinished = True
End If
End Sub

Sub CheckIfPlayerHasWon()
CheckHorizontalLine()
If WinnerFound = False Then
CheckVerticalLine()
End If
End Sub

Sub CheckGameFinished()
CheckIfPlayerHasWon()
If WinnerFound = True Then
GameFinished = True
Console.WriteLine(ThisPlayer & " is the winner")
Else
CheckForFullBoard()
End If
End Sub

© Cambridge University Press 2019


Sub SwapThisPlayer()
If ThisPlayer = "O" Then
ThisPlayer = "X"
Else
ThisPlayer = "O"
End If
End Sub

Sub main()
InitialiseBoard()
SetUpGame()
OutputBoard()
Do While GameFinished = False
PlayerMakesMove()
OutputBoard()
CheckGameFinished()
If GameFinished = False Then
SwapThisPlayer()
End If
Loop
Console.ReadLine()
End Sub
End Module
Java import java.util.Scanner;
import java.util.Random;
public class Main
{
static Scanner console = new Scanner(System.in);

static final char BLANK = '.';

static char thisPlayer = ' ';


static boolean winnerFound = false;
static boolean gameFinished = false;
static int validRow = 0;
static int validColumn = 0;
static char [][] board = new char[7][8];

static void initialiseBoard()


{
for (int row = 1; row <= 6; row++)
for (int column = 1; column <= 7; column++)
board[row][column] = BLANK;
}

static void setUpGame()


{
thisPlayer = 'O';
gameFinished = false;
}

static void outputBoard()


{
for (int row = 6; row >= 1; row--)

© Cambridge University Press 2019


{
for (int column = 1; column <= 7; column++)
System.out.print(board[row][column]);
System.out.println();
}
}

static boolean columnNumberValid(int columnNumber)


{
boolean valid = false;
if ((columnNumber >= 1) && (columnNumber <= 7))
if (board[6][columnNumber] == BLANK)
valid = true;
return valid;
}

static int playerChoosesColumn()


{
int columnNumber = 0;
do
{
System.out.print("Enter a valid column
number: ");
columnNumber = console.nextInt();
} while(columnNumberValid(columnNumber) !=
true);
return columnNumber;
}

static int findFreeRow()


{
int thisRow = 1;
while (board[thisRow][validColumn] != BLANK)
{
thisRow = thisRow + 1;
}
return thisRow;
}

static void playerMakesMove()


{
System.out.println("Player " + thisPlayer + " 's
turn.");
validColumn = playerChoosesColumn();
validRow = findFreeRow();
board[validRow][validColumn] = thisPlayer;
}

static void checkHorizontalLine()


{
for (int i = 1; i <= 4; i++)
if (board[validRow][i] == thisPlayer &&
board[validRow][i + 1] == thisPlayer &&
board[validRow][i + 2] == thisPlayer &&
board[validRow][i + 3] == thisPlayer)

© Cambridge University Press 2019


winnerFound = true;
}

static void checkVerticalLine()


{
if (validRow == 4 || validRow == 5 || validRow
== 6)
if (board[validRow][validColumn] ==
thisPlayer &&
board[validRow - 1][validColumn] ==
thisPlayer &&
board[validRow - 2][validColumn] ==
thisPlayer &&
board[validRow - 3][validColumn] ==
thisPlayer)
winnerFound = true;
}

static void checkForFullBoard()


{
boolean blankFound = false;
int thisRow = 0;
int thisColumn;
do
{
thisColumn = 0;
thisRow = thisRow + 1;
do
{
thisColumn = thisColumn + 1;
if (board[thisRow][thisColumn] == BLANK)
blankFound = true;
} while (thisColumn != 7 && blankFound ==
false);
} while (thisRow != 6 && blankFound == false);
if (blankFound == false)
{
System.out.println("It is a draw");
gameFinished = true;
}
}

static void checkIfPlayerHasWon()


{
checkHorizontalLine();
if (winnerFound == false)
checkVerticalLine();
}

static void checkGameFinished()


{
checkIfPlayerHasWon();
if (winnerFound)
{
gameFinished = true;

© Cambridge University Press 2019


System.out.println(thisPlayer + " is the
winner");
}
else
checkForFullBoard();
}

static void swapThisPlayer()


{
if (thisPlayer == 'O')
thisPlayer = 'X';
else
thisPlayer = 'O';
}

public static void main(String[] args)


{
//Scanner console = new Scanner(System.in);
initialiseBoard();
setUpGame();
System.out.println("Ok to here");
outputBoard();
while (gameFinished == false)
{
playerMakesMove();
outputBoard();
checkGameFinished();
if (gameFinished == false)
swapThisPlayer();
}
}

Local Row, Column,


ThisRow, ThisColumn
ColumnNumber, i,
BlankFound, Valid,

Global ThisPlayer
GameFinished, WinnerFound
Board
ValidRow, ValidColumn

Note: Python and Java are designed to use local variables by default, so it is more laborious to declare variables
as global.

© Cambridge University Press 2019


Task 14.12
FUNCTION Factorial (Number : INTEGER) RETURNS INTEGER
DECLARE Product : INTEGER
Product ← 1
FOR n ← 2 TO Number
Product ← Product * n
NEXT n
RETURN Product
ENDFUNCTION
Python def Factorial (Number):
Product = 1
for n in range(2,Number + 1) :
Product = Product * n
return Product
VB.NET Function Factorial(Number) As Integer
Dim Product, n As Integer
Product = 1
For n = 2 To Number
Product = Product * n
Next
Return (Product)
End Function

Java static int factorial(int number)


{
int product = 1;
for (int n = 2; n <= number; n++)
product = product * n;
return product;
}

Task 14.13
1 FOR Index ← 0 TO 6
INPUT MyList[Index]
NEXT Index
Python MyList = []
for Index in range(8):
MyList.append( int(input("Enter a number: ")))
VB.NET Module Module1
Dim MyList(7) As Integer
Dim Index As Integer

Sub Main()
For Index = 0 To 6
Console.Write("Enter a number: ")
MyList(Index) = Console.ReadLine()
Next
Console.ReadLine()
End Sub

© Cambridge University Press 2019


End Module
Java import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int [] myList = new int[7];
for (int index = 0; index <= 6; index++)
{
System.out.print("Enter a number: ");
myList[index] = console.nextInt();
}
}
}

2 MaxIndex ← 6
INPUT SearchValue
Found ← FALSE
Index ← –1
REPEAT
Index ← Index + 1
IF MyList[Index]= SearchValue
THEN
Found ← TRUE
ENDIF
UNTIL FOUND = TRUE OR Index >= MaxIndex
IF Found = TRUE
THEN
OUTPUT "Value found at location: " Index
ELSE
OUTPUT "Value not found"
ENDIF
Python MyList = []
for Index in range(7):
MyList.append( int(input("Enter a number: ")))
MaxIndex = 6
SearchValue = int(input("Enter search value: "))
Found = False
Index = –1
while not Found and Index <MaxIndex:
Index = Index + 1
if MyList[Index] == SearchValue:
Found = True
if Found:
print("Value found at location: ", Index+1)
else:
print("Value not found")
VB.NET Module Module1
Dim MyList(6) As Integer
Dim Index, MaxIndex, SearchValue As Integer
Dim Found As Boolean

Sub Main()

© Cambridge University Press 2019


For Index = 0 To 6
Console.Write("Enter a number: ")
MyList(Index) = Console.ReadLine()
Next
For Index = 0 To 6
Console.Write(MyList(Index) &" ")
Next
MaxIndex = 6
Console.Write("Enter search value: ")
SearchValue = Console.ReadLine()
Found = False
Index = –1
Do
Index = Index + 1
If MyList(Index) = SearchValue Then
Found = True
EndIf
Loop Until Found Or Index >= MaxIndex
If Found Then
Console.WriteLine("Value found at location "& Index)
Else
Console.WriteLine("Value not found")
End If
Console.ReadLine()
End Sub

End Module
Java import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int [] myList = new int[7];

for (int index = 0; index <= 6; index++)


{
System.out.print("Enter a number: ");
myList[index] = console.nextInt();
}
int maxIndex = 6;
System.out.print("Enter a search value: ");
int searchValue = console.nextInt();
boolean found = false;
int index = –1;
do
{
index = index + 1;
if (myList[index] == searchValue)
found = true;
} while(found == false && index < maxIndex);
if (found)
System.out.println("Value found at location "
+ index);

© Cambridge University Press 2019


else
System.out.println("Value not found");
}
}

3 n ← MaxIndex – 1
REPEAT
NoMoreSwaps ← TRUE
FOR j ← 0 TO n
IF MyList[j] > MyList[j + 1]
THEN
Temp ← MyList[j]
MyList[j] ← MyList[j + 1]
MyList[j + 1] ← Temp
NoMoreSwaps ← FALSE
ENDIF
NEXT j
n ← n – 1
UNTIL NoMoreSwaps = TRUE
Python MyList = []
for Index in range(7):
MyList.append( int(input("Enter a number: ")))
MaxIndex = 6
n = MaxIndex - 1
NoMoreSwaps = False
while NoMoreSwaps == False:
NoMoreSwaps = True
for j in range(n):
if MyList[j] >MyList[j + 1]:
Temp = MyList[j]
MyList[j] = MyList[j + 1]
MyList[j + 1] = Temp
NoMoreSwaps = False
n = n - 1

for Index in range(7):


print(MyList[Index])
VB.NET Module Module1
Dim MyList(6) As Integer
Dim Index, MaxIndex, n, j, Temp As Integer
Dim NoMoreSwaps As Boolean

Sub Main()
For Index = 0 To 6
Console.Write("Enter a number: ")
MyList(Index) = Console.ReadLine()
Next

MaxIndex = 6
n = MaxIndex - 1
Do
NoMoreSwaps = True
For j = 1 To n
If MyList(j) > MyList(j + 1) Then

© Cambridge University Press 2019


Temp = MyList(j)
MyList(j) = MyList(j + 1)
MyList(j + 1) = Temp
NoMoreSwaps = False
EndIf
Next
n = n - 1
Loop Until NoMoreSwaps

For Index = 0 To 6
Console.Write(MyList(Index) &" ")
Next
Console.ReadLine()
End Sub

End Module
Java import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int [] myList = new int[7];
for (int index = 0; index <= 6; index++)
{
System.out.print("Enter a number: ");
myList[index] = console.nextInt();
}

int maxIndex = 6;
int n = maxIndex - 1;
boolean noMoreSwaps;
do
{
noMoreSwaps = true;
for (int j = 0; j <= n; j++)
{
if (myList[j] > myList[j+1])
{
int temp = myList[j];
myList[j] = myList[j + 1];
myList[j + 1] = temp;
noMoreSwaps = false;
}
}
n = n - 1;
} while(noMoreSwaps == false);

for (int index = 0; index <= 6; index++)


System.out.println(myList[index]);

}
}

© Cambridge University Press 2019


Task 14.14
1 FOR Row ← 0 TO MaxRowIndex
FOR Column ← 0 TO MaxColumnIndex
ThisTable[Row, Column] ← 0
NEXT Column
NEXT Row

FOR Row ← 0 TO MaxRowIndex


FOR Column ← 0 TO MaxColumnIndex
OUTPUT ThisTable[Row, Column] // stay on same line
NEXT Column
OUTPUT Newline // move to next line for next row
NEXT Row
Python ThisTable = [[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]]
MaxRowIndex = 5
MaxColumnIndex = 6
for Row in range(MaxRowIndex + 1):
for Column in range(MaxColumnIndex + 1):
print(ThisTable[Row][Column], end = ' ')
print()
VB.NET Module Module1
Dim ThisTable(5, 6) As Integer
Dim Row, Column As Integer

Const MaxRowIndex = 5
Const MaxColumnIndex = 6

Sub Main()
For Row = 0 To MaxRowIndex
For Column = 0 To MaxColumnIndex
ThisTable(Row, Column) = 0
Next
Next

For Row = 0 To MaxRowIndex


For Column = 0 To MaxColumnIndex
Console.Write(ThisTable(Row, Column))
Next
Console.WriteLine()
Next
Console.ReadLine()
End Sub

End Module
Java import java.util.Scanner;
public class Main

© Cambridge University Press 2019


{
static final int MAXROWINDEX = 5;
static final int MAXCOLUMNINDEX = 6;

public static void main(String[] args)


{
int [][] thisTable = new int[6][7];
for (int row = 1; row <= MAXROWINDEX; row++)
for (int column = 1; column <= MAXCOLUMNINDEX;
column++)
thisTable[row][column] = 0;

for (int row = 0; row <= MAXROWINDEX; row++)


{
for (int column = 0; column <= MAXCOLUMNINDEX;
column++)
System.out.print(thisTable[row][column]);
System.out.println();
}
}
}

2 Python BLANK = "."


# Board(0:6, 0:7) : str (but ignore row 0 and column 0)
# ThisPlayer : str[1]
# GameFinished, WinnerFound : bool
# ColumnNumber : int
# ValidColumn, ValidRow : int

def InitialiseBoard() :
Board = [[BLANK for Column in range(8)] for Row in
range(7)]
return Board

def SetUpGame() :
ThisPlayer = "O" # Player O always starts
GameFinished = False
return ThisPlayer, GameFinished

def OutputBoard(Board) :
for Row in range(6, 0, -1) :
for Column in range (1, 8) :
print(Board[Row][Column], end='')
print() # move to next line

def ColumnNumberValid(Board, ColumnNumber):


# returns whether or not the column number is valid
Valid = False
if (ColumnNumber >= 1) and (ColumnNumber <= 7):
if Board[6][ColumnNumber] == BLANK :
# at least 1 empty space in column
Valid = True
return Valid

© Cambridge University Press 2019


def PlayerChoosesColumn(Board) : # returns a valid
column number
ColumnNumber = int(input("Enter a valid column
number: "))
while ColumnNumberValid(Board, ColumnNumber) ==
False : # check whether the column number is valid
ColumnNumber = int(input("Enter a valid column
number: "))
return ColumnNumber

def FindFreeRow(Board, ValidColumn) : # returns the


next free position
ThisRow = 1
while Board[ThisRow][ValidColumn] != BLANK : # find
first empty cell
ThisRow += 1
return ThisRow

def PlayerMakesMove(ThisPlayer, Board) :


print("Player ", ThisPlayer, "'s turn.")
ValidColumn = PlayerChoosesColumn(Board)
ValidRow = FindFreeRow(Board, ValidColumn)
Board[ValidRow][ValidColumn] = ThisPlayer
return Board, ValidRow, ValidColumn

def CheckHorizontalLine(Board, ValidRow, ThisPlayer) :


WinnerFound = False
for i in range(1,5) :
if ((Board[ValidRow][i] == ThisPlayer) and
(Board[ValidRow][i + 1] == ThisPlayer) and
(Board[ValidRow][i + 2] == ThisPlayer) and
(Board[ValidRow][i + 3] == ThisPlayer)) :
WinnerFound = True
return WinnerFound

def CheckVerticalLine(Board, ValidRow, ValidColumn,


ThisPlayer) :
WinnerFound = False
if (ValidRow == 4) or (ValidRow == 5) or (ValidRow
== 6):
if ((Board[ValidRow][ValidColumn] == ThisPlayer)
and
(Board[ValidRow - 1][ValidColumn] ==
ThisPlayer) and
(Board[ValidRow - 2][ValidColumn] ==
ThisPlayer) and
(Board[ValidRow - 3][ValidColumn] ==
ThisPlayer)):
WinnerFound = True
return WinnerFound

def CheckForFullBoard(Board):
GameFinished = False
BlankFound = False
ThisRow = 0

© Cambridge University Press 2019


while (ThisRow != 6) and (BlankFound == False):
ThisColumn = 0
ThisRow += 1
while (ThisColumn != 7) and (BlankFound ==
False):
ThisColumn += 1
if Board[ThisRow][ThisColumn] == BLANK:
BlankFound = True
if BlankFound == False:
print("It is a draw")
GameFinished = True
return GameFinished

def CheckIfPlayerHasWon(Board, ValidRow, ValidColumn,


ThisPlayer):
WinnerFound = CheckHorizontalLine(Board, ValidRow,
ThisPlayer)
if WinnerFound == False:
WinnerFound = CheckVerticalLine(Board, ValidRow,
ValidColumn, ThisPlayer)
return WinnerFound

def CheckGameFinished(Board, ThisPlayer, ValidRow,


ValidColumn):
WinnerFound = CheckIfPlayerHasWon(Board, ValidRow,
ValidColumn, ThisPlayer)
if WinnerFound == True:
GameFinished = True
print(ThisPlayer, " is the winner")
else :
GameFinished = CheckForFullBoard(Board)
return GameFinished

def SwapThisPlayer(ThisPlayer):
if ThisPlayer == "O":
ThisPlayer = "X"
else :
ThisPlayer = "O"
return ThisPlayer

def main():
Board = InitialiseBoard()
ThisPlayer, GameFinished = SetUpGame()
OutputBoard(Board)
while GameFinished == False:
Board, ValidRow, ValidColumn =
PlayerMakesMove(ThisPlayer, Board)
OutputBoard(Board)
GameFinished = CheckGameFinished(Board,
ThisPlayer, ValidRow, ValidColumn)
if GameFinished == False :
ThisPlayer = SwapThisPlayer(ThisPlayer)

main()

© Cambridge University Press 2019


VB.NET Module Module1

Const BLANK = "."

Sub InitialiseBoard(ByRef Board)


Dim Row, Column As Integer
For Row = 1 To 6
For Column = 1 To 7
Board(Row, Column) = BLANK
Next
Next
End Sub

Sub SetUpGame(ByRef ThisPlayer, ByRef GameFinished)


ThisPlayer = "O"
GameFinished = False
End Sub

Sub OutputBoard(Board)
Dim Row, Column As Integer
For Row = 6 To 1 Step -1
For Column = 1 To 7
Console.Write(Board(Row, Column))
Next
Console.WriteLine()
Next
End Sub

Function ColumnNumberValid(ByVal Board, ByVal


ColumnNumber) As Boolean
Dim Valid As Boolean
Valid = False
If (ColumnNumber >= 1) And (ColumnNumber <= 7) Then
If Board(6, ColumnNumber) = BLANK Then
Valid = True
End If
End If
Return Valid
End Function

Function PlayerChoosesColumn(ByVal Board) As Integer


Dim ColumnNumber As Integer
Do
Console.Write("Enter a valid column number: ")
ColumnNumber = Console.ReadLine
Loop Until (ColumnNumberValid(Board, ColumnNumber)
= True)
Return ColumnNumber
End Function

Function FindFreeRow(ByVal Board, ByVal ValidColumn)


As Integer
Dim ThisRow As Integer
ThisRow = 1
Do While Board(ThisRow, ValidColumn) <> BLANK

© Cambridge University Press 2019


ThisRow = ThisRow + 1
Loop
Return ThisRow
End Function

Sub PlayerMakesMove(ByVal ThisPlayer, ByRef Board,


ByRef ValidRow, ByRef ValidColumn)
Console.WriteLine("Player " & ThisPlayer & " 's
turn.")
ValidColumn = PlayerChoosesColumn(Board)
ValidRow = FindFreeRow(Board, ValidColumn)
Board(ValidRow, ValidColumn) = ThisPlayer
End Sub

Sub CheckHorizontalLine(ByVal Board, ByVal ValidRow,


ByVal ThisPlayer, ByRef WinnerFound)
Dim i As Integer
For i = 1 To 4
If (Board(ValidRow, i) = ThisPlayer) And
(Board(ValidRow, i + 1) = ThisPlayer) And
(Board(ValidRow, i + 2) = ThisPlayer) And
(Board(ValidRow, i + 3) = ThisPlayer) Then
WinnerFound = True
End If
Next
End Sub

Sub CheckVerticalLine(ByVal Board, ByVal ValidRow,


ByVal ValidColumn, ByVal ThisPlayer, ByRef WinnerFound)

If (ValidRow = 4) Or (ValidRow = 5) Or (ValidRow =


6) Then
If (Board(ValidRow, ValidColumn) = ThisPlayer)
And
(Board(ValidRow - 1, ValidColumn) =
ThisPlayer) And
(Board(ValidRow - 2, ValidColumn) =
ThisPlayer) And
(Board(ValidRow - 3, ValidColumn) =
ThisPlayer) Then
WinnerFound = True
End If
End If
End Sub

Sub CheckForFullBoard(ByVal Board, ByRef


GameFinished)
Dim BlankFound As Boolean
Dim ThisRow, ThisColumn As Integer
BlankFound = False
ThisRow = 0
Do
ThisColumn = 0
ThisRow = ThisRow + 1
Do

© Cambridge University Press 2019


ThisColumn = ThisColumn + 1
If Board(ThisRow, ThisColumn) = BLANK Then
BlankFound = True
End If
Loop Until (ThisColumn = 7) Or (BlankFound =
True)
Loop Until (ThisRow = 6) Or (BlankFound = True)
If BlankFound = False Then
Console.WriteLine("It is a draw")
GameFinished = True
End If
End Sub

Sub CheckIfPlayerHasWon(ByVal Board, ByVal


ThisPlayer, ByVal ValidRow, ByVal ValidColumn, ByRef
WinnerFound)
CheckHorizontalLine(Board, ValidRow, ThisPlayer,
WinnerFound)

If WinnerFound = False Then


CheckVerticalLine(Board, ValidRow, ValidColumn,
ThisPlayer, WinnerFound)
End If
End Sub

Sub CheckGameFinished(ByVal Board, ByVal ThisPlayer,


ByVal ValidRow, ByVal ValidColumn, ByRef GameFinished)
Dim WinnerFound As Boolean
WinnerFound = False
CheckIfPlayerHasWon(Board, ThisPlayer, ValidRow,
ValidColumn, WinnerFound)
If WinnerFound = True Then
GameFinished = True
Console.WriteLine(ThisPlayer & " is the winner")
Else
CheckForFullBoard(Board, GameFinished)
End If
End Sub

Sub SwapThisPlayer(ByRef ThisPlayer)


If ThisPlayer = "O" Then
ThisPlayer = "X"
Else
ThisPlayer = "O"
End If
End Sub

Sub main()
Dim ThisPlayer As Char
Dim GameFinished As Boolean
Dim Board(6, 7) As Char
Dim ValidRow, ValidColumn As Integer

InitialiseBoard(Board)
SetUpGame(ThisPlayer, GameFinished)

© Cambridge University Press 2019


OutputBoard(Board)
Do While GameFinished = False
PlayerMakesMove(ThisPlayer, Board, ValidRow,
ValidColumn)
OutputBoard(Board)
CheckGameFinished(Board, ThisPlayer, ValidRow,
ValidColumn, GameFinished)
If GameFinished = False Then
SwapThisPlayer(ThisPlayer)
End If
Loop
Console.ReadLine()
End Sub
End Module

Java import java.util.Scanner;

public class Main


{
static Scanner console = new Scanner(System.in);
static final char BLANK = '.';

static void initialiseBoard(char [][] board)


{
for (int row = 1; row <= 6; row++)
for (int column = 1; column <= 7; column++)
board[row][column] = BLANK;
}

static char setUpGame()


{
char thisPlayer = 'O';
return thisPlayer;
}

static void outputBoard(char [][] board)


{
for (int row = 6; row >= 1; row--)
{
for (int column = 1; column <= 7; column++)
System.out.print(board[row][column]);
System.out.println();
}
}

static boolean columnNumberValid(char [][] board,


int columnNumber)
{
boolean valid = false;
if ((columnNumber >= 1) && (columnNumber <= 7))
if (board[6][columnNumber] == BLANK)
valid = true;
return valid;
}

© Cambridge University Press 2019


static int playerChoosesColumn(char [][] board)
{
int columnNumber = 0;
do
{
System.out.print("Enter a valid column number:
");
columnNumber = console.nextInt();
} while(columnNumberValid(board, columnNumber) !=
true);
return columnNumber;
}

static int findFreeRow(char [][] board, int


validColumn)
{
int thisRow = 1;
while (board[thisRow][validColumn] != BLANK)
{
thisRow = thisRow + 1;
}
return thisRow;
}

static void playerMakesMove(char thisPlayer, char


[][] board, int [] coordinates)
{
System.out.println("Player " + thisPlayer + " 's
turn.");
int validColumn = playerChoosesColumn(board);
int validRow = findFreeRow(board, validColumn);
board[validRow][validColumn] = thisPlayer;
coordinates[0] = validRow;
coordinates[1] = validColumn;
}

static boolean checkHorizontalLine(char [][] board,


int validRow, char thisPlayer)
{
boolean winnerFound = false;
for (int i = 1; i <= 4; i++)
if (board[validRow][i] == thisPlayer &&
board[validRow][i + 1] == thisPlayer &&
board[validRow][i + 2] == thisPlayer &&
board[validRow][i + 3] == thisPlayer)
winnerFound = true;
return winnerFound;
}

static boolean checkVerticalLine(char [][] board,


int validRow, int validColumn, char thisPlayer)
{
boolean winnerFound = false;
if (validRow == 4 || validRow == 5 || validRow ==

© Cambridge University Press 2019


6)
if (board[validRow][validColumn] == thisPlayer
&&
board[validRow - 1][validColumn] ==
thisPlayer &&
board[validRow - 2][validColumn] ==
thisPlayer &&
board[validRow - 3][validColumn] ==
thisPlayer)
winnerFound = true;
return winnerFound;
}

static boolean checkForFullBoard(char [][] board)


{
boolean gameFinished = false;
boolean blankFound = false;
int thisRow = 0;
int thisColumn;
do
{
thisColumn = 0;
thisRow = thisRow + 1;
do
{
thisColumn = thisColumn + 1;
if (board[thisRow][thisColumn] == BLANK)
blankFound = true;
} while (thisColumn != 7 && blankFound ==
false);
} while (thisRow != 6 && blankFound == false);
if (blankFound == false)
{
System.out.println("It is a draw");
gameFinished = true;
}
return gameFinished;
}

static boolean checkIfPlayerHasWon(char [][] board,


char thisPlayer, int [] coordinates)
{
int validRow = coordinates[0];
int validColumn = coordinates[1];
boolean winnerFound = checkHorizontalLine(board,
validRow, thisPlayer);
if (winnerFound == false)
winnerFound = checkVerticalLine(board,
validRow, validColumn, thisPlayer);
return winnerFound;
}

static boolean checkGameFinished(char [][] board,


char thisPlayer, int [] coordinates)
{

© Cambridge University Press 2019


boolean winnerFound = checkIfPlayerHasWon(board,
thisPlayer, coordinates);
boolean gameFinished;
if (winnerFound)
{
gameFinished = true;
System.out.println(thisPlayer + " is the
winner");
}
else
gameFinished = checkForFullBoard(board);
return gameFinished;
}

static char swapThisPlayer(char thisPlayer)


{
if (thisPlayer == 'O')
thisPlayer = 'X';
else
thisPlayer = 'O';
return thisPlayer;
}

public static void main(String[] args)


{
boolean gameFinished = false;
int [] coordinates = new int [2];
char [][] board = new char[7][8];

initialiseBoard(board);
char thisPlayer = setUpGame();
outputBoard(board);
while (gameFinished == false)
{
playerMakesMove(thisPlayer, board,
coordinates);
outputBoard(board);
gameFinished = checkGameFinished(board,
thisPlayer, coordinates);
if (gameFinished == false)
thisPlayer = swapThisPlayer(thisPlayer);
}
}
}

Task 14.15
Initialise Tally array
REPEAT
INPUT Choice // 1 for Reading, 2 for computer games,
// 3 for Sport, 4 for Programming, 5 for TV
// 0 to end input
Increment Tally[Choice]
UNTIL Choice = 0

© Cambridge University Press 2019


FOR Index = 1 TO 5
OUTPUT Tally[Index]
NEXT Index
Python # Tally : int array [1:5]
# Hobbytitle : str array [1:5]
# Choice : int
# Index : int
# FileHandle : text file channel
# TextLine : str
# DigitString : str

# (a) declare and initialise Tally


Tally = [0,0,0,0,0,0,0]

# (c) store hobby titles


HobbyTitle = ['', 'Reading books', 'Playing computer
games', 'Sport', 'Programming', 'Watching TV']

# (e) to read existing data from file


FileHandle = open("Tally.TXT", "r")
for Index in range(6):
TextLine = FileHandle.readline()
DigitString = TextLine.strip('\n')
Tally[Index] = int(DigitString)
FileHandle.close()

# (b) main part of program


Choice = int(input('Enter your favourite hobby: '))
while Choice != 0:
Tally[Choice] += 1
Choice = int(input('Enter your favourite hobby: '))
for Index in range(1,6):
print("{0:<24}{1:>5}".format(HobbyTitle[Index],
Tally[Index]))

# (d) save tally data to file


FileHandle = open("Tally.TXT", "w")
for Index in range(6):
FileHandle.write(str(Tally[Index]) + "\n")
FileHandle.close()
VB.NET Module Module1

Sub Main()
Dim Tally(5) As Integer
Dim Hobbytitle(5) As String
Dim Choice, Index As Integer
Dim FileHandleOut As IO.StreamWriter
Dim FileHandleIn As IO.StreamReader

' (a) declare and initialise Tally


For Index = 0 To 5
Tally(Index) = 0
Next

© Cambridge University Press 2019


' (c) store hobby titles
Hobbytitle(1) = "Reading books"
Hobbytitle(2) = "Playing computer games"
Hobbytitle(3) = "Sport"
Hobbytitle(4) = "Programming"
Hobbytitle(5) = "Watching TV"

' (e) to read existing data from file


FileHandleIn = New IO.StreamReader("Tally.TXT")
For Index = 0 To 5
Tally(Index) = FileHandleIn.ReadLine
Next
FileHandleIn.Close()

' (b) main part of program


Do
Console.Write("Enter your favourite hobby: ")
Choice = Console.ReadLine
Tally(Choice) += 1
Loop Until Choice = 0
For Index = 1 To 5
Console.WriteLine("{0,24}{1,5}",
Hobbytitle(Index), Tally(Index))
Next

' (d) save tally data to file


FileHandleOut = New IO.StreamWriter("Tally.TXT")
For Index = 0 To 5
FileHandleOut.WriteLine(Tally(Index))
Next
FileHandleOut.Close()

Console.ReadLine()
End Sub

End Module

Java import java.io.IOException;


import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.FileReader;
import java.io.BufferedReader;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) throws
IOException
{
Scanner console = new Scanner(System.in);
int[] tally = new int[6];
String[] hobbytitle = new String[6];
int choice;

// (a) declare and initialise Tally

© Cambridge University Press 2019


for (int index = 0; index <= 5; index++)
tally[index] = 0;

// (c) store hobby titles


hobbytitle[1] = "Reading books";
hobbytitle[2] = "Playing computer games";
hobbytitle[3] = "Sport";
hobbytitle[4] = "Programming";
hobbytitle[5] = "Watching TV";

// (e) to read existing data from file


FileReader fileHandleIn = new
FileReader("Tally.TXT");
BufferedReader textReader = new
BufferedReader(fileHandleIn);
for (int index = 0; index <= 5; index++)
{
String lineOfText = textReader.readLine();
tally[index] = Integer.valueOf(lineOfText);
}
textReader.close();

// (b) main part of program


do
{
System.out.print("Enter your favourite hobby:
");
choice = console.nextInt();
tally[choice] += 1;
} while (choice != 0);

for (int index = 1; index <= 5; index++)


{
System.out.print( String.format("%24s",
hobbytitle[index]));
System.out.println (String.format("%5d",
tally[index]));
}

// (d) save tally data to file


FileWriter fileHandleOut = new
FileWriter("Tally.TXT", false);
PrintWriter printLine = new
PrintWriter(fileHandleOut);
for (int index = 0; index <= 5; index++)
printLine.println(tally[index]);
printLine.close();
}
}

© Cambridge University Press 2019


Exam-style Questions
1 DECLARE Ounces : INTEGER
DECLARE Grams : INTEGER
OUTPUT "Ounces Grams"
FOR Ounces  1 TO 30
Grams Rounded(Ounces * 28.35)
OUTPUT Ounces, Grams
OUTPUT new line
NEXT Ounces

Marking guidance:
1 mark for correct variable declarations
1 mark for OUTPUT statement
1 mark for Correct FOR loop structure
1 mark for correct starting and end values
1 mark for correct assignment to Grams within loop
1 mark correctly outputting Ounces and Grams on same line within loop
1 mark for indicating a new line is required after previous line, but within loop

2 DECLARE UserID : STRING


DECLARE Valid : BOOLEAN
DECLARE i : INTEGER
OUTPUT "Enter your user ID: "
INPUT UserID
IF LENGTH(UserID) <> 7
THEN
Valid  FALSE
ELSE
Valid  TRUE
FOR i  0 TO 2
IF MID(UserID, i, 1) < "A" OR MID(UserID, i, 1) > "Z"
THEN
Valid  FALSE
ENDIF
NEXT i
FOR i  3 TO 6
IF MID(UserID, i, 1) < "0" OR MID(UserID, i, 1) > "9"
THEN
Valid  FALSE
ENDIF
NEXT i
ENDIF
IF Valid
THEN
OUTPUT "valid"
ELSE
OUTPUT "not valid"
ENDIF

© Cambridge University Press 2019


Marking guidance:
1 mark for correct declarations and user input prompt
1 mark for length check
1 mark for checking first 3 characters are upper case letters
1 mark for checking final 4 characters are digits
1 mark for correct output statements

3 PROCEDURE OutputTimesTable(n : INTEGER)


DECLARE i, Product : INTEGER
FOR i  1 TO 10
Product  i * n
OUTPUT i, " x ", n, " = ", Product
NEXT i
ENDPROCEDURE

Marking guidance:
1 mark for correct procedure heading and ending
1 mark for each correct line in the procedure body

4 FUNCTION IsDivisible(x : INTEGER, y : INTEGER) RETURNS BOOLEAN


DECLARE Remainder : INTEGER
Remainder  x MOD y
IF Remainder = 0
THEN
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDFUNCTION

Marking guidance:
1 mark for correct function heading and ending
1 mark for declaration
1 mark for correct calculation of remainder
1 mark correct boolean expression
1 mark for returning FALSE when IsDivisible is false
1 mark for returning TRUE when IsDivisible is true

5 PROCEDURE EggsInBoxes(NumberOfEggs : INTEGER, BYREF NumberOfBoxes :


INTEGER, BYREF EggsLeftOver : INTEGER)
EggsLeftOver  NumberOfEggs MOD 6
NumberOfBoxes  NumberOfEggs DIV 6
ENDPROCEDURE

Marking guidance:
1 mark for correct procedure identifier and procedure ending
1 mark for each correct parameter
1 mark for correct method of parameter passing (BYREF)
1 mark for NumberOfEggs MOD 6
1 mark for assigning the above result to EggsLeftOver
1 mark for NumberOfEggs DIV 6
1 mark for assigning the above result to NumberOfBoxes

© Cambridge University Press 2019


6 FUNCTION ValidCarReg(CarReg : INTEGER) RETURNS BOOLEAN
DECLARE i : INTEGER
IF LENGTH(CarReg) <> 7
THEN
RETURN FALSE
ENDIF
FOR i 0 TO 2
IF MID(CarReg, i, 1) < "A" OR MID(CarReg, i, 1) > "Z"
THEN
RETURN FALSE
ENDIF
NEXT i
IF MID(CarReg, 3, 1) < "A" OR MID(CarReg, 3, 1) > "Z"
THEN
IF MID(CarReg, 3, 1) < "0" OR MID(CarReg, 3, 1) > "9"
THEN
RETURN FALSE
ELSE // checking for format LLNNLLL
IF MID(CarReg, 4, 1) < "0" OR MID(CarReg, 4, 1) > "9"
THEN
RETURN FALSE
ENDIF
FOR i 5 TO 7
IF MID(CarReg, i, 1) < "A" OR MID(CarReg, i, 1) > "Z"
THEN
RETURN FALSE
ENDIF
NEXT i
ENDIF
ELSE // checking for format LLLNNLL
FOR i 4 TO 5
IF MID(CarReg, i, 1) < "0" OR MID(CarReg, i, 1) > "9"
THEN
RETURN FALSE
ENDIF
NEXT i
FOR i 6 TO 7
IF MID(CarReg, i, 1) < "A" OR MID(CarReg, i, 1) > "Z"
THEN
RETURN FALSE
ENDIF
NEXT i
ENDIF
RETURN TRUE
ENDFUNCTION

Marking guidance:
1 mark for correct function heading and ending
1 mark for length check
1 mark for checking first 2 characters are upper case letters
1 mark for checking third character for letter or digit
1 mark for checking for two digits
1 mark for checking final characters are upper case letters
1 mark for returning correct Boolean value in all cases

© Cambridge University Press 2019

You might also like