- •9.1. Строки (повторить самостоятельно, см. Также 7.2.1.3 и 7.2.1.4)
- •9.2. Примеры решения задач обработки строковых данных
- •1. Программа обработки массива строк
- •3. Удаление пробелов перед началом текста строки
- •4. Программа, удаляющая из вводимой с клавиатуры строки пробелы между словами и записывающая в массив n длину (число символов) каждого слова
- •9.3. Записи
- •9.4. Примеры использования данных типа «запись»
- •1. Программа для добавления записей в файл данных о дневной температуре воздуха
- •2. Программа для обработки массива данных по группе студентов из 30 человек
- •Протокол работы программы
- •Результат работы программы
9.3. Записи
Формат описания типа данных:
TYPE < имя типа > = RECORD
<идентификатор поля> : <тип компонент>;
…
<идентификатор поля> : <тип компонент>;
END;
VAR
<идентификатор,…> : <имя типа>;
Например,
TYPE
STR = RECORD
FAM: STRING [35];
B1, B2, B3, B4, B5: 2..5;
sB: REAL
END;
VAR
ST1, ST2, ST3, ST4: STR;
Запись STR содержит семь компонент: фамилию студента, оценки по пяти предметам, средний балл.
Доступ к полям записи осуществляется через переменные ST1, ST2,ST3 и ST4 типа STR.
Описание переменных типа Запись в разделе описания переменных:
Например,
VAR
GRUPPA : ARRAY [1..30] OF RECORD
FAM: STRING [35];
NAME: STRING [15];
GOD_R: INTEGER;
END;
СОСТАВНОЕ ИМЯ:
ST1.FAM, ST1.B1, ST1.B2, ST1.B3, ST1.B4, ST1.B5, ST1.SB.
ST3.SB := (ST3.B1 + ST3.B2 + ST3.B3 + ST3.B4 + ST3.B5) / 5;
Использование в операторах ввода-вывода:
READ (ST1.FAM, ST1.B1, ST1.B2, ST1.B3, ST1.B4, ST1.B5);
WRITELN (ST2.FAM, ST2.SB);
Присваивание полям записи значений:
ST1.FAM := ‘Сидоров’;
ST2.FAM := ‘Петров’;
Применение присваивания к записям в целом:
ST3 : = ST2;
После выполнения этого оператора значения полей записи ST3 станут равны значениям соответствующих полей записи ST2. Т.е. оператор присваивания ST3 : = ST2 эквивалентен следующей группе операторов:
ST3.FAM : = ST2.FAM; ST3.B4 : = ST2.B4;
ST3.B1 : = ST2.B1; ST3.B5 : = ST2.B5;
ST3.B2 : = ST2.B2; ST3.SB : = ST2.SB;
ST3.B3 : = ST2.B3;
Массивы из записей:
TYPE
STR = RECORD
FAM: STRING [35];
B1, B2, B3, B4, B5: 2..5;
sB: REAL
END;
VAR
gruppa : array [1..30] of STR;
Составные имена в случае работы с массивом записей будут иметь вид:
GRUPPA[1].FAM; GRUPPA[1].B3; GRUPPA[25].FAM;
Оператор присоединения WITH
Формат оператора присоединения:
WITH < переменная типа запись > DO < оператор >;
FOR I := 1 TO 30 DO
WITH GRUPPA [I] DO
READLN (FAM, B1, B2, B3, B4, B5);
Вложение записей друг в друга:
WITH R1 DO
WITH R2 DO
WITH R3 DO
…
что эквивалентно записи
WITH R1R2R3 DO …
Для описания комплексных чисел могут быть использованы записи:
TYPE
COMPLEX = RECORD
DEYSTV : REAL; { действительная часть числа }
MNIM: REAL; { мнимая часть числа }
END;
VAR
A,B,C1,D2:COMPLEX;
BEGIN
A.DEYSTV := 73.8;
A.MNIM := 43.5;
…
Записи с вариантами
Формат объявления записи с вариантами:
TYPE
ZAP = RECORD
CASE <поле признака >: <имя типа > OF
<константа выбора 1 > : (поле, …: тип);
< константа выбора 2 >: (поле, …: тип);
…
…
END;
Компоненты каждого варианта (идентификаторы полей и их типы) заключаются в круглые скобки
TYPE
ПОЛ = (муж, жен);
ЧЕЛ = RECORD
ФАМ : SRRING [35];
ГОДРОЖД: 1970..2000;
МЖ: ПОЛ;
CASE МЖ: ПОЛ OF
МУЖ: (ВОЕН: BOOLEAN; СПЕЦ: STRING [30]);
ЖЕН: (ЗАМУЖ: BOOLEAN; ДЕТИ: BYTE)
END;
VAR
ST1, ST2, ST3, ST4: ЧЕЛ;
Поля ВОЕН и СПЕЦ используются только в том случае, если значение поля МЖ равно МУЖ, поля ЗАМУЖ и ДЕТИ – при значении поля МЖ – ЖЕН.
Замечания:
- Все имена полей должны отличаться друг от друга, даже если они встречаются в разных вариантах;
- Запись может иметь только одну вариантную часть, причем вариантная часть должна размещаться в конце записи;
- Если поле, соответствующее какой-либо метке, является пустым, то оно записывается так
< метка > : ( ) ;