- •Начальные сведения
- •Алфавит
- •Лексемы, разделители и комментарии
- •Форма Бэкуса-Наура
- •Структура программы на Паскале
- •Типы данных
- •Базовые возможности Паскаля
- •Стандартные типы данных
- •Константы
- •Конструирование типов
- •Перечисления
- •Диапазоны (интервалы)
- •Массивы
- •Описание переменных и типов данных
- •Var a,b,c: Real; {описаны переменные вещественного типа}
- •I,j,k,l,m,n:Integer; {описаны переменные целого типа}
- •Оператор присваивания
- •Условные операторы
- •Оператор If
- •Оператор Case
- •Операторы цикла
- •Цикл While
- •Цикл Repeat-Until
- •Цикл For
- •Оператор безусловного перехода и метки
- •Пустой оператор
- •1: End; {конец тела цикла с помеченным пустым оператором}
- •Процедуры и функции
- •Описание
- •Список формальных параметров
- •Вызов процедур и функций
- •Локализация (области видимости) имен. Глобальные и локальные объявления.
- •Статическое и динамическое выделение памяти переменным
- •Рекурсия и опережающее описание
- •Стандартные функции
- •Стандартные процедуры
- •Стандартный ввод-вывод
- •Сложные типы данных и их использование
- •Квалификаторы
- •Конструкция записи, тип записи и переменная типа запись
- •Id:Person; {личные данные}
- •Id:Person; {личные данные}
- •Index: Ch; {Название/номер группы}
- •Использование записей в программе
- •Оператор With
- •Записи с вариантными полями
- •0:(I:Integer) {Два байта как одно поле Integer}
- •1:(Lo,hi:Char); {отдельно младш. И старш. Байты}
- •Var e: Integer; {в этой переменной будем менять байты}
- •Указатели и динамические структуры данных
- •Определение и описание
- •I:integer; {Информационное поле}
- •Var p,q:Point; {переменные-указатели на записи типа Rec}
- •Использование указателей и динамических переменных
- •Создание и уничтожение динамических переменных
- •Простейшие динамические структуры
- •Множества
- •Назначение и описание
- •Константы типа множество
- •Операции с множествами
- •Назначение и описание
- •Работа с файлами
- •Файлы типа Text
Id:Person; {личные данные}
ListNo, {номер по списку}
YearOfStudy,{год обучения (курс)}
YearOfEntry:Integer; {год поступления}
Scholarship,{стипендия}
MilitaryTraining, {военная подготовка}
Hostel: Boolean {общежитие}
End;
TeacherR=Record {данные о преподавателе}
Id:Person; {личные данные}
Faculty, {факультет}
Department: Ch {кафедра}
End;
GroupR=Record {Данные по группе}
Index: Ch; {Название/номер группы}
Curator: TeacherR; {Куратор группы}
Student: Array[1..30] of StudentR; {массив записей о студентах}
End;
Var AcademicGroup: Array [1..40] of GroupR; {массив академических групп}
Teacher: Array[1..60] of TeacherR; {массив преподавателей}
Dean:TeacherR; {декан}
Использование записей в программе
Можно обратиться ко всей записи по ее имени, если запись является самостоятельной переменной или частью другой переменной сложного типа. Можно обратиться к отдельному полю записи (которое может быть переменной простого или сложного типа, или указателем). Для обращения к полю нужно использовать квалификатор доступа к полю, который состоит из точки и имени поля. Такой квалификатор записывается после имени записи, или после квалификатора, выделяющего запись из другого сложного типа.
Следующий пример основан на описаниях предыдущего примера.
Dean
Обращение к записи, содержащей сведения о декане.
Dean.Faculty
Обращение к полю "Факультет" записи "Декан".
AcademicGroup[2]
Обращение ко второму элементу в массиве академических групп. Каждый такой элемент является записью.
AcademicGroup[2].Curator
Обращение к полю второй группы, содержащему запись о кураторе.
AcademicGroup[2].Curator.ID.Surname
Обращение к полю, содержащему фамилию куратора второй группы.
AcademicGroup[2].Student[1]
Обращение к записи о первом студенте во второй группе.
AcademicGroup[2].Student[1].Hostel
Обращение к полю записи о первом студенте второй группы, содержащему признак того, живет ли этот студент в общежитии.
AcademicGroup[2].Student[1].ID
Обращение к записи, содержащей персональные сведения о студенте.
AcademicGroup[2].Student[1].ID.Age
Обращение к полю, содержащему возраст первого студента второй группы.
AcademicGroup[2].Student[1].ID.Surname[1]
Обращение к первой букве фамилии первого студента второй группы.
Оператор With
Этот оператор облегчает работу с записями при необходимости многократного обращения к полям одной и той же записи.
Синтаксис:
оператор::="With" <запись> "do" <оператор>.
Здесь запись – любая запись, заданная своим именем, или выделенная из другой сложной переменной квалификатором. В операторе, который может быть составным, при обращении к полям записи уже не нужно повторять обращение к самой записи. Достаточно указать нужное поле.
Следует учитывать, что при использовании операторов With, в частности, вложенных, может возникнуть неоднозначность, если имя поля совпадает с именем простой переменной, а при использовании вложенных операторов With может возникнуть неоднозначность, вызванная тем, что разные записи могут иметь поля с одинаковыми именами. Такие неоднозначности выявляются компилятором. Их следует исключить.
Следующий пример также основан на описаниях записей, сделанных ранее. Здесь назначается куратор группы из списка преподавателей и возраст студентов группы увеличивается на 1.
With AcademicGroup[2] do begin {работа с выделенной записью}
Curator:=Teacher[4]; {четвертый преподаватель назначается куратором второй группы}
for i:=1 to 30 do
With Student[i].ID do {выделена запись личных данных}
Age:=Age+1 {работа с полем возраста}
end;