Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 15.
Комбинированный тип данных “запись”.
Под записью в Паскале – понимают фиксированное число элементов одного или нескольких типов. То есть в отличие от массивов, в которых могут содержаться элементы одного типа, в записях могут содержаться элементы как одного, так и разных типов. Например, в формате записи можно организовать единицу хранения информации о книгах в библиотеке: автор, название книги, издательство, год издания, её цена. Первые три элемента относятся к строковому типу данных, четвертый к целому, а цена - к вещественному типу. Элементы записи называются полями записи. Над элементами записи можно выполнять действия, допустимые для данных этого типа.
Перед использованием типа-запись его рекомендуется описать в разделе описания типов по следующей схеме
Type Имя типа = record
Список полей1: тип1;
Список полей2: тип2;
………………………..
End;
Все идентификаторы полей в записи должны быть различными. Например, в соответствии с приведённым выше примером, можно описать следующий тип-запись.
TYPE card = record
Author: string [15];
Title, Firm: string [20];
year: integer ;
price: real
End;
После описания типа-записи появляется возможность его использования в программе. Например, можно описать переменную соответствующего типа.
Var Book: card;
Обращение к полю выполняется с помощью составного имени (селектора записи), которое схематично можно представить так
Имя записи . имя поля
Например, полям переменной Book можно присвоить следующие значения
Book.Author:= ’Толстой Л.Н.’;
Book.Title:=’Война и мир’;
Ввод цены можем задать с клавиатуры Readln(Book.price);
При работе с записями для упрощения и сокращения составных имен можно использовать оператор WITH. Он имеет следующий вид
WITH имя записи DO оператор;
После DO, при обращении к полям записи, указывать их “родителя” уже не нужно. Например, те же действия, что были произведены с полями переменной book выше можно выполнить следующим образом.
With book do begin
Author:= ’Толстой Л.Н.’;
Title:=’Война и мир’;
Readln(price);
End;
На практике записи обычно используют совместно с другими формами хранения данных (обычно массивами или файлами).
Пример.
Создать файл записей о книгах, хранящихся на складе (5 книг).
type card = record
author:string[15];
Title: string[100];
price: real;
End;
Var a: card;
f: file of card;
i:integer;
Begin
{Заполняем файл}
Assign(f, ‘c:\books.dat’);
Rewrite(f);
For i:=1 to 5 do begin
Writeln('----------------------------------------------');
Writeln('Введите информацию по лоту №', i);
write('автор-'); Readln(a.author);
write('название- '); Readln(a.title);
write('цена-'); Readln(a.price);
write(f,a);
end;
Close(f);
END.
Пример.
В файле, созданном в предыдущем примере, найти все книги по фамилии автора, введённой пользователем.
type card = record
author:string[15];
Title: string[100];
price: real;
End;
Var a: card;
f: file of card;
i:integer;
s:string;
Begin
Assign(f, ‘c:\books.dat’);
Reset(f)
write('Введите фамилию автора для поиска'); Readln(s);
i:=0;
Repeat;
Read(f, a);
If a.author=s then begin
i:=i+1;
writeln(‘Автор -’, a.author);
writeln(‘ Название - ’, a.title);
writeln(‘ Цена ’, a.price);
Writeln;
End;
Until EOF(f);
Writeln(‘общее количество найденных записей - ’, i);
Close(f)
END.
Пример.
В файле, созданном в первом примере найти автора с самой короткой фамилией и выведите информацию по любой его книге..
type card = record
author:string[15];
Title: string[100];
price: real;
End;
Var a: card;
f: file of card;
SN: card;
Begin
SN.author:=’aaaaaaaaaaaaaaaaa’;
Assign(f, ‘c:\books.dat’);
Reset(f);
Repeat
Read(f, a);
If length(a.author)< length(SN.author) then SN:=a;
Until EOF(f);
Writeln(‘Данные по автору с самой короткой фамилией ’);
With SN do begin
writeln(‘Автор -’, author);
writeln(‘ Название - ’, title);
writeln(‘ Цена ’, price);
end;
Close(f)
END.
.