- •25. Программный модуль
- •26Указатели в Паскале. Динамическая память на языке Паскаль
- •Ссылочные типы. Указатели в Паскале
- •Операции с указателями
- •Процедуры и функции для работы с указателями и адресами в Паскале
- •27. Динамические структуры данных | Связные списки
- •1 Связное представление данных в памяти
- •2 Связные линейные списки
- •2.1 Машинное представление связных линейных списков
- •2.2 Реализация операций над связными линейными списками
- •3. Нелинейные разветвленные списки
- •3.1 Основные понятия
- •3.2 Представление списковых структур в памяти.
- •3.3 Операции обработки списков
- •28. Стек и очередь
- •29. Системы программирования
- •30. Языки программирования
- •33. Накопители на гибких магнитных дисках
- •35Видеосистема персонального компьютера.
- •История
- •Технический обзор
- •Новые возможности по сравнению с Си
- •Не объектно-ориентированные возможности
- •Стандартная библиотека
- •Объектно-ориентированные особенности языка
- •Проблемы старого подхода
- •Инкапсуляция
- •Описание функций в теле класса
- •Конструкторы и деструкторы
- •Другие возможности функций-членов
- •Наследование
- •Полиморфизм
- •Будущее развитие
- •История названия
- •Пример №1
- •Пример №2
- •Пример №3
- •Пример №4
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •5.3.1. Символьные типы
- •5.3.2. Числовые типы
- •5.3.3. Типы дата/время
- •5.3.4. Двоичные типы
- •5.3.5. Пользовательские типы данных
- •2. [Проверка домашнего задания]
- •3. Актуализация знаний и умений учащихся по пройденному материалу
- •5. Реализация, составление алгоритмов с использованием повторения. Графика в программе Паскаль авс.
- •6. Ребус. Правильная осанка
- •9*. Тестирование
- •Операции над строками
- •Операции над строками
- •2. Объединения
- •Комбинированные типы. Записи
- •Обработка записей в Паскале
- •Оператор присоединения в Паскале
- •Вввод / вывод записей в Паскале
- •Примеры программ
2. Объединения
Объединение - это переменная, которая может содержать (в разные моменты времени) объекты различных типов и размеров. Все требования относительно размеров и выравнивания выполняет компилятор. Объединения позволяют хранить разнородные данные в одной и той же области памяти без включения в программу машинно-зависимой информации. Эти средства аналогичны вариантным записям в Паскале.
Объединения похожи на структуры, но выполняют несколько иные функции. В объединении все переменные начинаются с одного адреса, они совмещены в памяти, что позволяет интерпретировать одну и ту же область памяти, как данные разного типа. Размер объединения определяется максимальным размером переменной.
Формат объединения отличается от структуры только служебным словом union:
union имя {
тип1 имя переменной 1;
тип2 имя переменной 2;
…
};
Объединение, как и структура, определяет новый тип данных и описывается, как правило, вне описания функции, а переменные описываются, используя его имя как имя нового типа. Точка с запятой в конце описания объединения должна обязательно присутствовать.
Доступ к элементам объединения осуществляется так же, как к элементам структуры - через точку для имени объединения, или по стрелке для обращения через указатель.
Пример 1. Например, имеется 4 флага, и мы хотели бы сократить время для операций с несколькими флагами сразу. Для простоты рассмотрим, как можно обнулить все флаги одной операцией:
union Flag{
long g;
char ch[4];
};
void main()
{
Flag fl;
fl.ch[0] = 1;
fl.ch[1] = 2;
fl.ch[2] = 4;
fl.ch[3] = 8;
printf("Flag = %x\n",fl.g);
fl.g = 0; //Все флаги равны 0
printf("Flag = NULL\n");
for (int i = 0; i < 4; i++)
printf("%d\n",(int)fl.ch[i]);
}
Мы описали объединение, как переменную типа long и, одновременно, в виде массива типа char. Теперь, для переменной типа Flag, мы можем работать с каждым флагом независимо, или, используя операцию с переменной типа long, обнулить все флаги простой операцией присваивания fl.g = 0;.
В следующем операторе вывода мы хотели вывести каждый символ в виде целого числа, поэтому мы поставили оператор явного преобразования типа: (int)fl.ch[i].
Комбинированные типы. Записи
Запись – структура данных, состоящая из фиксированного числа компонент, называемых полями каждая из которых может иметь свой тип.
Структурированные типы в отличие от скалярных состоят из компонент.
Регулярные типы – фиксированное число однотипных компонент.
Комбинированные типы– фиксированное число компонент различных типов.
Записи позволяют в компактной форме описывать различные объекты (списки, каталоги, картотеки, таблицы, ведомости и т.д.). Рассмотрим способы описания, ввода/вывода и обработки записей.
Описание записей в Паскале
При использовании записей они д.б. описаны с использованием раздела описания либо непосредственно в разделе описания переменных
Запись имеет следующую структуру:
IZ = RECORD Где: IZ – имя типа записи; IK1 : T1; IK – имя поля (компоненты); IK2 : T2; T - тип компоненты, м.б. любой стан- . . . дартный либо предварительно IKN :TN; определенный (кроме файлового); END; RECORD – запись; RECORD-END – операторные скобки.
Пример описания записи
Const n=25; Type Date = Record Year : integer; {Год} Month : 1..12; {Число} Day : 1..31; {Месяц} End; Student = Record FIO : String[15]; {ФИО} Dr : Date; {Дата рождения} Str : String[20]; {Страна} b1,b2,b3,b4,b5 : 2..5; {Поле оценок} End; Vec = array[1..n] of Student; Var EMS_43a, EMS_43a, EMS_43a :Vec;
Порядок следования полей в записи не имеет значения.
Поле может иметь несколько имен, при этом они разделяются запятыми. Для наглядности поля следует располагать на отдельных строках и снабжать комментариями. Запись может содержать вариантную часть. Например, для иностранных студентов можно указать страну.
Type x=(Yes, No); Student = Record FIO : String[25]; {ФИО} Mark : 2..5; {Оценки} Variant :x; Case x of Yes : (Str : String[20]); {Страна} No : ( ); End;