Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Обращение к функции

Читайте также:
  1. HR– менеджмент: технологии, функции и методы работы
  2. II Частные производные функции нескольких переменных
  3. III Полный дифференциал функции нескольких переменных. Дифференциалы высших порядков
  4. III. Основные функции Управления
  5. IV. Функции
  6. IV. Функции
  7. V. Опосредствование обмена денежным обращением

 

 

Отличие функции от процедуры состоит в том, что

- в заголовке функции после списка параметров необходимо указать тип функции (то есть тип вычисляемого ею результата) - имя ранее объявленного или стандартного типа,

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

- в объявлении функции её имя (а не обращение к ней, делающее подпрограмму рекурсивной) не должно встречаться в правой части операторов присваивания или в выражениях,

- в объявлении функции должен быть хотя бы один оператор, присваивающий её имени, или объявленной по умолчанию локальной (известной только внутри функции) переменной Result того же типа, что и тип функции, результат вычислений,

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

Обращение к функции можно так же, как и обращение к процедуре, записывать как отдельный оператор в режиме расширенного синтаксиса, используемом в Delphi по умолчанию. Обращение к функции отдельным оператором может иметь смысл, когда интересующий нас результат представлен параметрами, а не именем функции. Отключить режим расширенного синтаксиса можно директивой {$X-} или {$EXTENDEDSYNTAX OFF}, но тогда не будет объявлена по умолчанию локальная переменная Result, и при попытке её использования компилятор сообщит об ошибке.

Пример 1. Составить и использовать функцию, возвращающую максимальный из первых N элементов массива X(N), N≤100.

 

type

tMas=array[1..100] of Real;

.....

function MaxMas(N:Integer; const X:tMas):Real;

var

i:Integer;

begin

Result:=X[i];

for i:=2 to N do

if X[i]>Result then

Result:=X[i];

end;

.....

var

Y:tMas;

begin // РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ

.....

//Вызов функции в операторе вывода

WriteLn('Максимальный из сорока элементов массива Y = '

,MaxMas(40, Y));

.....

end.

 

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

 

function MaxMas(N:Integer; const X:tMas):Real;

var

i:Integer;

R:Real;//Дополнительная переменная

begin

R:=X[1];

for i:=2 to N do

if X[i]>R then

R:=X[i];

//Чтобы функция возвратила вычисленное значение,

//оно должно быть присвоено её имени

MaxMas:=R;

end;

 

Использование функций позволяет не только сделать текст программы более удобным для понимания её алгоритма, но и уменьшить его при необходимости повторных вычислений в разных частях программы.

Пример 2. Составить программу поиска приближенных значений корней уравнения

и их уточнённых значений методом половинного деления.

 

program Project1;

{$APPTYPE CONSOLE}

uses

SysUtils;

 

//Функция, вычисляющая выражение, входящее в уравнение

function F_PX(const P,X:Real):Real;

var

PX:Real;

begin

PX:=P*X;

F_PX:=X*Cos(3*PX)/P/12-Sin(3*PX)/Sqr(P)/36

-3*X*Cos(PX)/P/4 +3*Sin(PX)/Sqr(P)/4;

end;

 

//функция, уточняющая значение корня

function KorenF_PX(P,X0,X1,Eps:Real):Real;

var

F0,F,F1,X:Real;

begin

F0:=F_PX(P,X0);

repeat

X:=(X0+X1)/2;

F:=F_PX(P,X);

if F0*F>0 then

X0:=X

else

X1:=X;

until Abs(X1-X0)<Eps;

KorenF_PX:=X;

end;

 

var

P,X, A, B, dX, F0, F1,Eps,Koren:Real;

 

begin // РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ

Write('Введите границы интервала и шаг аргумента:');

ReadLn(A,B,dX);

Write('Введите параметр выражения P: ');ReadLn(P);

Write('Введите требуемую точность корня: ');ReadLn(Eps);

F0:=F_PX(P,A);

dX:=0.01;

X:=A+dX;

while X<B+0.005 do

begin

F1:=F_PX(P,X);

if F0*F1<0 then

begin

//Найдены приближенные значения корня

//X-dX - приближение, меньшее корня

//X - приближение, большее корня

WriteLn(X-dX,' = левое приближение корня');

//Поиск приближения с точностью Eps

Koren:= KorenF_PX(P,X-dX,X,Eps);

//Вывод результатов

WriteLn(Koren,' = корень с точностью ',Eps);

WriteLn(F_PX(P,Koren),' = значение функции в корне');

WriteLn;

end;

F0:=F1;

X:=X+dX;

end;

ReadLn;

end.


Дата добавления: 2015-07-26; просмотров: 83 | Нарушение авторских прав


Читайте в этой же книге: Процедуры | Список формальных параметров | Задания 5.2 для самостоятельной проработки | Рекурсивные подпрограммы | Пример выполнения задания на составление рекурсивной подпрограммы | Параметры - открытые массивы | Динамические массивы | Примеры программ с подпрограммами |
<== предыдущая страница | следующая страница ==>
Задания 5.1 для самостоятельной проработки| Пример 5.2 выполнения задания

mybiblioteka.su - 2015-2024 год. (0.01 сек.)