Использование функций

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

Заголовок функции записывается в соответствии со следующим синтаксисом:

Function <имя функции> [(<список формальных параметров>)]:

<тип результата>;

Конструкция <имя функции> определяет уникальный идентификатор функции, используемый для ее вызова.

Конструкция <список формальных параметров> задает переменные, которые являются входными параметрами.

Конструкция <тип результата> определяет тип результатного значения функции.

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

<имя функции>:= <результатное значение>;

Вызов функции обеспечивается включением имени функции в состав выражения.

Пример.

Программный код обеспечивает вычисление индекса массы тела и определение недостающего или избыточного веса.

Программный код включает две функции.

Функция "IndexMas" определяет индекс массы тела, который вычисляется как вес в килограммах, деленный на квадрат роста в метрах.

Функция "Wmaxmin" определяет максимально допустимый либо минимально допустимый вес, соответствующий заданному росту.

Program PrjFuncMas;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Var

Height,Weight,Wmax,Wmin, Wdif,IndexM:Real;

FL: Boolean;

// Функция определения индекса массы тела

Function IndexMas(Height:Real; Weight:Real): Real;

Begin

IndexMas:= Weight / (Height * Height);

End; {Function}

// Функция определения максимально

// (минимально) допустимого веса

Function Wmaxmin(Height: Real; FL: Boolean): Real;

Begin

If FL = True Then

Wmaxmin:= 24.9 * (Height * Height)

Else

Wmaxmin:= 18.5 * (Height * Height);

End; {Function}

Begin

Writeln ('Ykazite rost(metr)');

Readln (Height);

Writeln ('Ykazite ves');

Readln (Weight);

IndexM:= IndexMas(Height, Weight);

Writeln ('Index massi =', IndexM:6:2);

If IndexM < 18.5 Then

Begin

FL:= False;

Wmin:= Wmaxmin(Height, FL);

Wdif:= Wmin - Weight;

Writeln ('Nedostatok vesa=', Wdif:6:2)

End;

If (IndexM > 18.5) And (IndexM < 24.9) Then

Writeln ('Normalnii ves');

If IndexM > 24.9 Then

Begin

FL:= True;

Wmax:= Wmaxmin(Height, FL);

Wdif:= Weight - Wmax;

Writeln ('Izbitochnii ves =', Wdif:6:2);

End;

Readln;

End.

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

Пример.

Имеется документ, который содержит информацию об остатках предметов. Документ содержит следующие реквизиты:

Во-первых, "дата". Реквизит представлен в виде символьной строки длиной 6 символов (два символа определяют месяц, четыре символа определяют год);

Во-вторых, "код цеха". Реквизит представлен в виде символьной строки длиной 10 символов;

В-третьих, "название предмета". Реквизит представлен в виде символьной строки длиной 20 символов;

В-четвертых, "цена предмета". Реквизит представлен в виде числа, имеющего дробную часть;

В-пятых, "количество на конец периода". Реквизит представлен в виде числа, не имеющего дробной части;

В-шестых, "сумма на конец периода". Реквизит представлен в виде числа, имеющего дробную часть.

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

S (X – )

D = ——————————

N

, где

X - текущее значение реквизита “сумма на конец периода”;

- среднее арифметическое значение реквизита “сумма на конец периода”;

N - количество строк документа.

Program PrjFuncDisp;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Type

TRest = Record

Date:String[6];

CodC:String[10];

Name:String[20];

Price:Real;

Quant:Integer;

Sum:Real;

End;

TARest=Array [1..40] Of TRest;

Var

Rest:TARest;

I,N:Integer;

Disp:Real;

Function StatDisp(Rest:TArest; N:Integer): Real;

Var

I:Integer;

S, D, SR: Real;

Begin

S:=0;

For I:= 1 To N Do

S:= S + Rest[I].Sum;

SR:= S / N;

D:= 0;

For I:= 1 To N Do

D:= D + (Rest[I].Sum - SR)*(Rest[I].Sum - SR);

StatDisp:= D / N;

End; {Function}

Begin

Writeln('Vvedite chislo zapisei');

Readln(N);

For I:= 1 To N Do

Begin

Writeln ('Data');

Readln(Rest[I].Date);

Writeln ('Kod cexa');

Readln(Rest[I].CodC);

Writeln ('Nazvanie predmeta');

Readln(Rest[I].Name);

Writeln ('Cena predmeta');

Readln(Rest[I].Price);

Writeln ('Kolichestvo');

Readln(Rest[I].Quant);

Writeln ('Symma');

Readln(Rest[I].Sum);

End;

Disp:= StatDisp(Rest, N);

Writeln('Dispersia =',Disp:7:2);

Readln;

End.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: