Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum_po_programmirovaniyu.doc
Скачиваний:
23
Добавлен:
09.12.2018
Размер:
2.5 Mб
Скачать

7.1. Записи

Как известно, массивы могут состоять только из элементов, имеющих одинаковый физический смысл. Именно, однородность массива делает их использование ограниченным, ибо в реальных условиях чаще всего используются структуры неоднородные.

Запись – неоднородная структура, в которой явным образом выражена идея иерархической подчиненности между ее элементами.

Переменную типа запись можно определить непосредственно в разделе описания переменных.

Опишем переменную, которая содержит следующие данные: порядковый номер, ФИО, год рождения, размер месячной заработной платы.

107

Var

spisok: record

nomer: 1..100;

fio: string[40];

gr: 1900.2007;

zp: real;

end;

Та же переменная может быть задана с предварительным описанием типа.

type

wed=record

nomer: 1..100;

fio: string[40];

gr: 1900.2007;

zp: real;

end;

var spisok: wed;

mspisok: array[1..100] of wed;

Переменная mspisok определяет массив, состоящий из 100 элементов, каждый из которых включает в себя все поля записи wed.

Оба способа определения записи одинаково приемлемы, однако, определяя запись через тип, мы получаем дополнительную возможность передачи переменных типа запись подпрограммам в качестве параметров.

Для обращения к полям записи необходимо указать имя переменной, являющейся записью и имя нужного поля, поставив между ними точку, например, для вывода на экран размера заработной платы необходимо написать оператор writeln(spisok.zp). Для того, чтобы вывести на экран размер заработной платы работника, находящегося в списке на 5 месте, необходимо написать оператор writeln(mspisok[5].zp);

Пример. Создать массив записей типа spisok. Вывести на

108

экран элементы этого массива. Вывести на экран список тех

сотрудников, заработная плата которых превосходит некоторую заданную величину p.

Program zap;

type

wed=record

nomer: 1..100;

fio: string[40];

gr: 1900.2007;

zp: real;

end;

var spisok: wed;

mspisok: array[1..100] of wed;

i,n: integer {n- кол-во элементов в списке}

p: real; {Размер предельной заработной платы}

begin

writeln(‘Введите количество записей в массиве');

readln(n);

{Формирование списка}

for i:=1 to n do

begin

writeln(‘Введите порядковый номер сотрудника’);

readln(mspisok[i].nomer);

writeln(‘Введите ФИО сотрудника’);

readln(mspisok[i].fio);

writeln(‘Введите год рождения сотрудника’);

readln(mspisok[i].gr);

writeln(‘Введите размер заработной платы сотрудника’);

readln(mspisok[i].zp);

end;

{Вывод списка на экран}

109

for i:=1 to n do

begin

writeln(msisok[i].nomer,’ ‘,msisok[i].fio,’ ‘, msisok[i].gr,’ ‘, msisok[i].zp);

end;

{Анализ списка}

for i:=1 to n do

begin

if(msisok[i].zp>p then

writeln(msisok[i].nomer,’ ‘,msisok[i].fio,’ ‘, msisok[i].gr,’ ‘, msisok[i].zp);

end;

end.

Для того, чтобы не повторять имя записи при каждом обращении к полям записи, используется оператор присоединения with. Очевидно, что если действие оператора with нужно распространить более чем на один оператор, то нужно использовать операторные скобки

Например, фрагмент программы формирования списка с использованием оператора with будет выглядеть так

for i:=1 to n do

begin

with mspisok[i] do

begin

writeln(‘Введите порядковый номер сотрудника’);

readln(nomer);

writeln(‘Введите ФИО сотрудника’);

readln(fio);

writeln(‘Введите год рождения сотрудника’);

readln(gr);

writeln(‘Введите заработную плату сотрудника’);

110

readln(zp);

end;

{end with}

end; {end for}