Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal_учебник_3.doc
Скачиваний:
33
Добавлен:
11.04.2015
Размер:
937.47 Кб
Скачать

12. Использование записей

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

Составляющие запись объекты называются ее полями. В записи каждое поле имеет свое собственное имя (идентификатор).

В определении типа записи после служебного слова RECORD следует , СПИСОК ПОЛЕЙ, состоящий из одного или нескольких элементов, называемых СЕКЦИЯМИ ЗАПИСИ. Если секций записи более одной, то они разделяются точкой с запятой. Вся последовательность завершается служебным словом END.

ОБЩИЙ ВИД ОПЕРАТОра

Допустим, что мы хотим определить тип данных RECORD с именем adress, и наша запись должна содержать три элемента: улицу (тип string), номер дома и номер квартиры (тип integer). Это будет выглядеть следующим образом:

TYPE

Adress RECORD

street : string;

house, flat : integer

END;

Теперь, располагая определением типа adress, можно объявить одну и более переменных этого типа или даже ряд из элементов типа adress:

VAR

home : adress;

familiy : array [1..100] of adress;

fater : RECORD

street : string;

house, flat : integer

end;

Названия полей записи могут совпадать с именами переменных, констант и других объектов программ, но не могут совпадать с названиями полей других записей.

Чтобы обратиться к именам полей, необходимо написать имя переменной-записи и через точку имя нужного поля. Например:

home.street:='Ленина';

home.house:=25;

home.flat:=1;

for i:=1 to 100 do

begin

readln(familiy[i].street);

readln(familiy[i].house,familiy[i].flat)

end;

home:=familiy[1]; {все поля переменной home равны полям первого элемента массива familiy}

Понятно, что такой синтаксис может стать довольно обременительным, в особенности с записями очень сложной структуры. В качестве альтернативы в языке PASCAL предусмотрено специальное средство, называемое WITH (присоединение). Формально предложение WITH строится по следующей схеме:

With префикс[,префикс [...]] do оператор

где слово префикс обозначает имя одного или нескольких уровней записи. За заголовком WITH ... DO следует любой оператор или группа операторов, заключенные в операторные скобки BEGIN и END.

Например:

for i:=1 to 100 do

WITH familiy[i] do

begin

Readln(street);

Readln(house,flat)

end;

Пример 1

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

Решение

TYPE

class = RECORD

nom : 1..11; {номер класса}

ch : char {буква класса}

end;

uchenik = RECORD

fam,imya:string[15];

kl : class

end;

VAR

u : array[1..1000] of uchenik;

x : uchenik;

n,i : integer;

Begin

WRITE('сколько учеников в школе?');

Readln(n);

for i:=1 to n do {ввод сведений по всем ученикам}

begin

Writeln(i,'-й уч.');

Writeln('фамилия?'); Readln(u[i].fam);

Writeln('имя?'); Readln(u[i].imya);

Writeln('класс N'); Readln(u[i].kl.nom);

Writeln('буква класса?'); Readln(u[i].kl.ch)

end;

{определим, каких больше классов: 1-х или 2-х или..}

x:=u[1]; {первого ученика берем за основу}

for i:=2 to n do

with u[i],kl do

if ch>x.kl.ch then x:=u[i];

Writeln(x.kl.nom,'-х классов больше всего. Их ',

ord(x.kl.ch)-ord('а')+1);

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]