Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Задание значения указателю.




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

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

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

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

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

Тема:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Interface

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

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

Implementation

<описания>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Указатели.

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

Указатель – это переменная, которая в качестве своего значения содержит адрес какого-либо байта памяти, который задается совокупностью двух шестнадцатиразрядных слов, называемых сегментом(участок памяти, имеющий длину 64 Кбайт и начинающийся с физического адреса, кратного 16: 0, 16, 32 и т. д.) и смещением(указывает, сколько байт от начала сегмента необходимо пропустить, чтобы обратиться к нужному адресу).

Таким образом, значения указателей представляются в виде двух величин типа Word (сегмент:смещение) и занимают 4 байта. Их нельзя ввести с клавиатуры и вывести на устройства вывода.

Для значений указателей предопределена константа Nil, которая называется пустым указателем, и её значение представляется как 0000:0000.

Существует два вида указателей: типизированные и нетипизированные. Они между собой совместимы, но несовместимы те величины, на которые они указывают. Типизированный указатель содержит адрес переменной определенного типа. Нетипизированный указатель может указывать на переменную любого типа.

Описание указателя.

4.1.1. Типизированные указатели описываются как 

^<имя_базового_типа>;

4.1.2. Нетипизированные указатели описываются с помощью стандартного идентификатора Pointer.

Var

P: Pointer;

Выделение динамической памяти.

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

New(<идетификатор_указателя>);

Размер выделяемой области памяти определяется базовым типом переменной, связанной с указателем.

Var

P: ^integer;

begin

New(P);

end.

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

GetMem(<идентификатор_указателя>,<размер_выделяемой_памяти>);

идентификатор_указателя – типизированный или нетипизированный указатель

размер_выделяемой_памяти – величина типа Word, которая определяет количество выделяемой динамической памяти

Память под динамические переменные при использовании процедур New и GetMem выделяется блоками по 8 байт.

Var

P: Pointer;

Begin

GetMem(P,56);

end.

Задание значения указателю.

Указателю можно присвоить содержимое другого указателя совместимого типа, константу NIL (пустой указатель) или адрес объекта, определенный с помощью оператора @, а также функций ADDR и PTR.

Операция разыменования.

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

Обозначается операция разыменования как

<идентификатор_указателя>^;

Она позволяет осуществлять доступ к той области памяти, с которой связан указатель.










Последнее изменение этой страницы: 2018-05-29; просмотров: 145.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...