- •Курс «основы алгоритмизации и программирования»
- •Тема: «структурированные типы данных»
- •Классификация типов данных, используемых в программах на языке паскаль
- •1. Строковый тип данных
- •1.1. Базовый тип
- •1.2. Объявление строкового типа
- •1.3. Операции над строками
- •1.4. Стандартные процедуры и функции обработки строк
- •1.5. Ввод-вывод строк
- •1.6. Asciiz-строки
- •2. Комбинированные типы данных
- •2.1. Описание записи
- •Организация записи stud
- •2.2. Селектор записи
- •2.3. Оператор присоединения
- •2.4. Вложенные записи
- •2.5. Записи с вариантами
- •3. Индивидуальные задания.
- •Тема: «структурированные типы данных»
- •- Страница 18 -
2.3. Оператор присоединения
Использование в программе селекторов записи (составных имен) приводит к ее удлинению и излишней громоздкости. С целью устранения этого неудобства в языке Паскаль используется оператор присоединения(операторwith), который позволяет осуществлять доступ к компонентам записи таким образом, как если бы они были простыми переменными. Общий вид оператора присоединения таков:
with <имя записи> do <оператор>;
В операторе к компонентам записи можно обращаться только с помощью имени компонента. Например, ввод исходных данных для отдельных компонентов записи tblв предыдущей программе может быть организован следующим образом:
for i:=1 to 25 do with tbl[i] do readln(fam, b1,b2,b3,b4,b5);
Окончательный вариант программы имеет следующий вид:
{Определение среднего балла и сортировка}
program sball;
type stud=record
fam:string[15];
b1,b2,b3,b4,b5:2..5;
sb:real
end;
var tbl:array[1..25] of stud;
y:stud;
i,j,k,m:integer;
x:real;
begin
{ввод исходных данных}
writeln(‘Введите количество записей’);
read(m);{m – число записей в массив tbl}
writeln(‘Введите компоненты записей’);
for i:=1 to m do with tbl[i] do readln(fam,b1,b2,b3,b4,b5);
for i:=1 to m do {вычисление среднего балла}
with tbl[i] do sb:=(b1+b2+b3+b4+b5)/5;
for i:=1 to m-1 do {сортировка списка группы студентов}
begin
k:=i;
x:=tbl[i].sb;
for j:=i+1 to m do if tbl[i].sb>x then begin
k:=j;
x:=tbl[j].sb
end;
for i:=1 to m do {печать результатов}
with tbl[i] do writeln(fam:15,sb:6:3)
end.
В приведенной программе приняты следующие обозначения: m– число студентов в группе (может быть представлено целым числом от 1 до 25);y– вспомогательная запись, необходимая для промежуточного запоминания элемента массиваtblпри перестановке значений его элементов;x, k - вспомогательные переменные для запоминания максимального текущего значения среднего балла и его индекса в массиве записей.
2.4. Вложенные записи
Допускается использование записи в качестве элемента другой записи. В результате получается сложная запись.
Пример 4.В памяти ЭВМ требуется хранить анкетные данные, представленные в виде следующей таблицы.
А Н К Е Т А | |||||||
№ п/п |
Ф. И. О. |
Дата рождения |
Пол | ||||
Фамилия |
Имя |
Отчество |
Год |
Месяц |
Число | ||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обозначим запись через идентификатор anketa, который определим в разделе описания переменных следующим образом:
var anketa:record
npp:integer;
fio:record
fam, im, ot:string[15]
end;
dr:record
god:1900..2100;
mes:string[8];
den:1..31
end;
pol:string[3]
end;
Элементами записи anketaявляются записиfioиdr. В результате получается сложная запись. Записьanketaсодержит анкетные данные одного лица. Если программист намеревается хранить анкетные данные о 100 человеках, то либо записьanketaдолжна иметь тип массива с числом элементов 100, либо каждый элемент второго уровня (npp, fio, dr, pol) должен быть массивом с числом элементов 100.
При обращении к компонентам сложных записей можно использовать оператор with, имеющий вложенную структуру с любой степенью вложенности. Например, обращение к полю происходит с помощью составного имениanketa.dr.god, а с использованием оператора присоединения – с помощью конструкции
with anketa do with dr do god:=1965;
или несколько проще
with anketa, dr do god:=1965;
Использование оператора присоединения существенно облегчает написание программ и делает более эффективным многократное обращение к полям одной записи.