Внутренние и внешние функции
Процедуры и функции пользователя
Программа интерполяции по Ньютону
Программа позволяет найти значение функции по значению переменной в промежуточной точке между узлами интерполяции.
Входные данные:
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 употребляется в тех случаях, когда необходимо сохранить значения локальных переменных между двумя последовательными обращениями к функции.