к 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   ОС  

Знаете ли Вы, что, как и всякая идолопоклонническая религия, релятивизм ложен в своей основе. Он противоречит фактам. Среди них такие:

1. Электромагнитная волна (в религиозной терминологии релятивизма - "свет") имеет строго постоянную скорость 300 тыс.км/с, абсурдно не отсчитываемую ни от чего. Реально ЭМ-волны имеют разную скорость в веществе (например, ~200 тыс км/с в стекле и ~3 млн. км/с в поверхностных слоях металлов, разную скорость в эфире (см. статью "Температура эфира и красные смещения"), разную скорость для разных частот (см. статью "О скорости ЭМ-волн")

2. В релятивизме "свет" есть мифическое явление само по себе, а не физическая волна, являющаяся волнением определенной физической среды. Релятивистский "свет" - это волнение ничего в ничем. У него нет среды-носителя колебаний.

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

4. В гравитационном релятивизме (ОТО) вопреки наблюдаемым фактам утверждается об угловом отклонении ЭМ-волн в пустом пространстве под действием гравитации. Однако астрономам известно, что свет от затменных двойных звезд не подвержен такому отклонению, а те "подтверждающие теорию Эйнштейна факты", которые якобы наблюдались А. Эддингтоном в 1919 году в отношении Солнца, являются фальсификацией. Подробнее читайте в 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