Внутренние и внешние функции

Процедуры и функции пользователя

Программа интерполяции по Ньютону

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

Входные данные:

N — степень полинома;

X(N), Y(N) — массивы х, у.

A – значение аргумента

Выходные данные:

L — значение полинома в точке A.

INPUT “Укажите степень полинома ”,N

DIM X(N), Y(N)

FOR i=0 TO N

PRINT “Укажите значения X и Y в ”; I;” узле”;

INPUT “ ”,X(i), Y(i)

NEXT i

INPUT “Укажите значение аргумента Х ”,A

REM подпрограмма интерполяции по Ньютону

L=Y(0): S=1

FOR I=N TO 1 STEP -1

I1=N-I

FOR K=0 TO I-1

Y(K)=(Y(K+1)-Y(K))/(X(K+1+I1)-X(K))

NEXT K

S=S*(A-X(I1)): L1=L

L=L+Y(0)*S

NEXT I

PRINT “Значение функции”;L

END

 

 

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

Внутренняя функция объявляется оператором DEF FN. При этом может быть два варианта использования данной функции: однострочная и многострочная.

 

Формат однострочной функции DEF FN:

DEF FNnn…nt(x1,x2, …,xm)=<выражение>

Здесь DEF – оператор; FN –стандартное имя функции; nn…n –расширение имени функции; t – тип переменной (результата вычисления функции); xi – формальные параметры. Имя функции может содержать до 40 латинских символов. Число формальных параметров может быть шестнадцать.

Пример 9.4.16. Вычислить путь, пройденный автомобилем, если известны начальный путь S0, скорость v, ускорение – а, и время движения автомобиля –t:

DEF FNput(S0,v,a,t)=S0+v*t+a*t^2/2

 

Формат многострочной функции DEF:

DEF FNnn…nt(x1,x2, …,xm)

у=<выражение>

FNnn…nt=y

END DEF

Строка FNnn...nt=y присваивает результат вычисления переменной с именем, равном имени функции.

Пример 9.4.17. Вычислить факториал числа N

DEF FNfactarial#(N)

F=1

FOR Fact =1 TO N

F=F*Fact

NEXT Fact

FNfactarial#=F

END DEF

Используются функции пользователя так же, как и стандартные функции языка Бейсик.

REM вычисление факториала

Input “Введите М “,M

y= FNfactarial#(M): PRINT “Факториал ”;М;”равен”; y

или PRINT "Факториал";М;"равен"; FNfactarial#(M)

Функция пользователя должна быть объявлена в начале программы, до ее использования.

 

Внешние функции описываются следующим образом:

FUNCTION <имя>[(формальные параметры)] [STATIC]

<тело программы>

<имя>=<результат>

END FUNCTION

Формат внешней функции аналогичен формату внутренней многострочной функции. Имя функции может начинаться с любых символов.

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

DECLARE FUNCTION <имя>(параметры) [STATIC]

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

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