- •Принципы модульного программирования
- •1. Процедуры
- •1.1.Пример программы с процедурой
- •1.2. Расположение процедур в программе
- •2. Функции
- •2.1. Пример программы с функцией
- •3. Внешние процедуры и функции
- •3.1. Модули пользователей
- •Сложные типы данных, применяемые в Паскале
- •1. Множества
- •1.1. Примеры программ с использованием множеств
- •2. Записи
- •2.1.Пример программы обработки записей
- •Файлы и наборы данных
- •1.Текстовые файлы
- •1.1. Создание текстового файла
- •1.2. Работа с существующим текстовым файлом
- •2. Последовательные файлы
- •2.1.Примеры программ с файлами, содержащими данные простого типа
- •2.2.Работа с файлами, содержащими данные сложного типа
- •2.2.1. Создание последовательного файла
- •2.2.2. Работа с файлом filan
- •3. Файлы с произвольным (прямым) доступом
- •3.1. Создание файла с прямым доступом
- •3.2. Работа с файлом: поиск и коррекция записей
- •3.3. Упорядочение записей в файле
- •3.4. Удаление записей из файла
- •3.5. Вставка записей в файл
- •Динамическое распределение памяти. Указатели и списки
- •1. Использование указателей. Списки
- •2. Очереди
- •2.1. Очередь типа Lifo
- •2.2. Очередь Fifo
- •Стандартные модули Турбо Паскаля
- •Модуль Crt
- •Модуль dos
- •Модуль Graph
- •1. Инициирование графического режима
- •2. Вывод текста (надписей) в графическом режиме
- •3. Вывод точек на экран
- •4. Построение графических изображений
- •5. Запоминание и вывод изображений
- •Библиографический список
- •Содержание
- •Процедуры 3
- •2. Функции 12
1. Использование указателей. Списки
Список представляет собой совокупность динамических объектов одного типа, упорядоченных с помощью ссылок.
Объекты называются элементами списка. Элементом списка обычно является запись, которая содержит по крайней мере два поля (см. рис.9):
- информационное;
- указатель.
Рис. 9. Структура элемента списка
Сам список представляется в виде рис.10.
Рис. 10. Структура списка
Каждый элемент списка имеет указатель на соседа. Последний элемент имеет указатель Nil. Элементы списка и указатели описываются так:
Type
ук = ^Эл_сп; {Опережающее описание допускается только в этом случае }
Эл_сп=Record;
Uнф:Тип_Инф;
След:Указатель
end;
Тип информационного элемента – любой (скалярный, строка, массив и т. д.).
Пример.
Тype
Ptr= Sp;
Sp=Record
Buk:Char;
Sl:Ptr;
end;
Var
p,q:Ptr; { указатели для элемента списка}
Ln:Sp; {элемент списка}
С помощью списков достаточно просто представляются строки и тексты переменной длины, а также очереди. Очередь – понятие, которое широко используется в вычислительной технике. Список позволяет моделировать операции добавления элементов в очередь и выборки из нее.
Основные операции над списками:
1) переход от одного элемента к другому (следующему );
2) включение нового элемента в список;
3) удаление элемента изсписка.
Первая операция выполняется просто: текущему значению ссылки присваивается значение из ее же поля указателя:
ук: = ук^. ccылка;
Пример.
Pp: = Pp^.Sl;
В результате Pp – ссылка на следующий элемент или Nil, если элемент последний.
Включение элемента Np после элемента Pp в список иллюстрирует рис.11. Для выполнения этой операции нужно задать ссылку из вставляемого элемента на следующий (она равна ссылке из предыдущего элемента на следующий), а затем – изменить ссылку из предыдущего элемента на вставляемый. Существующая связь разрывается последней, чтобы не потерять элемент. Фрагмент программы будет иметь вид:
New(Np);
Readln(Np^.Buk); {Создали вставляемый элемент}
Np:=Pp^.Sl; { Ссылка из вставляемого на следующий}
Pp:=Np; { Ссылка из предыдущего на вставляемый}
Рис. 11. Включение элемента в список
У
даление
элемента Np, стоящего после Pp, выполняется
по схеме рис.12. При удалении сначала
переносятся ссылки, а потом удаляется
элемент. Ссылка на удаляемый элемент
не должна теряться, пока он не будет
уничтожен или включен в другой список,
иначе из него получится "мусор".
Фрагмент программы, в котором выполняется
удаление элемента Np будет иметь вид:
Np: = Pp^.Sl; {запомнили ссылку на удаляемый элемент}
Pp^.Sl:=Pp^.Sl^.Sl; {перенесли ссылку}
Dispose (Np); {удалили элемент }
{можно Np^.Sl:=Nil;-тогда элемент не теряется}
Рис. 12. Включение элемента в список
2. Очереди
Наиболее простые способы формирования и обслуживания очередей (дисциплины обслуживания):
LIFO — обслуживание в порядке, обратном поступлению
FIFO — обслуживание в порядке поступления.
Рассмотрим механизм формирования и выборки очередей на примере списка, в которых информационный элемент имеет тип Char.
