Заходи
Гость

Хостинг

Статистика
Яндекс.Метрика Счетчик PR-CY.Rank
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Ccылки

Свежак

Главная » Статьи » Все статьи » Прогараммирование

ПОДПРОГРАММЫ. ПРОЦЕДУРЫ И ФУНКЦИИ

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

Подпрограмма -- некоторая последовательность инструкций, которая может повторяться в нескольких местах программы.

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

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

Описание процедуры состоит из заголовка и тела. Заголовок процедуры имеет вид:

procedure <имя> [ (<сп.ф.п.>) ] ;

здесь   <имя>        имя   процедуры   (правильный   идентификатор); <сп. ф. п. > - список формальных параметров.

Список формальных параметров необязателен и может отсутст­вовать. Если же он есть, то в нем должны быть перечислены имена формальных параметров и их типы, например procedure  MyProc    (a:   Real;   b:    Integer;   с:   Char);

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

function   <имя>    [(<сп.ф.п.>)]:    <тип>;

здесь <тип> — тип возвращаемого функцией результата. Заголовок функции может иметь следующий вид:

function  MyFunc    (a,   b:   Real):   Real;

Операторы тела подпрограммы рассматривают список фор­мальных параметров как своеобразное расширение раздела описа­ний: все переменные из этого списка могут использоваться в лю­бых выражениях внутри подпрограммы. Так осуществляется на­стройка алгоритма подпрограммы на конкретную задачу. Работа с процедурами и функциями отличаются в следующем:

1)   в заголовке функции помимо описания формальных пара­метров обязательно указывается тип возвращаемого ею результата;

2)   для возврата функцией значения в точку вызова среди ее операторов должен быть хотя бы один, в котором имени функции или переменной Result присваивается значение результата;

3)   вызов процедуры выполняется отдельным оператором;4)   вызов функции может выполняться там, где допускается ста­вить выражение, например, в правой части оператора присваивания.

ПЕРЕДАЧА ПАРАМЕТРОВ

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

Механизм замены формальных параметров на фактические по­зволяет нужным образом настроить алгоритм, реализованный в подпрограмме. Компилятор обычно следит за тем, чтобы количе­ство и тип формальных параметров строго соответствовали коли­честву и типам фактических параметров в момент обращения к подпрограмме.

Смысл используемых фактических параметров зависит от то­го, в каком порядке они перечислены при вызове подпрограммы. Поэтому программист должен сам следить за правильным поряд­ком перечисления фактических параметров при обращении к под­программе. Формальные параметры подпрограммы могут быть трех видов:

параметры-значения;

параметры-переменные;

параметры-константы.

Например, procedure  MyProc (A:   Real;   var В:   Real;   const С:   String);

здесь А - параметр-значение, в - параметр-переменная, С - пара­метр-константа.

Способ определения формального параметра очень важен для вызывающей программы. Если формальный параметр объявлен как параметр-значение или параметр-константа, то при вызове ему мо­жет соответствовать произвольное выражение. Если формальный параметр объявлен как параметр-переменная, то при вызове под­программы ему должен соответствовать фактический параметр в виде переменной нужного типа.

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

Если параметр определен как параметр-значение, то перед вы­зовом подпрограммы это значение вычисляется, полученный ре­зультат копируется во временную память и передается подпро­грамме. Любые возможные изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра.

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

В случае параметра-константы в подпрограмму также передает­ся адрес области памяти, в которой располагается переменная или вы­численное значение. Однако компилятор блокирует любые присваи­вания параметру-константе нового значения в теле подпрограммы.

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

Однако описание всех формальных параметров как параметров-переменных нежелательно по двум причинам. Во-первых, это ис­ключает возможность вызова подпрограммы с фактическими пара­метрами в виде выражений, что делает программу менее компакт­ной. Во-вторых, в подпрограмме возможно случайное использова­ние формального параметра, например, для временного хранения промежуточного результата, т.е. всегда существует опасность не­преднамеренно испортить фактическую переменную.

По той же причине не рекомендуется использовать параметры-переменные в заголовке функции. Если результатом работы функ­ции не может быть единственное значение, то логичнее использо­вать процедуру или нужным образом декомпозировать алгоритм на несколько подпрограмм.

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

Нетипизированные параметры. Одним из свойств языка Object Pascal является возможность использования нетипи­зированных параметров.

Параметр считается нетипизированным, если тип формального параметра-переменной в заголовке подпрограммы не указан, при этом соответствующий ему фактический параметр может быть пе­ременной любого типа. Нетипизированными могут быть только параметры-переменные: procedure MyProc(var aParametr);

Нетипизированные параметры обычно используются в случае, когда тип данных несуществен. Такие ситуации чаще всего возни­кают при разного рода копированиях одной области памяти в дру­гую, например, с помощью процедур BlockRead, BlockWrite, Move-Memory и т. п.

Процедурные типы. Основное назначение процедурных типов — дать программисту гибкие средства передачи функций и процедур в качестве фактических параметров обращения к дру­гим процедурам и функциям. Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускает­ся ее имя, например:

type

Prod = procedure (a, b, с: Real; var d: Real);

РгосЗ == procedure;

Fund = function: String;

Func2 = function (var s: String): Real;

В программе могут быть объявлены переменные процедурных типов, например:

var

p1 :    Proc1;

fl,    f2:    Func2;

ар:   array   [1. . N]   of   Prod;

Переменным процедурных типов допускается присваивать в ка­честве значений имена соответствующих подпрограмм. После та­кого присваивания имя переменной становится синонимом имени подпрограммы.

Категория: Прогараммирование | Добавил: Iron (12.06.2012)
Просмотров: 901 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Статьи
[Прогараммирование]
Как работает CSS?
[Прогараммирование]
ЛЕКЦИЯ. Язык Pascal
[Прогараммирование]
Введение в информатику
[Прогараммирование]
Разработка ПО с открытыми исходными текстами как особый вид прикладной науки
[Разное]
Большие секреты маленького BIOSa
[Прогараммирование]
ТЕОРИЯ ПЕРВИЧНЫХ ПРОГРАММ
[Разное]
Как избавиться от баннеров раз и навсегда
[Прогараммирование]
Подпрограммы
[Безопасность систем]
Резервирование и восстановление
[Прогараммирование]
Динамическая память

Категории
Операционные системы [30]
Устронение ошибок систем [13]
Безопасность систем [9]
Прогараммирование [32]
Технологические [0]
Информатика [23]
Бухгалтерский учет [3]
Ценообразование [0]
Экономика [0]
Менеджмент [3]
Психология [0]
Разное [4]

Популярный софт
Iron Kaspersky Internet Security 2015
Kaspersky Internet Security 2015
Iron Virtual DJ
Virtual DJ
Iron SoundForge 11
SoundForge 11
Iron Alcohol 120
Alcohol 120
Iron Norton Internet Security 2014
Norton Internet Security 2014
Iron Loaris Trojan Remover
Loaris Trojan Remover

Жми

Copyright MyCorp © 2024Конструктор сайтов - uCoz