"Подпрограммы и библиотеки подпрограмм".

Download Report

Transcript "Подпрограммы и библиотеки подпрограмм".

Delphi. Тема 6.
Подпрограммы и библиотеки
подпрограмм
План темы:
1. Понятие подпрограммы.
 2. Типы, описание и структура подпрограмм.
 3. Вызов подпрограмм.
 4. Передача данных между подпрограммой и
вызывающей её программой.
 5. Оформление подпрограмм в динамически
подключаемой библиотеке (DLL).
 6. Вызов подпрограмм из DLL.
 7. Пример размещения подпрограмм в DLL и их
вызов в основной программе.

1. Понятие подпрограммы.
 При
решении многих задач, часто
требуется производить вычисления по
одним и тем же алгоритмам при
различных исходных данных. Для
облегчения программирования в
языках программирования такие
алгоритмы оформляются в виде
подпрограмм.
1. Понятие подпрограммы.
 Подпрограмма – это последовательность
операторов, оформленная таким
образом, что ее можно вызвать по имени
из любой другой программы, передав ей
определенные параметры и, получив от
неё, требуемый результат, продолжить
работу вызывающей (основной)
программы.
2. Типы, описание и структура
подпрограмм.
 В языке Паскаль имеется два типа
подпрограмм: процедуры (Procedure) и
функции (Function).
 Функция, в отличие от процедуры,
обязательно возвращает в точку
вызова результат (одна величина
определенного типа).
2. Типы, описание и структура
подпрограмм.

Структура процедуры:
Procedure Имя(список формальных параметров);
var … //раздел описаний локальных данных
begin
… //последовательность любых операторов
end;

Структура функции:
Function Имя(список формальных параметров): тип;
var … //раздел описаний локальных данных
begin
… //последовательность любых операторов
Result := <результат>;
end;
3. Вызов подпрограмм.
 Вызов процедуры осуществляется
отдельным оператором:
Имя(список фактических параметров);
 Вызов функции осуществляется внутри
выражения:
y := Имя(список фактических
параметров);
4. Передача данных между
подпрограммой и вызывающей её
программой.
 Передача данных осуществляется
через параметры.
 Формальные параметры внутри
подпрограммы могут быть следующих
разновидностей:
- Параметры-значения,
- Параметры-переменные.
4. Передача данных между
подпрограммой и вызывающей её
программой.
Параметры-значения описываются следующим
образом: Имя(a, b: Тип1; c, d: Тип2; ...)
 Для каждого формального параметра–
значения внутри подпрограммы резервируются
дополнительные ячейки памяти. При вызове
подпрограммы, происходит пересылка
фактического параметра в эти ячейки памяти,
после чего выполняется подпрограмма. При
этом значение ячейки, где находился сам
фактический параметр, не изменяется.
Фактическим параметром может быть
константа, переменная или арифметическое
выражение.

5. Оформление подпрограмм в
динамически подключаемой библиотеке
(DLL).
Пример:
Var x, u, z : real;
Function sqxy(x, y: real): real;
begin
if x<0 then x:=0;
if y<0 then y:=0;
Result := sqrt(x) + sqrt(y);
end;
begin
x := -0.5;
u := 4;
z := sqxy(x, u); //вызов функции
…
z := sqxy(sin(u) + x, 1.86);
end;

4. Передача данных между
подпрограммой и вызывающей её
программой.
Параметры–переменные описываются
следующим образом:
Имя(Var a, b: Тип1; Var c, d: Тип2; ...)
 В этом случае фактическим параметром может
быть только имя переменной. При вызове
подпрограмм передается адрес ячейки
переменной, в которой находится фактический
параметр, и все действия производятся над
этой ячейкой. Поэтому после работы
подпрограммы в ячейке фактического
параметра при необходимости будет
находиться результат.

4. Передача данных между
подпрограммой и вызывающей её
программой.
Пример:
type vek = array of integer;
procedure sab(n: byte; a, b: vek; var s: integer);
Var i: byte;
begin
s:=0;
for i:=1 to n do
s := s + a[i]*b[i];
end;
Var x, y: vek; sk: integer;
begin
… //ввод массивов x, y
sab(5,x,y,sk); //вызов процедуры
… //вывод результата sk
end;

5. Оформление подпрограмм в
динамически подключаемой библиотеке
(DLL).
Часто используемые подпрограммы удобно
размещать в отдельном программном
модуле, оформленном в виде динамически
подключаемой библиотеки (DLL).
 DLL представляют собой файлы с
откомпилированным исполняемым кодом,
который может использоваться различными
приложениями.
 DLL используются по мере необходимости, т.е.
загружается в память только тогда, когда к
ней обращается какой-либо процесс.

5. Оформление подпрограмм в
динамически подключаемой библиотеке
(DLL).






Применение DLL позволяет добиться ряда
преимуществ:
уменьшается размер исполняемого файла
приложения и занимаемые им ресурсы;
функции DLL могут использовать несколько
процессов одновременно;
управление динамическими библиотеками
возлагается на операционную систему;
внесение изменений в DLL не требует
перекомпиляции всего проекта;
одну DLL могут использовать программы,
написанные на разных языках.
5. Оформление подпрограмм в
динамически подключаемой библиотеке
(DLL).
 Последовательность действий при

создании DLL:
Создать DLL-проект командой
File\New\Other… \DLL Wizard

Записать все процедуры и функции в
файл, придерживаясь установленной
структуры файла библиотеки
(см. пример);
5. Оформление подпрограмм в
динамически подключаемой библиотеке
(DLL).


Сохранить DLL-проект;
Откомпилировать DLL-проект командой:
Project\Compile <имя проекта>


В результате успешной компиляции
создается файл <имя>.DLL – это и есть
созданная DLL-библиотека.
Скопировать созданный DLL-файл в
папку с проектом основной программы.
6. Вызов подпрограмм из DLL.
 Для использования подпрограмм из
DLL-библиотеки в основной программе
необходимо импортировать
подпрограммы в интерфейсной части
программного модуля, пример:
Function Count_Chet(V: Vektor): integer;
stdcall; external 'ArrayLib';
Procedure Sum_Col(k: integer; var M:
Matrica); stdcall; external 'ArrayLib';
7. Пример размещения подпрограмм в DLL
и их вызов в основной программе.