4. User-Defined Types
Docs / Pseudocode / User-Defined Types
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