- •Федеральное агенство по образованию российской федерации
- •1. Основные категории и понятия информатики
- •Предмет информатики как науки
- •1.2. Информация: структура, форма, измерение
- •2. Техническое и программное обеспечение пэвм
- •2.1. Структура аппаратных средств пэвм
- •2.2. Программное обеспечение пэвм
- •3. Основы алгоритмизации
- •Этапы разработки программ
- •3.2.Формы представления алгоритмов
- •Действие 1
- •Действие 2
- •Классификация и примеры алгоритмических структур
- •3.2.1. Алгоритм линейной структуры.
- •3.2.2. Алгоритм разветвляющейся структуры.
- •Да нет да да Рис 3.11
- •3.2.3. Алгоритмы циклической структуры.
- •4.2. Структура программы на языке Паскаль
- •4.3. Скалярные стандартные типы данных
- •4.4. Скалярные, пользовательские типы данных
- •5. Структурные типы данных
- •Массивы
- •5.3. Записи
- •5.4. Записи с вариантами
- •Множества
- •5.6.Файлы
- •6. Операции над данными скалярных типов. Выражения
- •7. Операторы языка Паскаль
- •7.1. Простые операторы
- •7.2. Структурные операторы
- •Оператор 2
- •8. Примеры программ на языке Паскаль
- •8.1. Пример 1. Арифметические выражения. Оператор присваивания
- •Пример 2. Условные операторы
- •Ввод чисел х, а
- •8.3. Пример 3. Программа обработки одномерного массива
- •8.4. Пример 4. Программа обработки двумерного массива
- •True False True False False
- •8.5. Пример 5. Программа обработки символьных строк
- •8.6. Пример 6. Программа обработки двумерного массива с вводом элементов матрицы из текстового файла
- •9.Разработка программ сложной структуры
- •9.1. Процедуры и функции
- •9.2. Область действия идентификаторов при использовании процедур и функций. Локальные и глобальные переменные
- •9.3. Передача данных в подпрограмму с помощью параметров. Формальные и фактические параметры
- •9.4. Использование процедур и функций
- •True False Рис. 9.4
- •9.5. Массивы – параметры процедур и функций
- •True False True False Рис. 9.7
- •True False True False True False Рис 9.9
- •9.6. Рекурсивные процедуры и функции
- •True False Рис. 9.10 True False
- •True False Рис. 9.12
- •9.7. Модули
- •10. Динамические структуры данных
- •Основные определения
- •10.2. Объявление и создание динамических структур данных. Указатели
- •Операции над указателями
- •Программа создания и обработки линейного списка
- •Приложение. Контрольные вопросы
- •Литература
5.3. Записи
Запись – это составная структура данных, объединяющая в единое целое фиксированное количество компонент различных типов. Компоненты записи называются полями.
Переменная типа «запись» объявляется в разделе Varс помощью ключевого словаrecordследующим образом:
Var<имя переменной>:record
<поле 1>: <тип 1>;
<поле 2>: <тип 2>;
……
<поле n>: <типn>;
end;
Ключевое слово «end» завершает объявление переменной типа «запись».
Количество полей записи может быть любым. Поля записи могут быть простыми переменными любого типа, массивами и другими записями. В разделе описания типов можно объявить имя типа «запись»:
Type <имя типа> = record
<поле 1>: <тип 1>;
<поле 2>: <тип 2>;
……
<поле n>: <типn>;
end;
Тогда объявление переменной типа «запись» будет иметь следующий вид:
Var<имя переменной>: <имя типа «запись»>;
Например,
Type Tstudent = record
FAM: string[20]; {фамилия}
IM: string[20]; {имя}
OT: string[30]; {отчество}
GR: integer; {год рождения}
NZACH: integer; {номер зачетки}
NGR: string[30]; {номер группы}
end;
Var Zap_St: Tstudent;
Доступ к элементам (полям) записи производится с помощью составного имени:
<имя переменной типа «запись»>.<имя поля>.
Например,
Zap_St.FAM:=’Иванов’; или
Readln(Zap_St.FAM);
Для того, чтобы не писать имя переменной типа «запись» при каждом обращении к ее полям, можно использовать оператор with, называемый оператором присоединения, который имеет следующий синтаксис:
with<список ссылок на переменную>do<оператор>; или
with<список ссылок на переменную>dobegin
<операторы>
end;
Например,
Type T_Rec = record
A:integer ;
B: byte;
C: char;
end;
Var Rec: T_Rec;
……….
begin
……….
with Rec do begin
A:=10;
B:=1;
C:=’*’;
End;
Данный оператор withэквивалентен следующей последовательности операторов:
Rec.A:=10; Rec.B:=1; Rec.C:=’*’;
Оператор withиспользуется для того, чтобы не писать полные, составные имена элементов записей.
Константы типа «запись» определяются в разделе Constследующим образом:
Const<имя константы>: <имя типа «запись»>=
(<имя поля 1>:<значение поля 1>;
<имя поля 2>:<значение поля 2>;
…………………………………..
<имя поля n>:<значение поляn>) ;
Например,
Type Data= record
Y: integer;
M: 1..12;
D: 1..31;
End;
Const DR: Data=(Y:1984;
M: 4;
D: 12);
5.4. Записи с вариантами
Записи, рассмотренные выше, относятся к данным постоянной структуры. В языке Паскаль имеется возможность работы с записями переменной структуры, которые называются записями с вариантами. Запись с вариантами включает две части:
фиксированную часть;
вариантную часть.
Вариантные компоненты включаются в зависимости от признака. Тип записи с вариантами объявляется следующим образом:
Type <имя типа> = record
Case<признак варианта>: <тип признака>of
<константа 1>: (<описание поля 11>;
< описание поля 12>;
< описание поля 1n1>);
<константа 2>: (<описание поля 21>;
< описание поля 22>;
< описание поля 2n2>);
……
<константа k>: (<описание поляk1>;
< описание поля k2>;
< описание поля knk>);
End;
Например,
Type Coordinates = record
case kind: (dekart,polar) of
dekart: (x, y: real);
polar: (r, fi: real)
End;
В данном примере определено объединение двух взаимно исключающих вариантов. Однако на практике приходится объединять два типа с частично совпадающими компонентами. Для такой ситуации применяется тип «запись с вариантами», который объявляется следующим образом типа:
Type <имя типа> = record
<поле 1>: <тип 1>;
<поле 2>: <тип 2>;
……
<поле n>: <типn>;
Case<признак варианта>: <тип признака>of
<константа 1>: (<описание поля 11>;
< описание поля 12>;
< описание поля 1n1>);
<константа 2>: (<описание поля 21>;
< описание поля 22>;
< описание поля 2n2>);
……
<константа k>: (<описание поляk1>;
< описание поля k2>;
< описание поля knk>);
End;
Примером записи с вариантами является карточка отдела кадров, которая различается для дипломированных специалистов и работающих студентов:
Type Zap_OK = record
Fio:string[80]; {Фамилия, имя, отчество }
TabN: integer; {}
Otdel: integer; {}
Gpr: integer; {}
Case prizn: byte of
1: (spec_dipl:string[80]; {специальность по диплому}
nom_dipl: string[10]; {номер диплома}
stag:integer); {стаж работы по специальности}
2: (Nmvuz:string[80]; {наименование вуза, где учится сотрудник}
Nk:byte; { номер курса}
P_I_O:byte) {признак использования учебного отпуска}
End;