к 4GL - визуальному программированию   Kylix   RUNTU   ОС  

Подпрограммы и модули Kylix

Подпрограммы
Функции
Процедуры
Параметры и аргументы
Модули


В этой главе мы расскажем о принципах описания функций и процедур 1языка Object Pascal. Вы узнаете, чем отличается параметр подпрограммы от аргумента и научитесь сами создавать процедуры и функции. В конце главы мы рассмотрим понятие модуля.

Подпрограммы
Подпрограмма - это небольшая законченная программа, состоящая из операторов и команд языка и оформленная специальным образом.
Подпрограммы используются для сокращения объема программы и могут |вызываться из любого места основной программы. Уменьшение объема Программы достигается за счет того, что в программах часто имеются оди-рнаковые участки кода, которые можно вынести в подпрограмму и вызывать в нужных местах программы.
По своей структуре подпрограмма аналогична обычной программе, но блок luses в подпрограмме отсутствует. Подпрограмма также имеет некоторые отличия в оформлении заголовка.
Прежде чем работать с подпрограммой, ее необходимо описать.
При описании и вызове подпрограммы записываются имя подпрограммы, список и значения параметров (аргументов), которые передаются данной подпрограмме для работы, а также действия, выполняемые этой подпрограммой.
В качестве параметров функции могут выступать любые описанные в ней переменные. Параметры используются для передачи данных из основной программы в подпрограмму. Однако подпрограмма может не иметь параметров.
В модулях. Kylix имеется несколько десятков стандартных подпрограмм, которые могут вызываться без предварительного их описания.
Все подпрограммы в языке Object Pascal делятся на две группы:
процедуры;
функции.
Главным отличием функции от процедуры является то, что функция может возвращать под своим именем какое-либо значение. Процедура этого делать не может.
Для досрочного выхода из подпрограммы и передачи управления основной программы достаточно вызвать процедуру Exit. Подпрограммы допускается вызывать из других подпрограмм.

Функции
Функции - это подпрограммы, которые могут возвращать под своим именем результирующее значение. Типичным примером функции может быть функция sin(x). Запись:

A:"Sin'(x);

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

Function имя функции (параметры) : тип результата;

Имя функции однозначно идентифицирует данную функцию и используется оля ее вызова из основной программы.
Параметры - это необязательная часть функции, содержащая список переменных, которые передаются в функцию из основной программы.
Тип результата - показывает, какой тип будет иметь результат выполнения функции. Тип результата может быть любым, за исключением файлового.
Блок функции - это программный блок, состоящий, как минимум, из одногo оператора присваивания:

Имя функции := результат выполнения функции;

или

Result := результат выполнения функции;

Данная операция присваивания (как первая, так и вторая) присваивает ре-ультирующее значение, которое вернет функция при возврате в основную программу. Например:

function WF: Integer;
begin
WF .:= 17;
end;

и

function WF: Integer;
begin
Result := 17;
end;

Вызов обеих функций приведет к одному и тому же результату. Данная функция всегда будет возвращать значение 17.
Вызов функции осуществляется по ее имени и списку аргументов, заключенных в круглые скобки после имени функции. Все аргументы должны быть совместимы по типу с параметрами, указанными в заголовке функции.
В качестве примера рассмотрим описание функции нахождения максимального значения среди элементов одномерного массива (листинг 4.1). В качестве параметров в функцию будем передавать имя массива и количество его элементов.

Листинг 4.1 описание функции MAX
function Max (A: array of Real; N: Integer): Real;
var
X: Real;
I: Integer;
begin
X := A[0];
for I := 1 to N - 1 do
if X < A[ I ] then X := A[ I ] ;
Max := X;
end;

Вызов данной функции может выглядеть так:

М := Мах (В, 12) ;

При этом переменная м должна иметь тип Real, массив в - тоже Real, a вторым параметром должно быть целое число (в нашем примере 12). Таким образом, вызов данной функции при этих параметрах поместит в переменную м самое большое значение из всех, хранящихся в элементах одномерного 12-элементного массива в.

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

Procedure имя процедуры (параметры) ;

Имя процедуры должно быть уникальным и должно однозначно идентифицировать процедуру.
Параметры процедуры являются необязательными и служат для передачи каких-либо данных из основной программы в процедуру.
Блок процедуры содержит операторы и команды языка Object Pascal. Блок процедуры может быть пустым.
Вызов процедуры происходит по ее имени и списку аргументов, заключенных в круглые скобки.
Рассмотрим пример описания процедуры. Создадим процедуру, которая треобразует целое число в строку (листинг 4.2). Для этого в процедуру потребуется передавать два параметра - целое число и строку, в которую будет записан результат.

Листинг 4.2 Описание процедуры NumString
prdcecture NumString (N: Integer; var S: string);
var
V: Integer;
begin
V := Abs(N);
S:='';
repeat
S := Chr(V mod 10 + Ord('O')) + S;
V ;= V div 10;
unti1 V = 0;
if N < 0 then S := '-' + S;
end;

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

