Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Function





Procedure

Begin

……

End;

 

procedure< имя > (< список формальных параметров >); Label const type var function procedure begin …… end;

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

Список формальных параметров в общем случае включает:

1) параметры-значения, которые приводятся без каких-либо ключевых слов:

(…; q1, …, qn: T1; …;p1, …, pm: Tk; …)

2) параметры-константы, которые записываются после ключевого слова const:

(…; const q1, …, qn: T1; …; const p1, …, pm: Tk; …)

3) параметры-переменные, которые приводятся с ключевым словом var:

(…; var q1, …, qn: T1; …; var p1, …, pm: Tk; …)

Здесь qi, pi – формальные параметры; Ti – типы формальных параметров.

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

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

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

Тип формального параметра должен определяться одним идентификатором. Поэтому если параметром подпрограммы является массив, то перед описанием подпрограммы необходимо дать определение типа массива. Например,

const N = 10;

type matrix = array [1.. N, 1.. N] of real;

.................................

procedure EX (a, b: matrix; var c: matrix);

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

type yOFx = function (x: real): real;

.............................

function Integral (a, b: real; y: yOFx; N: word): real;

При этом вызываемая функция оформляется в виде подпрограммы с директивой far, которая записывается после ее заголовка, в частности в рассмотренном примере:

function F (z: real): real; far;

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

Имена, объявленные в заголовке подпрограммы и в разделе описаний, являются локальными. Они не должны совпадать с именем самой подпрограммы. Доступ к ним из других программ и подпрограмм невозможен. При совпадении локальных и глобальных имен локальные определения в пределах своего действия отменяют действие глобальных (блокируют их).

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

 

Рис. 7.1. Программа с вложенной структурой подпрограмм

 

Здесь из основной программы можно обратиться к подпрограммам P и Q, но нельзя вызвать ни одну из вложенных в них подпрограмм P1, P2, Q1.

При входе в подпрограмму низшего уровня доступными становятся не только объявленные в ней имена, но и сохраняется доступ ко всем переменным (именам) верхнего уровня. Например, из подпрограммы Q21 можно вызвать подпрограмму P и Q1, использовать имена, объявленные в основной программе и подпрограммах Q и Q2.

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


Для досрочного выхода из подпрограммы предусмотрена стандартная процедура exit.

В ТР возможен рекурсивный вызов процедур или функций. Это делает программу иногда изящной, но, как правило, ненадежной из-за зацикливания программы и переполнения стека. Поэтому на практике рекурсия заменяется итерацией, что в большинстве случаев выполнимо.

 

Пример. Составить программу для вычисления значения z: , где при заданных значениях a и b.

 

Вычисление th(х) можно оформить в виде функции:

 

Program Th_1;

Uses Printer;

Var z,a,b,t1,t2,t3:real;

{вычисление th с помощью функции}

Function th(x:real):real;

var c:real;

Begin

c:=exp(2*x);

th:=(c-1)/(c+1);

end;

BEGIN

writeln('Введите переменные:');

write('a='); readln(a);

write('b='); readln(b);

t1:=sqr(th(a)); {обращения к функции th}

t2:=th(a-b);

t3:=sqrt(th(a*a-b*b));

z:=(t1+t2)/t3;

writeln(Lst, 'z=',z:12, ' при a=',a:4:1,

' и b=',b:4:1);

END.

 

При оформлении вычисления th(x) в виде процедуры программа будет иметь следующий вид:

 

Program Th_2;

Uses Printer;

Var z,a,b,y1,y2,y3:real;

{вычисление th с помощью процедуры}

Procedure th(x:real;var y:real);

var c:real;

Begin

c:=exp(2*x);

y:=(c-1)/(c+1);

end;

BEGIN

writeln('Введите переменные:');

write('a='); readln(a);

write('b='); readln(b);

th(a,y1); {обращения к процедуре th}

th(a-b,y2);

th(a*a-b*b,y3);

z:=(sqr(y1)+y2)/sqrt(y3);

writeln(Lst, 'z=',z:12, ' при a=',a:4:1,

' и b=',b:4:1);

END.

 

 







Date: 2016-02-19; view: 361; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.011 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию