Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Структурированный тип данных – записи
Записи Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быт различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются. Структура объявления записи такова: <имя типа>= record <список полей> end; Здесь <имя типа> – правильный идентификатор; record, end – зарезервированные слова; <список полей> – список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой. Каждый раздел записи состоит из одного или нескольких идентификаторов полей, отделяемых друг от друга запятыми. За идентификатором (идентификаторами) ставится двоеточие и описание типа поля (полей), например:
Type Birthday=record day, month: byte; year: word; end; var a,b: Birthday; ...
В этом примере тип Birthday (день рождения) содержит три поля с именами day, month и year (день, месяц и год); переменные a, b сидержат записи типа Birthday. Как и в массиве, значения переменных типа запись можно присваивать другим переменным того же типа, например A:=b; К каждому из компонентов записи можно получить доступ, если использовать составное имя, т.е. указать имя переменной, затем точку и имя поля:
a.day:=27; b.year:=1939;
Для вложенных полей приходится продолжать уточнения:
var c: record name: string; bd: Birthday; end; ... if c.bd.year=1939 then...
Оператор WITH Если в программе содержится большое число обращений к компонентам записи (полям), то указание имени записи и имени поля с помощью сочленяющей точки будет громоздким. Для упрощения вводится оператор WITH - присоединение. Его еще называют оператором над записями. Общая форма
WITH имя переменной-записи DO оператор
Тогда в операторе или составном операторе следующем за DO имя переменной записи можно опускать, а использовать только имя поля. Пример обращения к полям:
gl.price:= 200; with gl do begin price:= 200; number:= 10 end;
Оператор with удобнее использовать, если требуется обращаться к нескольким полям одной и той же записи. Пример. Сведения о товарах на складе хранятся в текстовом файле. Для каждогс товара отводится одна строка, в первых 20 позициях которой записано наименование товара, а затем через произвольное количество пробелов его цена и количе ство единиц. Программа по запросу выдает сведения о товаре или сообщение о тол что товар не найден.
program store; const Max_n = 100; type str20 = string [20]; goods = record name: str20; price: real; number: integer; end; var stock: array[l..Max_n] of goods; i, j, len: integer; name: str20; found: boolean; count: integer; begin write('Введите количество товаров: '); readln(count); for i:=1 to count do begin writeln(‘Введите в отдельных строках наимен., цену и кол-во’); with stock[i] do readln(name, price, number); … end.
Рассмотрим пример программы с использованием массива структур. В ведомости, содержащей фамилии группы студентов, оценки по физике, математике и программированию определить средний балл каждого студента и средний балл в группе. В программе использованы следующие обозначения: n1 – максимальное количество студентов в группе; n – реальное количество студентов в группе; student – идентификатор типа, представляющий запись с полями fam, fiz, mat, pr и ss; fam – поле записи, содержащее фамилию студента; fiz, mat, pr – поле записи, содержащее оценки по физике, математике и программированию соответственно; ss – поле записи, содержащее средний балл студента; ved – массив, содержащий элементы типа student; sg – средний балл группы; i – индекс элемента массива ved; Программа выглядит следующим образом: program stud; const n1=30; type student=record fam:string[10]; fiz,mat,pr:integer; ss:real; end; var ved:array[1..n1] of student; i,n:integer; sg:real; begin writeln('сколько студентов в группе?'); read(n); for i:=1 to n do with ved[i] do begin writeln('введите фамилию студента'); read(fam); writeln('введите оценки'); read(fiz,mat,pr) end; sg:=0; for i:=1 to n do with ved[i] do begin ss:=(fiz+mat+pr)/3; {вычисление среднего балла студента} sg:=sg+ss; end; sg:=sg/n;{вычисление среднего балла группы} writeln('ведомость группы'); write('! фамилия! физика! матем! прогр!'); writeln('! cp. балл!') for i:=1 to n do with ved[i] do begin write('!',fam:10,'!',fiz:10,'!',mat:10,'!',pr:10); writeln('!',ss:10:2,'!'); end; writeln('средний балл в группе =',sg); end. Иногда бывает необходимо иметь в программе несколько родственных, но не совсем идентичных записей. Такая необходимость возникает, например, для программы, которая обрабатывает информацию о человеке и тогда, в зависимости от значения поля sex (мужской или женский), появляются поля: · время прохождения очередных военных сборов;
· род войск, в которых проходил военный сбор; или же: · любимые цветы. Для таких случаев в Турбо-Паскале предусмотрены записи с вариантами. Такие записи содержат фиксированную и вариантную часть, которая начинается с ключевого слова case. Рассмотрим пример: type personsex=(male,female); person = record name,secondname,surname: string[20]; birthday: date; case sex: personsex of male: (army1: date; army2: string[20]); female: (flower: srting[20]); end; Следует отметить, что вариантная часть всегда располагается после фиксированной части, а отводимая память вычисляется по самому большому варианту, т.е. различные варианты одной записи как бы "накладываются" друг на друга.
|
||||||
Последнее изменение этой страницы: 2017-02-19; просмотров: 286; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.197.123 (0.014 с.) |