Primitive data types(atomic data types) are those variables that can be defined simply by commands built into the programming language.
string - store serveral characters
The string data type is known as a structured type because it is essentially a sequence of characters.
INTEGER | A signed while number |
---|---|
READ | A signed number with a decimal point |
CHAR | A single character |
STRING | A sequence of zero or more characters |
BOOLEAN | The logical value TRUE and FALSE |
DATE | A date consisting of day, month and year, sometimes including a time in hours, minutes and seconds |
Sometimes variables of different data types are a logical group, such as data about a person (name, date of birth, height, number of siblings, whether they are a full-time student).
Name is a STRING; date of birth is a DATE; height is a REAL; number of siblings is an INTEGER; whether they are a full-time student is a BOOLEAN.
We can declare a record type to suit our purposes. The record type is known as a user-defined type, because the programmer can decide which variables (fields) to include as a record.
// declare a record type
TYPE <TypeIdentifier>
DECLARE <field identifier> : <data type>
.
.
ENDTYPE
// declare a variable of this recode type
DECLARE <variable identifier> : <record type>
// access an individual filed using the dot notation
<variable identifier>.<field identifier>
// declare a Persion record type
TYPE PersonType
Name : STRING
DateOfBirth : DATE
Height : REAL
NumberOfSiblings : INTEGER
IsFullTimeStudent : BOOLEAN
ENDTYPE
// declare a variable of this type
DECLARE Person : PersonType
// assign a value to a file of this Person record
Person.Name ← "Fred"
Person.NumberOfSiblings ← 3
Person.IsFullTimeStudent ← TRUE
// output a field
OUTPUT Person.Name
An array is an ordered set of data items, usually of the same type, grouped together using a single identifier.
Individual array elements are addressed using an array index for each array dimension.
When writting pseudocode, arrays need to be declared before they are uses.
// 1D array declaration
DECLARE <arrayIdentifier> : ARRAY[<lowerBound>:<upperBound>] OF <dataType>
// pseudocode example
DECLARE List1 : ARRAY[1:3] OF STRING // 3 elements in this list
DECLARE List2 : ARRAY[0:5] OF INTEGER // 6 elements in this list
DECLARE List3 : ARRAY[1:100] OF INTEGER // 100 elements in this list
DECLARE List4 : ARRAY[0:25] OF CHAR // 26 elements in this list
// accessing 1D array
<arrayIdentifier>[x]
// pseudocode example
NList[25] ← 0
AList[3] ← 'D'
Take seven numbers as input and store them for later use.
FOR Index ← 0 TO 6
INPUT MyList[Index]
NEXT Index
Take a number as input. Search for this number in an existing 1D array of seven numbers
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
n ← MaxIndex – 1
FOR i ← 0 TO MaxIndex – 1
FOR j ← 0 TO n
IF MyList[j] > MyList[j + 1]
THEN
Temp ← MyList[j]
MyList[j] ← MyList[j + 1]
MyList[j + 1] ← Temp
ENDIF
NEXT j
n ← n – 1 // this means the next time round the inner loop, we don't
// look at the values already in the correct positions.
NEXT i
We can use a variable NoMoreSwaps to store whether or not a swap has taken place during the current pass. We initialise the variable NoMoreSwaps to TRUE. When we swap a pair of values we set NoMoreSwaps to FALSE. At the end of the pass through the array we can check whether a swap has taken place.
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
// declaration
DECLARE <identifier> : ARRAY[<lBound1>:<uBound1>, <lBound2>:<uBound2>] OF <dataType>
# example
Board : ARRAY[1:6,1:7] OF INTEGER
// Accessing 2D arrays
<arrayIdentifier>[x,y]
# example
Board[3,4] ← 0 // sets the element in row 3 and column 4 to zero
// set each element of array to zero
FOR Row ← 0 TO MaxRowIndex
FOR Column ← 0 TO MaxColumnIndex
ThisTable[Row, Column] ← 0
NEXT Column
NEXT Row
// output
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
Data need to be stored permanently. One approach is to use a file.
A text file consists of a sequence of characters formatted into lines. Each line is terminated by an end-of-line marker. The text file is terminated by an end-of-file marker.
// writing a text file
OPENFILE <filename> FOR WRITE //open the file for writing
WRITEFILE <filename>, <stringValue> //write a line of text to the file
CLOSEFILE <filename> //close file
// reading from a text file
OPENFILE <filename> FOR READ // open file for reading
READFILE <filename>, <stringVariable> // read a line of text from the file
CLOSEFILE <filename> // close file
// Appending to a text file
OPENFILE <filename> FOR APPEND // open file for append
WRITEFILE <filename>, <stringValue> // write a line of text to the file
CLOSEFILE <filename> // close file
// The end-of-file(EOF) marker
OPENFILE "Test.txt" FOR READ
WHILE NOT EOF("Test.txt") DO
READFILE "Test.txt", TextString
OUTPUT TextString
ENDWHILE
CLOSEFILE "Test.txt"
An Abstract Data Type is a collection of data and a set of associated operations:
The remainder of this chapter describes the following ADTs: stack, queue and linked list. It also demonstrates how they can be implemented from arrays.
To make a stack, we pile items on top of each other. The item that is accessible is the one on top of the stack.
// implement stack using a 1D array
DECLARE Stack:ARRAY[0:7] OF CHAR
When people form a queue, they join the queue at the end. People leave the queue from the front of the queue.
a circular queue after 11 items have joined and five items have left the queue.
linear list - the list items are stored in consecutive locations.
An element of a list is called a node. A node can consist of several data items and a pointer, which is a variable that stores the address of the node it points to.
A pointer that does not point at anything is called a null pointer. It is usually represented by ∅. A variable that stores the address of the first element is called a start pointer.