
- •Лекция 1. Основы языков программирования.
- •Лекция 2. Способы записи алгоритмов.
- •Лекция 3. Знакомство с языком Паскаль.
- •Лекция 4. Структура программы на языке Паскаль.
- •Лекция 5. Стандартные типы данных.
- •5.1 Целые типы
- •5.2 Вещественные типы
- •5.3 Символьный тип.
- •5.4 Ограничительные типы.
- •5.5 Перечислимые типы.
- •Л.6. Операторы языка Паскаль Ввод исходных данных.
- •Расчет.
- •Стандартные функции Турбо Паскаля
- •Стандартные процедуры
- •Константы
- •Вывод результатов
- •Лекция 7. Операторы условий if, case
- •7.1 Оператор безусловного перехода
- •7.2 Условный оператор
- •7.3 Оператор варианта
- •Лекция 8. Операторы цикла for, while, repeat
- •8.1 Оператор цикла с предусловием.
- •8.2 Оператор цикла с постусловием.
- •8.3 Оператор цикла с параметром.
- •Лекция 9. Одномерные и двумерные массивы.
- •Работа с массивами
- •Инициализация элементов массива
- •Лекция 10. Процедуры и функции в Паскаль.
- •Лекция 11. Параметры в процедурах.
- •11.1 Механизм параметров.
- •11.2. Параметры - значения.
- •11.3. Параметры - переменные.
- •11.4. Безтиповые параметры.
- •Лекция 12. Типы данных, определяемые пользователем. Записи.
- •Лекция 13. Работа с файлами. Обработка ошибок в Паскаль.
- •13.1 Файловые типы
- •13.2 Операции ввода-вывода Write, Read
- •13.3. Перемещение по файлу.
- •13.4 Обработка ошибок ввода - вывода
- •13.5 Текстовые файлы
- •13.6 Файлы без типа.
- •Лекция 14. Модули и внешние файлы в Паскаль.
- •15.1. Компиляция и использование модулей
- •15.2. Компиляция и поиск модулей.
- •15.3. Стандартные модули
- •Лекция 15. Динамические структуры данных.
- •15.1 Ссылочные типы и указатели.
- •15.2 Статические переменные.
- •15.3. Создание и удаление динамических переменных.
- •15.4. Установка размеров динамической памяти.
- •Лекция.16. Графические возможности языка Паскаль.
- •Лекция17. Практическое применение языка Паскаль в решении технологических и экологических задач
Лекция 12. Типы данных, определяемые пользователем. Записи.
Наряду с разделами описания переменных, констант, процедур и функций, в программе или в каком-либо ее блоке может присутствовать раздел описания типов. Начинается зарезервированным словом Type и имеет следующий
вид:
Type
Type1_ID = Type_description;
где Type1_ID – идентификатор типа, определяемый пользователем, а Type_description – представляет собой описание соответствующего типа.
Type
Index = 1..100;
List121 = array[0..120] of Word;
List121by8 = array [1..8] of List121;
PersonData = record
Name, firstName: string [40];
Age: Word;
Married: boolean;
IQ: (High, medium, low, to_be_neglected);
End;
В этом примере программист сам определяет свои собственные типы: Index – интервал целочисленных значений от 1 до 100, List121 – массив из 121 значения типа Word, List121by8 – двумерный массив, представляющий собой таблицу 121х8, PersonData – тип запись. Далее идентификаторы типов можно использовать для описания переменных в разделе Var.
Var
In1, In2: Index;
Data: List121;
Ivanoff, Petroff: PersonData;
Записи
Комбинированные типы, как и регулярные типы, представляют собой правило формирования составных типов. В отличие от массивов, записи позволяют объединять значения различных типов и поэтому являются наиболее гибким механизмом построения данных.
Необходимо описать атрибуты (характеристики) некоторого объекта, представляемого и обрабатываемого в программе. Во всех подобных ситуациях атрибуты объекта представляются значениями различных типов и поэтому для их описания не могут быть использованы массивы. Для описания объекта 'студент' могут понадобиться следующие характеристики:
Фамилия, имя и отчество (символьные массивы или строки).
Пол (перечислимый тип из двух значений).
Индекс специальности (целое).
Описание комбинированного типа представляет собой список описаний его элементов (которые называются также полями записи); каждое описание похоже на описание простой переменной. Список полей начинается служебным символом record и завершается end.
Type
Person = record
Name, secondName, SurName: string[20];
Sex: (mole, Femole);
Speciality :word;
End;
Структура записи состоит из фиксированного числа компонент (полей), каждое из которых имеет собственное (уникальное в пределах записи) имя и произвольный тип.
Var
Sasha, Masha:Parson;
Доступ к элементам (полям) записей производится с помощью конструкции, называемой селектор записи и имеющий следующий вид: R.F, где R - переменная комбинированного типа, F - идентификатор поля. Допустимы следующие конструкции:
Sasha.Name:= 'Александр';
Masha.Name :='Мария';
Sasha.Sex := 'Male';
Masha.Sex := 'female';
Masha.Speciality := Sasha.Speciality;
Комбинированные типы можно использовать для построения более сложных структур, например, массивов, состоящих из записей. Первый случай:
Var
Group : array [1..10] of person;
DataBase : file of person;
Для переменной Group доступ к полям записей, составляющих этот массив, производится следующим образом:
Group[i].Sex:=Female;
If Group[j].Name = 'Борис' then
Writeln(Group[j].SurName);
Второй случай: пусть для комбинированного типа Person необходимо хранить информацию о дате рождения.
Type
Date = record
Month : (Jan, Feb, Mar, Apr,…);
Day : 1..31;
Year :1900..2000;
End;
К записи Person добавляем
…..
BirthDay : Date;
End;
Доступ к полям из элемента BirthDay производится по общим правилам, например:
Sasha.BirthDay.Year : = 1970;
Masha.BirthDay.Month : = Feb;
При записи селектора необходимо помнить, что слева от символа 'точка' всегда должна находиться переменная типа запись (Sasha.BirthDay), а справа идентификатор поля этой записи. Пример использования записей в математике - комплексные числа.
Type
Comptex = record
Re, Im : real;
End;
Далее можно определить операции над комплексными числами (сложение, умножение, деление).
Procedure Addc(c1, c2 :complex; var R : complex);
Записи с вариантами.
Часто необходимо в пределах одной записи иметь различную информацию в зависимости от конкретного значения некоторого поля.
Рассмотрим тип Person, если в поле Sex (пол) имеет значение Male (мужской), то пусть необходимо предусмотреть такие поля:
Время очередных военных сборов.
Курит или нет.
Если поле содержит Famale (женский), то хотелось бы знать цвет глаз. Это можно было бы определить двумя отдельными комбинированными типами. Однако это сильно затруднит программирование. Любой комбинированный тип, помимо фиксированного списка полей, может содержать вариантную часть, предполагающую определение нескольких вариантов структуры этого типа. Различие может касаться как числа компонент, так и их типа.
Вариантная часть содержит несколько альтернатив в каждой из которых в круглых скобках задается список полей, присущих данному варианту. Списку предшествует метка, являющаяся конкретным значением поля, которое является критерием выбора.
Type
Person Sex = (Mole, Famole);
Person = record
Name : string[20];
Speciality : Word;
BirthDay : Date;
Case Sex : personSex of
Mole : (Army : date; Smoking : boolean);
Femole : (EyesColor : (Blue, Brown, …));
End;
В определении комбинированного типа может быть только одна вариантная часть и она должна быть задана в конце записи.
Альтернативы вариантной части помечаются допустимыми значениями поля Sex; определение этого поля вынесено из фиксированной части и помещено в заголовке вариантной части (поле - дискриминант).
Идентификаторы полей во всех вариантах должны быть различны и отличаться от идентификаторов полей фиксированной части.
Для некоторых значений поля - дискриминанта вариант может отсутствовать. Тогда после двоеточия может стоять пустой список всегда ().
Следует также помнить, что Pascal не содержит никаких средств контроля за правильностью работы с вариантами записей