Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Паскалю.doc
Скачиваний:
33
Добавлен:
04.06.2015
Размер:
7.33 Mб
Скачать

Var stud_1 : tStudent;

gruppa : Array [1..15] Of TStudent;

baza_gruppa : File Of TStudent;

Описанная переменнаяstud_1имеет те же поля, что и запись типаTStudent. Чтобы обратиться к любому поля, необходимо написать имя переменной и через точку – имя поля. Поле записи определенного типа может являться операндом в любых выражениях того же типа, то есть к нему могут применяться операции, допустимые для переменных данного типа:

stud_1.nomer := ‘ИС-09’;

stud_1.fam := ‘Иванов’;

stud_1.name := ‘Ваня’;

stud_1.ocenka := 4;

stud_1.sr_ball := 4.12;

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

.nomer := ‘ИС-09’; это неправильно!

.fam := ‘Иванов’; это неправильно!

Для упрощения работы с записями в Паскале введен специальный оператор, позволяющий сократить написание имен записей – оператор присоединения:

With x Do

оператор;

где With- служебное словоc,

x- имя переменной-записи,

Внутри этого оператора поля переменной-записи обозначаются без имени самой записи:

With stud_1 Do

Begin

nomer := ‘ИС-09’;

fam := ‘Иванов’;

name := ‘Ваня’;

ocenka := 4;

sr_ball := 4.12;

End;

Внимание! Запись может быть введена с клавиатуры и выведена на экран толькопо полям, а не целиком, то есть в операторах ввода и выводаReadLnиWriteLnнельзя указывать имя записи без имени поля:

ReadLn(stud_1); это неправильно!

WriteLn(stud_1); это неправильно!

ReadLn(stud_1.ocenka); это правильно!

WriteLn(stud_1.ocenka); это правильно!

Записи могут являться элементами массивов, то есть разрешены массивызаписей, например, описанный выше массивgruppa. Каждый элемент этого массива – отдельная запись со всеми полями, определенными при ее описании. При обращении к элементу такого массива указывается имя массива, индекс элемента и через точку – имя поля:

gruppa[5].nomer := ‘ИС-09’;

gruppa[5].fam := ‘Иванов’;

gruppa[5].name := ‘Ваня’;

gruppa[5].ocenka := 4;

gruppa[5].sr_ball := 4.12;

В этом случае тоже можно использовать оператор присоединения:

With gruppa[5] Do

Begin

nomer := ‘ИС-09’;

fam := ‘Иванов’;

name := ‘Ваня’;

ocenka := 4;

sr_ball := 4.12;

End;

При работе сфайлами записей(базами данных) необходимо учитывать то, что для ввода и вывода элементов такого файла – отдельных записей – необходимо использовать рабочую переменную-запись, имеющую такие же поля, что и элементы файла. Для ввода очередного элемента в данный файл сначала необходимо заполнить все поля рабочей переменной, например, операторами ввода:

ReadLn(stud_1.nomer);

ReadLn(stud_1.fam);

ReadLn(stud_1.name);

ReadLn(stud_1.ocenka);

ReadLn(stud_1.sr_ball);

а затем записать эту переменную в файл целиком:

Write(baza_gruppa, stud_1);

Очередная запись читается из файла тоже целиком:

Read(baza_gruppa, stud_1);

после этого ее можно, например, вывести на экран по полям:

With stud_1 Do

WriteLn(nomer:10, fam:15, name:15, ocenka:3, sr_ball:6:2);

В данном случае запись выведена в одну строку форматным способом.

Поле записи может иметь любой разрешенный в Паскале тип и структуру (массив, множество, файл, строку), в том числе может представлять собой в свою очередь запись.

Пример: создать базу данных (файл записей), в которой можно было бы хранить следующие данные о студентах:

учебная группа,

личные данные:

фамилия,

имя,

отчество,

дату рождения:

год,

месяц,

день,

адрес:

город,

улица,

дом,

корпус,

квартира,

телефон.

данные о нескольких студентах (конец ввода – нажатие на клавишу ENTERпри запросе номера учебной группы). Прочитать базу данных и вывести на экран номера учебных групп, фамилии, имена и отчества студентов.

Интерфейс:

Группа: ИС-09

Фамилия: Иванов

Имя: Иван

Отчество: Иванович

Год рождения: 1993

Месяц рождения: 2

День рождения: 23

Город: Иркутск

Улица: Трилиссера

Дом: 123

Корпус: 2

Квартира: 45

Телефон: 235347

Группа:

На экран будет выведено:

ИС-09 Иванов Иван Иванович

Программа:

Program Baza_student;

Uses WinCrt;

Type TKadr = Record основная запись

gruppa : String[10];

fio : Record запись в записи

fam, name : String[10];

otch : String[15];

End;

adres: Record запись в записи

gorod, ulica : String[20];

korp, dom, kv: String[5];

telefon : String[10];

End;

data : Record запись в записи

den : 1..31;

mes : 1..12;

god : 1900..2000;

End;

End;