Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab2_TP.doc
Скачиваний:
2
Добавлен:
06.09.2019
Размер:
170.5 Кб
Скачать

11

Технология программирования

Лабораторный курс

доцента кафедры информационных систем и компьютерных технологий

Пановой Т.В. (panova_tat@rambler.ru)

Лабораторная работа №2

Тема:

Парадигма модульного программирования на примере обработки динамических массивов с использованием восходящей разработки

Цель: формирование навыков

  • определения различий между статическим и динамическим массивами;

  • создания в динами­ческой памяти массива как совокупности однотипных данных;

  • обработки динамического массива, используя операции с указателями;

  • оформления подпрограмм обработки в отдельном модуле;

  • написания драйверов для восходящей отладки.

I. Теоретические сведения.

1. Модульное программирование

При проектировании программ больших размеров применяется технология модульного программирования, которая предполагает выделение групп подпрограмм в отдельные библиотеки – модули, компилируемые отдельно от основной программы.

1.1. Понятие модуля.

Модуль – это автономно компилируемая программная единица, включающая в себя раздел объявлений программных ресурсов, предназначенных для использования другими модулями и программами, раздел описаний объявленных подпрограмм и локальных объектов модуля и инициирующую часть, операторы которой исполняются перед началом работы программы, использующей этот модуль.

Модуль, в отличие от программы, не может быть запущен на выполнение самостоятельно.

1.2. Использование модуля.

Для использования библиотеки (модуля) после заголовка программы и глобальных директив компилятора задается специальное предложение

Uses <список_имен_модулей>;

Исходный текст модуля располагается в файле с расширением .pas. Транслируется модуль отдельно от программы и помещается после трансляции в файл с расширением .tpu, а затем на этапе компоновки (сборки) модуль подключается к оттранслированной программе.

1.3. Структура модуля.

1.3.1. Заголовок модуля состоит из зарезервированного слова Unit и следующего за ним имени модуля:

Unit <имя_модуля>;

1.3.2. Интерфейсная часть начинается с зарезервированного слова Interface, содержит объявления всех глобальных объектов модуля, доступных программам и модулям, к которым подключена данная библиотека.

Interface

<объявления>

1.3.3. Часть реализации начинается с зарезервированного слова Implementation, следуют описания всех подпрограмм, объявленных в интерфейсной секции, а также в ней могут быть объявлены локальные для модуля объекты:

Implementation

<описания>

1.3.4. Часть инициализации является необязательной, начинается с операторной скобки begin и состоит из операторов, исполняемых до передачи управления основной программе и обычно используемых для подготовки к ее работе.

Заканчивается модуль операторной скобкой end с точкой.

2. Статические и динамические структуры

Структура данных – это совокупность физически и логически взаимосвязанных данных.

Статическая структура данных – это совокупность фиксированного количества данных постоянной размерности с неизменным характером связей между ними.

Переменные статических структур могут изменять только свое значение, а их структура и множество допустимых значений остаются неизменными, поэтому размер памяти, занимаемой такими переменными, остается постоянным.

Динамическая структура данных – это совокупность данных, количество, размерность и характер взаимосвязей между которыми могут меняться в процессе выполнения программы, поэтому размер памяти, занимаемый такой структурой, заранее может быть неизвестен.

3. Динамическое размещение данных

Динамическое размещение данных предусматривает использование динамической памяти.

Динамическая память (куча) – это часть оперативной памяти компьютера, предоставляемой программе при ее работе, за вычетом сегмента данных (не более 64 Кбайт), стека (16 Кбайт по умолчанию), памяти, используемой системными и резидентными программами, и кода исполняемой программы. По умолчанию размер динамической памяти зависит от всей доступной оперативной памяти компьютера (не менее 200 – 300 Кбайт, а обычно существенно больше).

Размер динамической памяти можно устанавливать из среды TURBO PASCAL или из самой программы специальными директивами компилятора.

Куча (HEAP-область) первоначально всегда свободна и заполняется от нижних адресов в области кучи. Состояние кучи можно отслеживать при помощи специально предопределённых в языке Pascal переменных типа указатель (Pointer):

  • HeapOrg содержит адрес начала кучи, и её значение не изменяется в процессе выполнения программы;

  • HeapPtr содержит адрес начала непрерывного, ещё неиспользованного участка кучи, и каждый раз, когда в куче размещается новая величина, значение этого указателя изменяется на размер этой переменной;

  • HeapEnd содержит адрес конца кучи;

  • FreeList – переменная модуля System, которая указывает на список свободных блоков динамически распределяемой области памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]