Records. Records with variants. Operator with
Contents
- 1. What are the benefits of records in Pascal?
- 2. What types of variables you may use in the records?
- 3. What is the general view of record?
- 4. An example of definition and using the record, which describes the coordinates of point on the plane (x; y).
- 5. An example of definition and using of record of type TBOOK.
- 6. How to assign one record to another record?
- 7. An example of definition and using of one-dimensional array of records of type BOOK.
- 8. An example of definition and using the nested records.
- 9. What are the advantages of “with” operator in the records?
- 10. An example of using “with” statement.
- 11. What benefits of using the records with variants?
- 12. An example of using the variant’s record.
1. What are the benefits of records in Pascal?
Records allow you to group different types of data on certain grounds. The fields of records may be variables of different types.
For example:
- a record that contains information about the coordinates of point on the plane (x; y);
- a record that contains information about name, surname and patronymic of worker;
- a record that contains information about the book in library: name of reader, address of reader.
Using of records is the convenient way, when you need to save and process the arrays of variables of different types.
⇑
2. What types of variables you may use in the records?
In the records variables can be different types. It can be and standard types of data and user data types. This significantly differs the record from array.
⇑
3. What is the general view of record?
In the application you can define the record by two ways:
– by using a definition of record’s type in the section type;
– by using a definition of variable of record’s type in the section var.
Way 1. Record’s definition by using of section of type definition “type”. The result is a its own type, which is a record. With the help of this way it is possible to use the variables that are records in the procedures and functions as parameters.
type <Name_type_record> = record <field1:type> <field2:type> ... <fieldN:type> end;
where
Name_type_record – the name of type, which is assigned to the variables of this record;
field1, field2, fieldN – the names of variables which are the fields of record;
type – the name of some type from allowable types of program (integer, real, string …);
After this describing it is possible to define the variable of these type in the section var:
var
<Variable_name>:<Name_type_record>;
Way 2. Definition of record immediately in the section var.
var <Variable_name>: record <field1:type> <field2:type> ... <fieldN:type> end;
⇑
4. An example of definition and using the record, which describes the coordinates of point on the plane (x; y).
Way 1. By using the type section of type’s definition.
type // The 'TPoint' record definition TPoint = record x:real; // x coordinate y:real; // y coordinate end; var P:TPoint; // variable named 'P' of TPoint type
To save the values of coordinates in the variable P, you need to write the following text:
... begin ... P.x := 12.5; P.y := -8.3; ... end; ...
Way 2. In the var section of variables definition.
var P2:record // variable record has two fields x and y x:real; y:real; end;
To access to the fields of variable P2 you need to write following:
... begin ... P2.x := -9.25; P2.y := 18; ... end; ...
⇑
5. An example of definition and using of record of type TBOOK.
An example of definition the record of TBOOK type that includes following fields:
- the book’s title;
- author’s name;
- year of publication of the book;
- the cost of the book.
type TBOOK = record Title:string; Author:string; Year:integer; Price:real; end; var B:TBOOK; ... begin ... B.Title := 'Java 8'; B.Author := 'Herbert Schildt'; B.Year := 2015; B.Price := 0.00; ... end;
⇑
6. How to assign one record to another record?
To assign the value of fields from one record to another record these records must be the same type. This type must be defined in the section type.
In the example below, the assignment between variables M1 and M2 is realized. Two variables are the records of type TMonth.
type // Definition of record that describes the month of the year TMonth = record num:1..12; // the month in the year (1-january, 2-february, ...) name:string[20]; // the name of month quarter:1..4; // number of quarter end; var M3:record num:1..12; // the month in the year (1-january, 2-february, ...) name:string[20]; // the name of month quarter:1..4; // number of quarter end; M1,M2:TMonth; begin ... M1.num := 2; M1.name := 'Февраль'; M1.quarter := 1; // assignment between records M2:=M1; // Error - Incompatible types: 'Record' and 'TMonth' // M3:=M1; ... end;
⇑
7. An example of definition and using of one-dimensional array of records of type BOOK.
... type TBOOK = record Title:string; Author:string; Year:integer; Price:real; end; var Books:array[1..20] of TBOOK; begin ... Books[3].Title := 'C# 4.0'; Books[3].Author := 'Herbert Schildt'; Books[3].Year := 2011; Books[3].Price := 0.99; ... end;
⇑
8. An example of definition and using the nested records.
In the example below two records of types TName and TBOOK are defined. In the record of TBOOK type, the variable of type TName is defined.
type TName = record Name:string[20]; Surname:string[20]; end; TBOOK = record Title:string; Author:TName; // nested record Year:integer; Price:real; end; var Books:array[1..20] of TBOOK; B:TBOOK; begin B.Title := 'C# 4.0'; B.Author.Name := 'Herbert'; B.Author.Surname := 'Schildt'; B.Year := 2011; B.Price := 0.99; end;
⇑
9. What are the advantages of With operator in the records?
The “with” statement allows you to reduce the long notation of elements records. “with” statement also improves readability and reduces typing the text of the program in which there is frequent reference to the record fields. In addition, the with statement reduces the execution time of the program, because link to the record is carried out only once.
The “with” statement opens a scope that includes field names a variable of type “Record”.
The general form of “with” statement:
with <Variable_name> do statement;
The statement with can be composite:
with <Variable_name> do begin statement1; statement2; ... statementN; end;
⇑
10. An example of using “with” statement.
type TName = record Name:string[20]; Surname:string[20]; end; TBOOK = record Title:string; Author:TName; // nested record Year:integer; Price:real; end; var B:TBOOK; begin with B do begin Title := 'C# 4.0'; with Author do begin Author.Name := 'Herbert'; Author.Surname := 'Schildt'; end; Year := 2011; Price := 0.99; end; end;
⇑
11. What benefits of using the records with variants?
In records it is possible to set the type, that includes definitions of several options of structure.
The record with variants – this is the variable that can include objects of different types and sizes. Compiler performs all requirements for sizes and alignment. Records with variants allows you to save data in the memory.
A record may include only one part of variant (in the section “case“). If you use the variants parts in the program, it minimizes the memory allocation. It is effective in the program when you use the arrays of records that contain many fields.
⇑
12. An example of using the variant’s record.
In the example below is the definition and using the variant’s record. This record describes whether the worker of the institution is in a particular category of workers.
According to category, the corresponding fields of worker are formed. The category of worker is saved in the variable f_worker.
type TName = record Name:string[20]; Surname:string[20]; end; // The record with variant, that describes of worker of institution TWorker = record name:TName; // Name of worker birth:string[10]; // birth date // The worker can be in the one of three categories case f_worker:1..3 of 1: // if the administration (post_adm:string[100]; // position rate:real; // rate: 0.5, 0.75, 1.0 salary:real); // the salary 2: // if the teacher (hours:integer; // teaching load, hours fee: real); // payment per hour 3: // if support personnel (post_pers:string[100]; // name of position rank:integer; // wage category tariff:real); // tariff rate end; var W1:TWorker; begin W1.name.Name := 'Ivan'; W1.name.Surname := 'Kornilenko'; W1.birth := '19.02.1988'; // If worker is administration then W1.f_worker := 1; // administration W1.post_adm := 'Director'; W1.rate := 0.75; W1.salary := 18800.50; // If worker is a teacher then W1.f_worker := 2; W1.hours := 72; W1.fee := 230.55; // If worker is personnel then W1.f_worker := 3; W1.post_pers := 'Driver'; W1.rank := 3; W1.tariff := 14390.35; end;
The record with variants includes the “case…of” part. Compiler interprets the fields of record according to the value of variable f_worker.