AS & A Level
User-Defined Types
4. User-Defined Data Types
Cambridge AS & A Level (9618) user-defined types: Enumerated types, Pointers (^), Composite Record structures (TYPE..ENDTYPE), and Sets.
The Cambridge 9618 syllabus requires candidates to define and use non-composite types (enumerated, pointer) and composite types (record, set, class/object).
Enumerated Type
PSEUDOCODE
// TYPE <id> = (value1, value2, ...)
TYPE Season = (Spring, Summer, Autumn, Winter)
DECLARE ThisSeason : Season
ThisSeason <- Spring
Pointer Type
PSEUDOCODE
// TYPE <id> = ^<data type>
TYPE TIntPointer = ^INTEGER
DECLARE MyPointer : TIntPointer
MyPointer <- ^ThisSeason
// MyPointer^ accesses the stored value
Record Type (Composite)
PSEUDOCODE
Run in Sandbox
// runnable
TYPE StudentRecord
DECLARE LastName : STRING
DECLARE FirstName : STRING
DECLARE DateOfBirth : DATE
DECLARE YearGroup : INTEGER
DECLARE FormGroup : CHAR
ENDTYPE
DECLARE Pupil1 : StudentRecord
Pupil1.LastName <- "Johnson"
Pupil1.YearGroup <- 6
Set Type (Composite)
PSEUDOCODE
// TYPE <id1> = SET OF <data type>
// DEFINE <id2> (values) : <id1>
TYPE LetterSet = SET OF CHAR
DEFINE Vowels ('A','E','I','O','U'): LetterSet
Using UDTs — Dot Notation & Records
PSEUDOCODE
Run in Sandbox
// runnable
TYPE StudentRecord
DECLARE LastName : STRING
DECLARE FirstName : STRING
DECLARE YearGroup : INTEGER
ENDTYPE
DECLARE Pupil1 : StudentRecord
DECLARE Pupil2 : StudentRecord
Pupil1.LastName <- "Johnson"
Pupil1.FirstName <- "Leroy"
Pupil1.YearGroup <- 6
// Whole-record assignment
Pupil2 <- Pupil1
OUTPUT "Pupil 2: ", Pupil2.FirstName, " ", Pupil2.LastName
OUTPUT "Year Group: ", Pupil2.YearGroup