NumString (17, MyString);

В результате выполнения данного оператора, который называется операто-зм/вызова процедуры, в строковую переменную с именем MyString будет омещено значение "17".

Параметры и аргументы
Параметры - это элементы подпрограммы, которые используются при описании блока подпрограммы.
Аргументы - это элементы, которые указываются при вызове подпрограмм. Они замещаются соответствующими параметрами подпрограммы.
В качестве параметров могут выступать:
значения;
константы;
переменные.
Параметрами могут быть элементы абсолютно любого типа.
Все параметры разделяются на группы, в зависимости от того, чем они являются:
параметры-значения;
параметры-константы;
параметры-переменные.
Параметры-значения - это параметры, перед которыми в заголовке под-цюграммы не стоит слово var или const. За параметрами-значениями через двоеточие ставится их тип. Например:

function Max(A: array of Real; N: Integer): Real;

3десь массив А и переменная N являются параметрами-значениями. Параметры-значения рассматриваются компилятором как локальные переменные, которые присутствуют только внутри подпрограммы. Все изменения этих параметров происходят только внутри подпрограммы и никак не влияют на значения соответствующих имч аргументов.
Параметры-константы - это параметры, перед которыми в заголовке подпрограммы стоит слово const. За параметрами-константами через двоеточие ставится их тип. Например:

procedure MyProcl(const X: Integer);

Здесь единственный параметр х является параметром-константой. Значение параметра-константы в теле подпрограммы изменить нельзя. Параметры-константы применяются для того, чтобы запретить нежелательные изменения параметров в подпрограмме. Кроме того, использование параметров-констант позволяет компилятору создать более эффективный код.
Параметры-переменные - это параметры, перед которыми в заголовке подпрограммы стоит слово var. За параметрами-переменными через двоеточие ставится их тип. Например:

procedure MyProc2(var a,b:char; с,d:string);

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

function MyFunc(var a,b; const c,d): Integer;

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

Модули
Кроме рассмотренных выше программ и подпрограмм, язык Object Pascal позволяет создавать так называемые модули.
Модуль (unit) - предназначен для записи в него различных элементов, таких как подпрограммы, переменные, константы и др.
Модуль не может быть запущен на исполнение как программа. Чтобы использовать модуль в программе, его необходимо подключить. Для этого имя модуля указывается в разделе uses основной программы.



Рис. 4.1. Форма приложения

Для каждой формы приложения Kylix создается новый модуль. Например, р при первоначальном запуске среды вы видите на экране форму с именем Forml (рис. 4.1) и модуль формы с именем Unitl.pas (рис. 4.2).



Рис. 4.2, Модуль Unit1 .pas

Рассмотрим состав модуля более подробно:

unit имя модуля;
interface // Начало раздела интерфейса uses // Список используемых модулей
Const // Раздел объявления констант type // Раздел объявления типов
var // Раздел объявления переменных
//Заголовки процедур
// Заголовки функций
implementation // Раздел реализации
uses // Список используемых модулей
const // Раздел объявления констант
type // Раздел объявления типов
var // Раздел объявления переменных
// Описание процедур
// Описание функций
initialization // Раздел инициализации
// Операторы и команды
finalization // Раздел завершения
//Операторы и команды
end.

Первый раздел - раздел интерфейса, который является как бы "лицом" данного модуля. В нем размещены описания модулей, используемых данным одулем, а также объявляются типы, константы, переменные, функции и роцедуры, описываются идентификаторы, являющиеся доступными всем одулям и программам, использующим данный модуль. Заметим, что для ункций и процедур в данном разделе записываются только их заголовки. Непосредственно процедуры и функции размещены в следующем разделе - разделе реализации.
В разделе реализации, кроме процедур и функций, описываются типы, константы, переменные, а также модули, которые используются только в этом модуле, а за его пределами не видны. Кроме того, в данном разделе разме-аются директивы компилятора - служебные команды среды разработки.
Последние два раздела не являются обязательными. В разделе инициализации вмещаются операторы и команды, которые должны выполняться в начале работы программы, подключающей эти модули.
При наличии раздела инициализации в модуле может присутствовать раздел вершения. В данном разделе находятся операторы и команды, которые выполняются при завершении работы программы.

к 4GL - визуальному программированию   Kylix   RUNTU   ОС  

Знаете ли Вы, что релятивистское объяснение феномену CMB (космическому микроволновому излучению) придумал человек выдающейся фантазии Иосиф Шкловский (помните книжку миллионного тиража "Вселенная, жизнь, разум"?). Он выдвинул совершенно абсурдную идею, заключавшуюся в том, что это есть "реликтовое" излучение, оставшееся после "Большого Взрыва", то есть от момента "рождения" Вселенной. Хотя из простой логики следует, что Вселенная есть всё, а значит, у нее нет ни начала, ни конца... Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution