Программирование на языке Object Pascal

Методическое пособие - Компьютеры, программирование

Другие методички по предмету Компьютеры, программирование

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

Формальные и фактические параметры

 

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

Пример:

A;, b: real;Add (x, y: real;): real;(x, y - формальные параметры):= x + y;;

a:=3

b:= Add(a,11); [14](Add - фактический параметр)

End;

 

Синтаксис записи процедур и функций

 

Procedure ])];

Function

 

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

В теле функции (Begin … End;) обязательно должна присутствовать следующая строка:

имя функции := ...;

 

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

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

 

Function Sum (n: integer): integer;, s: integer;:= 0;i = 1 to n do s:= s + i;:= s;;Sum (n: integer): integer;: integer;:= 0;i = 1 to n do result:= result + i;;

 

Способы передачи параметров подпрограммы:

Передача по ссылке (в подпрограмму передается ссылка(адрес фактического параметра));

Передача по значению (в качестве параметра передается копия значения фактического параметра);

Передача по названию (подпрограмме передается имя той переменной, которая является фактической переменной (в современных языках программирования этот способ не применяется)).

Первые два способа применяются в OPascal, каким способом передавать параметры, принимает решение программист. Следует учитывать, что параметры, передаваемые по ссылке, могут возвращать значение при выходе из процедуры или функции, т.е. могут быть изменены внутри подпрограммы.

Параметры, передаваемые по значению, внутри подпрограммы изменить нельзя.

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

Пример:

 

Procedure ABC;

Var

x, y: integer;

Procedure Test (p1: integer; var p2: integer);:= p1 + 1, p2:= p2 + 1;. Caption:= p1= + IntToStr(p1); [p1 = 2]. Caption:= p2= + IntToStr(p2); [p2 = 6];:=1, y:= 5;(x, y);. Caption:= x= + IntToStr(x); [x = 1]. Caption:= y= + IntToStr(y); [y = 6];

Комментарий к подпрограмме: В данном примере в процедуру Test передается два параметра (p1, p2): (p1 - по значению, p2 - по ссылке), соответствующие им фактические параметры x и y, после выхода из процедуры Test, принимают следующие значения: (x = 1, т.е. остается неизмененной, т.к. в процедуре изменялась лишь его копия; y - меняет свое значение, т.к. в процедуру был передан его адрес и изменения производились по этому адресу).

Для передачи в подпрограмму больших структур данных (например, массивов) следует применять передачу по ссылке, т.к. это позволит сэкономить память.

 

Механизм работы подпрограмм

 

Использование аппаратного стека.

Для моделирования семантики (логики построения) блочной структуры программы в ПВЭМ в настоящее время используется механизм - стек. Стеком называется следующая структура данных, которая организована по принципу LIEO (последний ушел - первым пришел).

Стек заполнятся следующим образом: первый элемент кладется на дно стека, второй - по верх первого ...

Элемент, занесенный в аппаратный стек последним - верхушка стека.

Извлечение происходит в обратном порядке: сначала извлекается элемент с верхушки стека, а за ним все остальные. Изъять элемент из середины стека невозможно.

Программы ПВЭМ строятся по сегментному принципу.

Сегмент - участок памяти размером 64 Кбайт, адрес любой ячейки равен адресу ячейки + адрес смещения.

Сегменты бывают трех типов:

(CS) кода - есть всегда;

(DS или ES) занятый - если ячейка занята данными;

(SS) стека - если используется процесс или константа (параметр, переменные, адрес возврата).

При запуске программы в оперативной памяти автоматически образуется стек, который занимает один сегмент. Стек применяется для работы с подпрограммами. В архитектуре современных компьютеров существует аппаратный стек. Основой его служит регистр указателя стека SR. SR содержит адрес того элемента, который был занесен в стек последним, по традиции при записи элементов в стек, значение регистра SR уменьшается. Таким образом, стек растет в сторону уменьшения адресов.

При вызове подпрограммы в аппаратный стек заносятся:

Фактические параметры (в том порядке, в котором они указанны);

Адрес возврата;

Блок локальных переменных.

Занесение в стек происходит именно в таком порядке.

Пример:

, y: integer;Two (p1, p2);, z: integer;Three (p);, a: integer;

Two (z, p);[@M4];Four;, a: integer;

Three (y);[@M3];(Two)

Four[@M2];Batton1. Click (...)

Two (x, y);(@M1);

End.

 

По завершении работы программы происходит извлечение из аппаратного стека в обратном порядке.

 

Указатели

 

Указатели и динамическая память.

Все переменные объявленные в программе размещаются в пределах непрерывной области оперативной памяти, которая называется сегмент данных (1 сегмент равен 64 Кбайт). При обработке больших объемов данных все переменные могут не поместиться в один сегмент. Для использования памяти находящейся вне сегмента памяти, используется механ?/p>