Тема 5. Записи. Раздел 4.











![Пример описания • Var Personal_Computer: Record Processor: String[20]; Freq, Ram: Word; Пример описания • Var Personal_Computer: Record Processor: String[20]; Freq, Ram: Word;](https://present5.com/presentation/3/38947845_221026167.pdf-img/38947845_221026167.pdf-12.jpg)




![Пример: {Описание типа данных} Type Pc_Type=Record Processor: String[20]; Freq: Word; Пример: {Описание типа данных} Type Pc_Type=Record Processor: String[20]; Freq: Word;](https://present5.com/presentation/3/38947845_221026167.pdf-img/38947845_221026167.pdf-17.jpg)



























Тема 5. Записи. Раздел 4. 3. Стр. 60 -64.
Эпиграф • Кто отказался от излишеств, тот избавился от лишений. Кант (22. 04. 1724 – 12. 02. 1804)
5. 1. Назначение • Записи предназначены для хранения разнородной информации о каком-либо объекте. Это могут быть технические характеристики некоторого устройства, экономические данные предприятия или сведения о человеке. • Записи применяются при создании баз данных (БД).
5. 2. Определение • Запись ( или комбинированный тип данных) представляет собой структурированную переменную. • Она может содержать элементы различных типов. • Входящие в состав записи элементы называются полями и имеют свои имена.
5. 3. Описание • Запись, содержит зарезервированные слова Record и End. • Объявление записи в программе: Var Имя записи : Record Имя первого поля: <тип>; Имя второго поля: <тип>; . Имя последнего поля: <тип> End;
Описание (продолжение). • После зарезервированного слова Record точка с запятой не ставится. • Описания отдельных полей (или групп полей, принадлежащих одному типу) завершаются точкой с запятой (кроме последнего поля перед служебным словом End).
Описание (продолжение). • Описания полей записи похожи на описания обычных переменных. • Поля могут принадлежать любым типам - как простым, так и структурированным, как стандартным, так и определенным пользователем. • Например, допустимы записи, поля которых представляют собой также записи или, например, массивы.
Описание (продолжение). • Количество полей в записи фиксировано и определяется описанием записи. • Имена полей в пределах записи не должны повторяться.
Описание (продолжение). • Если в программе объявлено несколько комбинированных типов, имена полей, принадлежащих разным типам, могут совпадать: конфликта имен при этом не будет, поскольку обращение к отдельным полям производится с указанием имени записи.
Описание (продолжение). • Как и с другими идентификаторами в программах на Turbo Pascal, следует стремится, чтобы имена полей соответствовали смыслу информации в том или ином поле. • А информация, в свою очередь, должна соответствовать типу своего поля.
5. 4. Пример хранения информации • Характеристики ПК: тип процессора; тактовая частота процессора (МГц); размер оперативной памяти (Мб); гарантия (количество лет); тип монитора; размер экрана (дюйм); размер зерна (мм);
Пример описания • Var Personal_Computer: Record Processor: String[20]; Freq, Ram: Word; Garantee: Byte; Monitor: String[20]; Display. Size: Byte; Pixel: Single; End;
5. 5. Обращение к полю записи • Для того, чтобы в программе обратиться к отдельному полю записи, необходимо указать: - имя записи, - точку, - имя поля.
Пример содержания записи § Если в структуру Personal_Computer необходимо записать следующую информацию: – процессор Pentium II c тактовой частотой 400 МГц; – размер оперативной памяти 64 Мб; – гарантия 2 года; – монитор Hyundai с экраном 15 дюймов при размере зерна 0. 28 мм;
Ввод в в структуру Personal_Computer данных Personal_Computer. Processor: ='Pentium II'; Personal_Computer. Freq: =400; Personal_Computer. Ram: =64; Personal_Computer. Garantee: =2; Personal_Computer. Monitor: ='Hyundai'; Personal_Computer. Display. Size: =15; Personal_Computer. Pixel: =0. 28;
Запись – типизированная константа • Для задания начальных значений полей, записи можно объявлять как типизированные константы. • При этом сначала описывается тип данных, а потом значения полей записи.
Пример: {Описание типа данных} Type Pc_Type=Record Processor: String[20]; Freq: Word; Ram: Word; Garantee: Byte; Monitor: String[20]; Display. Size: Byte; Pixel: Single; End;
Пример (продолжение): {Описание константы}: Const Personal_Computer 1: Pc_Type = (Processor: 'AMDK 6'; Freq: 266; Ram: 64; Garantee: 2; Monitor: 'Hyundai'; Display. Size: 14; Pixel: 0. 28);
5. 6. Оператор With • Указывать имя записи перед обращением к каждому ее полю неудобно, особенно если оно состоит из большого числа символов. • В Turbo. Pascal используется групповой оператор With имя записи Do оператор, позволяющий в операторе, который, как правило, бывает составным, указывать только имена полей.
Оператор With имеет вид: With P Do S; Слова With и Do имеют смысл с и выполнить соответственно. Идентификатор P – имя переменной комбинированного типа. Идентификатор S – оператор (часто составной).
Оператор With (продолжение) • Слова With и Do являются зарезервированными. • Имя записи указывается один раз после слова With.
5. 7. Пример оператора With Personal_Computer Do Begin Processor: ='Pentium II'; Freq: =400; Ram: =64; Garantee: =2; Monitor: ='Hyundai'; Display. Size: =15; Pixel: =0. 28; End;
Замечание. • В примере имя переменной Personal_Computer употребляется всего один раз – после оператора With. • Затем все действия над полями (в составном операторе) выполняются только с указанием имен полей. • Следовательно, оператор With особенно полезен, когда обрабатывается несколько полей одной переменной комбинированного типа.
5. 8. Вложенные записи. • Возможно существование записей, отдельные поля которых представляют собой также записи. • Составные имена, с помощью которых можно обращаться к полям вложенных записей, должны включать: - имя основной записи; - имя вложенной записи; - имя поля.
5. 9. Записи с вариантами. • В состав записи может входить только одно поле, к которому допускается обращение как к переменным разных типов. • Такое поле называется вариантным и начинается с зарезервированных слов Case и Of, между которыми указывается имя порядкового типа.
Записи с вариантами (продолжение) • Для указания варианта формально записывается константа того же типа, но ее значение на выбор варианта не влияет. • Вариант типа данных определяется по имени поля, поэтому эти имена должны быть различными.
Записи с вариантами (продолжение) • Объявленный ниже тип Char_to_Sym соответствует записи, имеющей поле, к которому можно обращаться как к переменной типа Char или как к переменной типа Byte. • Такую запись можно использовать для определения кода символа или получения символа по его коду.
Пример программы Программа 4. 4. {Раздел описаний} Type Char_to_Sym=Record case Byte of 1: (_Char: Char); 2: (_Byte: Byte); End; Var symbol_code: Char_to_Sym;
Begin With symbol_code Do Begin {Ввод символа} Write('Введите символ '); Readln(_Char); {Вывод его кода} Writeln('Его код = ', _Byte); {Ввод кода} Write('Введите код символа '); Readln(_Byte); {Вывод соответствующего ему символа} Writeln('Символ ', _Char); End.
Замечание • В приведенном примере в состав записи входит единственное поле, являющееся вариантным. • Если число полей больше одного, вариантное поле при объявлении записи обязательно указывается последним среди всех полей.
5. 10. Применимые операции. • 5. 10. 1. Действия над полями записи. • 5. 10. 2. Действия над записями.
5. 10. 1. Действия над полями записи. • Поле записи представляет собой переменную, которую можно использовать в выражениях. (Чтобы обратиться к полю записи достаточно указать имя записи и имя поля. ) • Набор операций над полями записи соответствует операциям, допустимым для типа, которому принадлежит данное поле.
5. 10. 2. Действия над записями. 1. Оператор With – оператор над записями, который позволяет не упоминать имя записи в идентификаторе каждого ее поля. 2. Оператор присваивания. Значения переменных, принадлежащих комбинированному типу, можно присваивать другим переменным того же типа. Например, если X и Y – записи одного типа, то допустимо: X: =Y;
Действия над записями. (Продолжение) • Нельзя использовать с записями операции сравнения. Например, оператор While X=Y Do … применять НЕЛЬЗЯ. • Однако, если такая необходимость существует, можно сравнить по очереди каждое поле одной записи с полями другой.
Действия над записями. (Продолжение) • Нельзя применять к записям в целом операции: - арифметические; - логические.
Действия над записями. (Продолжение) • Нельзя применять стандартные процедуры ввода-вывода Read и Write к записям (как и к массивам в целом). • Можно организовать ввод или вывод на экран каждого поля записи в отдельности.
Пример программы работы с массивом записей. • Раздел описаний Uses CRT; Type Pupil= Record Fam, Name: String[10]; KR 1, KR 2: Byte End; Var IIKT: Array[1. . 30] Of Pupil; U: Pupil; i, j, n: Integer;
Begin {Ввод данных} Clr. Scr; Write. Ln('Введите количество учеников'); Read. Ln(n); For i: =1 To n Do With IIKT[i] Do Begin Write. Ln('Введите фамилию'); Read. Ln(Fam); Write. Ln('Введите имя'); Read. Ln(Name); Write. Ln('Введите оценку за КР 1'); Read. Ln(KR 1); Write. Ln('Введите оценку за КР 2'); Read. Ln(KR 2); End;
Сортировка массива записей • {Сортировка по полю фамилия} For i: =1 To n-1 Do For j: =1 To n-i Do If IIKT[j]. Fam>IIKT[j+1]. Fam Then Begin U: =IIKT[j]; IIKT[j]: =IIKT[j+1]; IIKT[j+1]: =U; End;
{Вывод таблицы результатов} Clr. Scr; Write. Ln('Таблица успеваемости': 20); Write. Ln('Фамилия': 10, 'Имя': 10, 'Средний балл': 15); Write. Ln; For i: =1 To n Do With IIKT[i] Do Write. Ln(Fam: 10, Name: 10, (KR 1+KR 2)/2: 6: 1); Read. Ln; End.
Ввод данных в программу:
Результат выполнения программы:
Выводы: 1. Записи предназначены для ввода, хранения и обработки информации, состоящей из элементов с разными типами данных. Зарезервированные слова-Record-End. 2. Элементы записи называются полями. Каждое поле имеет имя, тип данных и размер.
Выводы (продолжение): 3. Для работы с записью целиком используются только два оператора: - оператор над записями (With); - оператор присваивания (: =); 4. Обычно в программах обрабатываются не одиночные записи, а массивы, которые представляют собой базы данных (БД).

