Record тип данных паскаль
ЗАПИСИ. ТИП ДАННЫХ RECORD.
В описании данных и связей между ними используют понятия: запись логическая и запись физическая. Физическое описание данных определяет способ их хранения во внешней памяти ЭВМ. Логическое описание данных указывает на то, в каком виде эти данные представляются прикладному программисту или пользователю данных. Здесь и далее под записью будем понимать — логическую запись, или структурную переменную, состоящую из нескольких компонент, доступ к которым осуществляется по имени.
Компоненты записи (иногда их называют полями или элементами) могут быть разных типов: скалярные переменные, массивы, записи, множества, указатели.
Запись является фундаментальным понятием, основой информационной модели предметной области и широко используется при описании структур данных. Запись характеризуется именем (идентификатором) и содержит произвольную комбинацию полей, каждое из которых отражает соответствующий реквизит формализуемого информационного объекта.
Эти поля (компоненты) могут описываться данными разных типов, именно поэтому записи иногда называют комбинированными типами.
Описание записи в разделе TYPE включает:
= RECORD < список полей >
: ;
: ;
:
END;
Имя типа записи — представляет собой идентификатор, который может использоваться при конструировании новых типов или описания типов переменных в разделе VAR. Имена компонент записи соответствуют реквизитам информационного объекта, а типы компонент выбираются на основании форматов реквизитов, диапазонов изменения их значений. Кратность в экземплярах обеспечивается использованием регулярных структур ARRAY выбранных типов данных. Связи с другими объектами могут быть реализованы указателями (ссылками), включаемыми состав компонент рассматриваемой записи. Запись в целом и каждая ее компонента имеют свои имена, к которым можно обращаться в программе.
Число компонент L фиксировано и в процессе выполнения программы меняться не может. Имя компоненты должно быть уникальным только в пределах записи. Обращение к значению поля осуществляется через составное имя путем указания через точку имени переменной типа запись и имени поля этой записи.
Использование записей для описания таблиц.
При решении на ЭВМ широкого круга информационных задач формализуется мифологическая модель, описывающая множество взаимосвязанных объектов, каждый из которых характеризуется своими признаками. При этом формализуется имя информационного объекта и его реквизитный состав (в том числе: имя реквизита, формат реквизита, диапазон изменения, кратность в экземплярах) и связи с другими информационными объектами. Эта модель ложится в основу построения информационной внутримашинной базы данных. Используется два пути программирования алгоритмов ведения баз данных: средствами типовых СУБД (систем управления базой данных, например ACCESS) или с применением универсальных языков типа Паскаль, Фортран, Бейсик, СИ и других.
СУБД обеспечивает:
- организацию, ведение базы данных и словарей (генерацию структуры базы, коррекцию и удаление данных);
- макетный ввод данных в базу;
- запрос на поиск и обработку информации об объектах;
- макетный вывод результатов;
- сервисные функции СУБД (дублирование, защиту, восстановление, сжатие данных и другие).
При использовании универсального языка программирования эти функции должен реализовать программист в своих программах.
Использование СУБД рекомендуется для больших разнородных баз с меняющейся в процессе эксплуатации структурой данных, словарей, справочников, входных и выходных форм. А так же в тех случаях, когда время на разработку мало, а быстродействие системы и емкость магнитных накопителей не являются критичными.
При простой структуре данных, не изменяющихся в процессе эксплуатации справочников, макетов входных/выходных форм, запросов на обработку и высоких требованиях к защите от несанкционированного доступа к данным используется второй путь, при котором, как правило, программы и данные занимают меньше памяти, а быстродействие выше.
Описание записи.
Пример 16. Описать структуру данных, изображенных в табл. 3.1.
В табл. 3.1 представлены сведения о студентах. Каждому студенту соответствует одна строка в таблице (эти строки пронумерованы: 1, 2, 3). Эта строка на языке программистов называется записью. Запись состоит из реквизитов, расположенных в соответствующих колонках таблицы. Каждая колонка имеет вполне определенное назначение и содержит единую смысловую информацию. Колонки на языке программистов называются полями. Каждое поле имеет имя, которое используется для обращению к данному, и тип данного. Совокупность полей задает структуру записи и отражает шапку (заголовок) таблицы.
Ниже приведена модель табл. 3.1, описанная на языке ПАСКАЛЬ.
В этом описании: Student — имя типа записи; Tab, Fio, Data, Grup, Stepa — имена полей (в синтаксисе данных типа RECORD их называют компонентами); Std — одна переменная, соответствующая сведениям об одном студенте; Mstd — массив записей, то есть сведения обо всей группе студентов, перечисленных в табл. 3.1. Поле «номер по порядку» в структуру таблицы не включено, т.к. обеспечивает макетный вывод информации на монитор или бумагу и формируется автоматически в соответствии с указанным критерием упорядочения записей в таблице. Самым эффективным способом усилить сигнал является lte антенна для 4G модема.
Работа с полями записи.
Для заполнения табл. 3.1 информацией следует каждому полю присвоить соответствующее значение. Для этого можно использовать оператор присваивания. Ниже приведен фрагмент программы, обеспечивающий заполнение первой строки табл. 3.1.
Std.Tab:= 910678;
Std.Fio := ‘Петухов И.М.’;
Std.Data:=T3.01.82′;
Std.Group := ‘ИТ-11’;
Std.Stepa:= 550.00;
В этой программе формируются сведения о студенте Петухове. К сожалению оператор присваивания в Паскале не поддерживает инструкцию вида – Mstd[1] := Std, что существенно бы упростило работу с записями.
Pascal-Паскаль
Программирование. Записи Pascal-Паскаль
- Скачено бесплатно: 9293
- Куплено: 414
- Pascal-Паскаль->Программирование. Записи Pascal-Паскаль
Программирование. Записи Pascal-Паскаль
Объединение разнородных элементов (Запись)
Как мы уже выяснили, массивы объединяют однородные единицы информации – элементы одного и того же типа. Но многообразие информации нельзя свести только к какому-то одному типу данных. Например, указывая положение точки в пространстве, мы можем воспользоваться одним и тем же типом для указания ее координат, но, описывая человека, мы должны указать его имя, рост, цвет глаз и волос, то есть в одном описании объединим разнородную информацию. Точно так же, описывая автомобиль, мы укажем не только его марку, но и год выпуска, модификацию, да и цвет кузова может нас заинтересовать. Составляя автоматизированный каталог книгохранилища, мы для каждой книги должны указать ее название, имя автора, область знания, количество страниц, год издания, а также, возможно, признак нахождения на руках или в хранилище.
Данные такого рода, описывающие существенные стороны того или иного объекта путем включения в описание нескольких, часто разнотипных, элементов, называют записью (record). В языке Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов.
Запись Паскаля – структурированный комбинированный тип данных, состоящий из фиксированного числа компонент (полей) разного типа.
Например, анкетные данные о студенте вуза могут быть представлены в виде информационной структуры
Такая структура называется двухуровневым деревом. В Паскале эта информация может храниться в одной переменной типа record (запись). Задать тип можно следующим образом:
где record – служебное слово, а и — правильные идентификаторы языка Паскаль.
Описание анкеты студента в Паскале будет выглядеть так:
Пример фрагмента программы описания записи Паскаля
Такая запись Паскаля, так же как и соответствующее ей дерево, называется двухуровневой.
Поля записи Паскаля могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения о студентах можно отобразить трехуровневым деревом.
Такая организация данных позволит, например, делать выборки по году рождения или по городу, где живут студенты. В этом случае описание соответствующей записи в Паскале будет выглядеть так:
Пример фрагмента программы описания записи Паскаля
После того, как определен тип записи Паскаля, можно определять переменную этого типа. Переменная определяется путем задания ее идентификатора и указания типа.
Теперь нам нужно узнать, как правильно получать доступ к элементам записи Паскаля. Элементы записи называются полями, а обращение к ним производится через использование их имен – идентификаторов полей. Практически, поля записи обрабатываются точно так же, как и любые другие переменные. Но в отличие от обычной переменной имена полей должны предваряться ссылкой на идентификатор записи Паскаля и отделяться от него точкой. Такая запись называется уточняющий идентификатор:
Например, чтобы обратиться к полю curs переменной student , необходимо указать следующее составное имя:
Для того чтобы обратиться к полю god в записи student 1, необходимо записать уточняющий идентификатор, состоящий из трех имен:
Использование полей записи Паскаля в выражениях и условиях идентично использованию обычных переменных.
Операции над записями Паскаля (это важно!)
Единственная операция, которую можно произвести над однотипными записями Паскаля – это присваивание.
Все другие операции производятся над отдельными полями записи.
Пример решения задачи с использованием записей Паскаля
Рассмотрим для начала простейший пример заполнения записи Паскаля и вывода ее на экран.
Пусть нам необходимо заполнить сведения о студенте (Ф.И.О., дата рождения, адрес, курс и группа), а затем вывести эти сведения на экран.
Пример программы c записью Паскаля
А теперь слегка усложним задачу. Пусть нам необходимо иметь сведения о многих студентах, например, нашего факультета. Следовательно, необходимо организовать массив записей Паскаля. А затем из общего списка вывести фамилии студентов 2-го курса.
Пример программы c записью Паскаля
Оператор присоединения или как избавиться от префикса
Префикс – обязательная предшествующая часть составного идентификатора для имен полей в структуре типа запись Паскаля. Очень часто у программиста возникает желание не указывать префикс в имени полей, например, когда идет постоянное использование одних и тех же записей. В языке Паскаль предусмотрена такая возможность, реализуемая при помощи оператора присоединения, который в общем виде выглядит так:
with do ;
Следует обратить внимание на то, что после служебного слова do может стоять только один оператор, но он может быть составным (любая последовательность операторов, заключенная в операторные скобки begin end ).
Например, фрагмент из предыдущей программы с использованием оператора присоединения будет выглядеть так:
Пример фрагмента программы c записью и префиксом Паскаля
Программирование
Исходники Pascal (127)
Справочник
Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту
Record тип данных паскаль
В Паскале эта информация может храниться в одной переменной типа record (запись).
Задать тип можно следующим образом:
где record – служебное слово, а и — правильные идентификаторы языка Паскаль.
Описание анкеты студента в Паскале будет выглядеть так:
Пример фрагмента программы описания записи Паскаля
Type anketa=record
fio: string[45];
pol: char;
dat_r: string[8];
adres: string[50];
curs: 1..5;
grupp: string[3];
end;
Поля записи Паскаля могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево.
Поля
После того, как определен тип записи Паскаля, можно определять переменную этого типа. Переменная определяется путем задания ее идентификатора и указания типа.
var
student: anketa;
student1: anketa;
Теперь нам нужно узнать, как правильно получать доступ к элементам записи Паскаля.
Элементы записи называются полями , а обращение к ним производится через использование их имен – идентификаторов полей. Практически, поля записи обрабатываются точно так же, как и любые другие переменные. Но в отличие от обычной переменной имена полей должны предваряться ссылкой на идентификатор записи Паскаля и отделяться от него точкой.
Такая запись называется уточняющий идентификатор:
Чтобы обратиться к полю curs переменной student, необходимо указать следующее составное имя:
student.curs :=3;
Для того чтобы обратиться к полю pol в записи student1, , необходимо указать следующее составное имя:
student.pol :=’ж’;
Использование полей записи Паскаля в выражениях и условиях идентично использованию обычных переменных.
Пример решения задачи с использованием записи
Пример 1
Рассмотрим для начала простейший пример заполнения записи Паскаля и вывода ее на экран.
Н еобходимо заполнить сведения о студенте (Ф.И.О., дата рождения, адрес, курс и группа), а затем вывести эти сведения на экран.
Необходимо иметь сведения о многих студентах одного факультета. Следовательно, необходимо организовать массив записей Паскаля. А затем из общего списка вывести фамилии студентов 2-го курса.
program primer 2 ;
type anketa=record
fio: string[45];
dat_r: string[8];
adres: string[50];
curs: 1..5;
grupp: string[3]
end;
var student: array [1..100] of anketa; // переменная student — массив записей
I: integer;
begin
<последовательно вводим каждую запись>
for I:=1 to 100 do
begin
writeln (‘введите сведения о’, I , ‘-м студенте’);
writeln (‘введите фамилию, имя и отчество’);
readln (student[I].fio);
writeln (‘введите дату рождения’);
readln (student[I].dat_r);
writeln (‘введите адрес’);
readln(student[I].adres);
writeln (‘введите курс’);
readln(student[I].curs);
writeln (‘введите группу’);
readln (student[I].grupp);
end;
writeln (‘ввод закончен’);
writeln ;
<просматриваем массив записей и выбираем только студентов 2-го курса >
for I:=1 to 100 do
if student[I].curs=2 then
writeln(‘ фамилия студента : ’, student[I].fio);
end.
Оператор присоединения
Чтобы сделать обращение к полям записи более коротким используется оператор присоединения with , который в общем виде выглядит так:
Следует обратить внимание на то, что после служебного слова do может стоять только один оператор, но он может быть составным (любая последовательность операторов, заключенная в операторные скобки begin end ).
Например, фрагмент из предыдущей программы с использованием оператора присоединения будет выглядеть так:
Пример фрагмента программы c записью и префиксом Паскаля
for i :=1 to 100 do
with student [ i ] do
begin
writeln (‘введите сведения о’, I , ‘-м студенте’);
writeln (‘введите фамилию, имя и отчество’);
readln ( fio );
writeln (‘введите дату рождения’);
readln ( dat _ r );
writeln (‘введите адрес’);
readln ( adres );
writeln (‘введите курс’);
readln ( curs );
writeln (‘введите группу’);
readln ( grupp );
end ;
Н еобходимо иметь сведения о многих студентах одного факультета. Следовательно, необходимо организовать массив записей Паскаля. А затем из общего списка вывести фамилии студентов 2-го курса. Использовать оператор присоединения.
program primer 2 ;
type anketa=record
fio: string[45];
dat_r: string[8];
adres: string[50];
curs: 1..5;
grupp: string[3]
end;
var student: array [1..100] of anketa; // переменная student — массив записей
I: integer;
begin
<последовательно вводим каждую запись>
for i :=1 to 100 do
with student [ i ] do
begin
writeln (‘введите сведения о’, I , ‘-м студенте’);
writeln (‘введите фамилию, имя и отчество’);
readln ( fio );
writeln (‘введите дату рождения’);
readln ( dat _ r );
writeln (‘введите адрес’);
readln ( adres );
writeln (‘введите курс’);
readln ( curs );
writeln (‘введите группу’);
readln ( grupp );
end ;
writeln (‘ввод закончен’);
Задания
Необходимо заполнить сведения о студенте (Ф.И.О., дата рождения, адрес, курс и группа).
Вывести на экран:
- студентов с одного курса
- студентов одного года рождения
- студентов женского пола из одной группы
лабы по информатике, егэ
лабораторные работы и задачи по программированию и информатике, егэ по информатике
Pascal: Занятие № 13. Записи в Паскале
Записи в Паскале
Записи в Паскале – структурированный комбинированный тип данных. Запись состоит из определенного числа компонент, называемых полями, которые могут быть разного типа.
Описание записи в Паскале
Общий вид описания типа record в Паскаль:
var = record : ; : ; . end;
Рассмотрим примеры объявления и создания записи в Паскале.
type mydate = record month: 1..12; day: 1..31; year: integer end; var d: mydate;
В примере переменная mydate — запись, состоящая из трех полей: month , day и year . Каждое поле содержит соответственно данные: целое число в пределах от 1 до 12 — номер месяца (интервальный тип), целое число от 1 до 31 — число месяца (интервальный тип), целое число — год.
Обращение к полям записи
type mydate = record month: 1..12; day: 1..31; year: integer end; var d: mydate; begin d.day:=1; d.month:=12; readln(d.year); writeln(d.day,’/’,d.month,’/’,d.year); end.
Записи в виде двумерной таблицы
Часто записи используются в виде двумерной таблицы, каждый столбец которой имеет свой тип.
Таким образом, если описана двумерная таблица, то ее начальные значения задаются как вектор, каждый компонент которого является записью.
Рассмотрим пример использования записи-таблицы:
1 | 2 | 3 | |
---|---|---|---|
Day | 2 | 14 | 14 |
Month | 1 | 2 | 12 |
Year | 1985 | 1987 | 1989 |
Задать данные таблицы в виде записи. Объявить массив дней рождения и вывести дату первого дня рождения.
type zap1= record day:1..31; month: 1..12; year: 1900..2100; end; var birthdays:array[1..100] of zap1; begin birthdays[1].day:=2; birthdays[2].day:=14; birthdays[3].day:=14; birthdays[1].month:=1; birthdays[2].month:=2; birthdays[3].month:=12; birthdays[1].year:=1985; birthdays[2].year:=1987; birthdays[3].year:=1989; writeln(birthdays[1].day); end.
Использование конструкции with при работе с записями
При работе с записями есть возможность избавиться от постоянного префикса в виде обращения к названию переменной. Сравним два примера:
type zap1= record day:1..31; month: 1..12; year: 1900..2100; end; var my_birthday: zap1; begin my_birthday.day:=17; my_birthday.month:=4; my_birthday.year:=1993; . end.
type zap1= record day:1..31; month: 1..12; year: 1900..2100; end; var my_birthday: zap1; begin with my_birthday do begin day:= 17; month:= 3; year:= 2004; end; . end.
Во втором примере значительно проще обращаться к полям записи, избавившись от префикса, благодаря with
Записи при работе с файлами
type t_subscriber = record surname: string[20]; tel: LongInt; end; var subscriber: t_subscriber; f: file of t_subscriber; i: Integer; begin Assign(f,’notebook.dat’); Rewrite(f); for i:=1 to 5 do begin with subscriber do begin Write(‘Surname: ‘); ReadLn(surname); Write(‘Phone: ‘); ReadLn(tel); end; Write(f, subscriber); end; Close(f); end.
Рассмотрим пример последовательного доступа к типизированному файлу с использованием записей:
type t_subscriber = record surname: string[20]; tel: integer; end; var subscriber: t_subscriber; f: file of t_subscriber; s: string; begin Assign(f,’z:pascal.dat’); rewrite(f); subscriber.surname:=’ivanov’; subscriber.tel:=36233357; write(f,subscriber); subscriber.surname:=’petrov’; subscriber.tel:=236244475; write(f,subscriber); close(f); Reset(f); while not Eof(f) do begin Read(f, subscriber); with subscriber do begin Str(tel,s); if Copy(s,1,3) = ‘362’ then tel := tel+2000000; end; Seek(f,FilePos(f)-1); // возврат указателя назад Write(f,subscriber); Writeln(subscriber.surname, ‘ ‘,subscriber.tel); end; Close(f); end.
Множества в Паскале
Множества в Паскале — это некоторое собрание элементов, одно и того же базового типа.
В качестве базового типа может выступать любой простой порядковый тип. Базовым типом не могут быть вещественные числа (real не порядковый тип) и строки (не простой и не порядковый тип).
Размер множества в Turbo Pascal всегда ограничен некоторым предельно допустимым количеством элементов. Во множествах допускаются только такие элементы, порядковые значения которых не выходят за границы 0..255. В Turbo Pascal в целочисленных множествах могут присутствовать только числа от 0 до 255.
Отрицательные элементы множеств в Turbo Pascal не допускаются. Поэтому базовыми типами не могут быть типы shortint, integer, longint.
Таким образом, если необходимо множество целочисленных объектов, то базовый тип для Turbo Pascal должен быть объявлен как диапазон типа byte . Для множеств, содержащих символы, базовым типом должен быть тип char .
type week_days = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); var work_days: set of week_days; begin work_days:=[Mon, Wed, Thu]; end.
Из примера видно, что множества (тип set ) задаются путем перечисления значений, разделенных запятыми и заключенных в квадратные скобки.
Синтаксис:
name_set:=[expr1, expr2, … exprn];
type letters = set of char; var ch1,ch2:letters; .
Переменные ch1 и ch2 из примера также не могут быть выведены на экран и их значения не могут быть запрошены при помощи оператора read .
Возникает логичный вопрос: как же тогда работать с множествами в Паскале?
Чтобы ответить на данный вопрос, сначала рассмотрим операции, выполняемые над множествами.
Действия над множествами
Объединение двух множеств A и B ( A + B ) – это новое множество, состоящее из элементов, принадлежащих множеству A или B либо тому и другому одновременно
Пример:
Пересечение двух множеств A и B ( A * B ) – это множество, состоящее из элементов, одновременно принадлежащих множествам A и B .
Пример:
var ch1, ch2, ch3: set of char; begin ch1:=[‘a’, ‘b’, ‘d’]; ch2:=[‘m’, ‘d’, ‘e’]; ch3:=ch1 * ch2; <Результат: ch3 = ['d'] >end.
Разность двух множеств A и B ( A – B ) – это новое множество, состоящее из элементов множества A , не вошедших в множество B .
Пример:
var ch1, ch2, ch3: set of char; begin ch1 := [‘a’, ‘e’, ‘t’]; ch2 := ch1 – [‘e’]; < ['a', 't'] >ch3 := [‘m’, ‘n’, ‘t’] – ch2; < ['m', 'n'] >end.
Множества и операция IN в Паскале
Операция in необходима для поиска определенного элемента в величине типа set , т.е. в множестве.
Так, если x есть элемент множества a , то ( x in a ) дает true .
type week_days=(Mon, Tue, Wed, Thu, Fri); var work_days: set of week_days; begin work_days:=[Mon, Wed]; if Mon in work_days then writeln (‘понедельник — рабочий день’) else writeln (‘понедельник — не рабочий день’) end.
var work_days,days_off: set of byte; begin work_days:=[1, 2]; days_off:=[6, 7]; if 1 in work_days then writeln (‘понедельник — рабочий день’) else writeln (‘понедельник — не рабочий день’); if 6 in days_off then writeln (‘суббота — выходной день’) else writeln (‘суббота — не выходной день’); end.
var voron, vorona, voroni: set of byte; number:integer; begin voron:=[5,6,7,8,9,10]; vorona:=[1]; voroni:=[2,3,4]; writeln (‘введите количество ворон’); readln(number); if number in voron then writeln (‘на ветке ‘, number,’ ворон’); if number in vorona then writeln (‘на ветке ‘, number,’ ворона’); if number in voroni then writeln (‘на ветке ‘, number,’ вороны’) end.
var m : set of char; s : string; i : byte; begin write(‘строка: ‘); readln(s); m :=[]; i := 1; while i
Posted in
<Для любого количества ворон:>
var
vorona, voroni: set of byte;
number: integer;
x: string;
begin
vorona := [1];
voroni := [2, 3, 4];
x := »;
writeln(‘введите количество ворон’);
readln(number);
if (number mod 100 14) then
if number mod 10 in vorona then
x := ‘а’
else if number mod 10 in voroni then
x := ‘ы’;
writeln(‘на ветке ‘, number, ‘ ворон’ + x)
end.