# User-Defined Data Types

> Cambridge Assessment International Education (CAIE) Pseudocode Reference Guide
> Applicable Syllabus: **AS &amp; A Level**

Cambridge AS &amp; 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 &lt;id&gt; = (value1, value2, ...)
TYPE Season = (Spring, Summer, Autumn, Winter)

DECLARE ThisSeason : Season
ThisSeason &lt;- Spring
```

### Pointer Type

```pseudocode
// TYPE &lt;id&gt; = ^&lt;data type&gt;
TYPE TIntPointer = ^INTEGER

DECLARE MyPointer : TIntPointer
MyPointer &lt;- ^ThisSeason
// MyPointer^ accesses the stored value
```

### Record Type (Composite)

```pseudocode
// runnable
TYPE StudentRecord
   DECLARE LastName : STRING
   DECLARE FirstName : STRING
   DECLARE DateOfBirth : DATE
   DECLARE YearGroup : INTEGER
   DECLARE FormGroup : CHAR
ENDTYPE

DECLARE Pupil1 : StudentRecord
Pupil1.LastName &lt;- &quot;Johnson&quot;
Pupil1.YearGroup &lt;- 6
```

### Set Type (Composite)

```pseudocode
// TYPE &lt;id1&gt; = SET OF &lt;data type&gt;
// DEFINE &lt;id2&gt; (values) : &lt;id1&gt;
TYPE LetterSet = SET OF CHAR
DEFINE Vowels (&#39;A&#39;,&#39;E&#39;,&#39;I&#39;,&#39;O&#39;,&#39;U&#39;): LetterSet
```

### Using UDTs — Dot Notation &amp; Records

```pseudocode
// runnable
TYPE StudentRecord
   DECLARE LastName : STRING
   DECLARE FirstName : STRING
   DECLARE YearGroup : INTEGER
ENDTYPE

DECLARE Pupil1 : StudentRecord
DECLARE Pupil2 : StudentRecord

Pupil1.LastName &lt;- &quot;Johnson&quot;
Pupil1.FirstName &lt;- &quot;Leroy&quot;
Pupil1.YearGroup &lt;- 6

// Whole-record assignment
Pupil2 &lt;- Pupil1

OUTPUT &quot;Pupil 2: &quot;, Pupil2.FirstName, &quot; &quot;, Pupil2.LastName
OUTPUT &quot;Year Group: &quot;, Pupil2.YearGroup
```


---

* Previous Topic: [Arrays (1-Based Indexing)](https://csmasters.dev/docs/pseudocode/arrays.md)
* Next Topic: [Common Operations &amp; Built-in Functions](https://csmasters.dev/docs/pseudocode/operations.md)
