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

Билет 32 открытые параметры.

Открытые параметры — это массивы и строки неопределённой длины. Открытым параметром может стать только параметр–переменная. Возможность работать с открытыми параметрами в подпрограммах появилась в версии Turbo Pascal 7.0.

Открытые массивы

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

В заголовке подпрограммы открытый параметр–массив описывается по следующему шаблону:

var <имя_параметра> : array of <тип_компонентов_массива>

Например, если описано

procedure proc6 (var a : array of Byte);

то аргументом могут стать такие массивы:

a1 : array[1 .. 100] of Byte;

a2 : array[-10 .. 10] of Byte;

a3 : array[1 .. 2, 1 .. 3] of Byte;

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

Если в качестве аргумента поступил многомерный массив, его компоненты «вытягиваются» в одну строку: сначала все компоненты первой строки массива, затем — второй строки и т. д. Например, если массив а3 имеет значения

1 2 3

4 5 6

то внутри процедуры proc6 параметр а будет иметь уже следующий вид:

1 2 3 4 5 6

причём, компоненты двух массивов будут соотноситься так:

a[0]a[1]a[2]a[3]a[4]a[5]

a3[1, 1]a3[1, 2]a3[1, 3]a3[2, 1]a3[2, 2]a3[2, 3]

Открытые строки

Поскольку строки — это массивы символов, то они тоже могут стать открытыми параметрами. Описывается это следующим образом:

var <имя_параметра> : String

Например:

function func6 (var s : String) : Byte;

Длина такого параметра будет автоматически скорректирована в соответствии с длиной строки–аргумента.

Билет 33. Нетипизированные параметры.

В Borland Pascal допускается использовать параметры, тип которых не указан. Такие параметры могут передаваться в подпрограмму только по ссылке, так как в этом случае в подпрограмму реально передается адрес параметра. Безусловно, для того чтобы подпрограмма могла выполнять какие-либо действия с этим параметром, она должна как-то назначить ему тип. Для приведения нетипизированного параметра к определенному типу можно использовать:

Автоопределенное преобразование типов;

Наложенное описание переменной определенного типа.

При автоопределенном преобразовании типов тип выражения указывают явно, например:

Procedure Proc (Var: а);

b: = Integer (a) + 10;

Для наложения переменной определенного типа используют описание с absolute, например:

Procedure Proc (Var: а);

Var r : real absolute a;

При этом переменная r оказывается в памяти размещенной в том же месте, что и нетипизированный параметр а, и, соответственно, любое изменение r приведет к изменению а.

Билет 34. Необходимость и преимущества модульного программирования. Структура модуля в языке Pascal.

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

UNIT <имя>;

INTERFACE

<интерфейсная часть>

IMPLEMENTATION

<часть реализации (исполняемая часть)>

BEGIN

<часть инициализации (инициирующая часть)>

END.

Заголовок модуля состоит из зарезервированного слова UNIT и следующего за ним имени модуля. Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением

USES <список модулей>

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

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

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

Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим ее словом BEGIN или быть пустой – тогда за BEGIN сразу следует признак конца модуля, т.е. слово END и следующая за ним точка.

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

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

Преимущества модульного программирования:

-однажды написанный модуль может использоваться в различных программах, что позволяет не дублировать программный код;

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

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

- модули скрывают детали внутренней реализации пр-р или ф-ий(инкапсуляция на уровне модуля – это ограничение доступа).

Для языка Pascal использование модулей необходимо при разработке больших программ из-за существующего ограничения на размер одного программного модуля в 64 килобайта.

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