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


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

QB позволяет программисту определить новую (собственную, пользовательскую) функцию. Для определения функции служат операторы FUNCTION и ENDFUNCTION:

FUNCTION имя [(список_формальных_параметров)] операторы [EXITFUNCTION] операторы имя = выражение END FUNCTION

где: FUNCTION–служебное слово, определяющее заголовок подпрограммы-функции;имя - допустимое имя переменной, которое может включать один из суффиксов явного объявления типа функции (тип возвращаемого функцией значения). При отсутствии такого суффикса тип функции определяется типом переменной имя, установленным оператором DEFтип или по умолчанию; список_формальных_параметров - перечень имен для обозначения аргументов функции с указанием их типа.Имеет следующий формат:

переменная [( )] [AS тип][, переменная [( )] [AS тип]]

Если параметр является массивом, то после имени соответствующей переменной ставятся пустые круглые скобки. Например, в следующем примере в функцию Fпередается переменная целого типа N и вещественный массив двойной точности B. Сама функция Fвозвращает результат вещественного типа, на что указывает суффикс, стоящий после имени функции #.Тип переменной может быть указан и явно.

FUNCTION F#(N%, B#()) или FUNCTION F#(N as Integer, B() as Double)

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

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

Для досрочного выхода из функции может быть использован оператор

EXIT FUNCTION

EndFunction – служебные слова, ограничивающие содержательную часть функции.

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

Пример 1.Требуется создать пользовательскую функцию f=x2+sin(x+z).

Решение. На рис.14 приведена схема алгоритма функции, а на рис. 15 – схема алгоритма вызывающего (основного) модуля.

  Рис.14 Рис. 15

 

Function f (x as double, z as double) f=x^2+sin(x+z) End Function

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

Вычислить с помощью функции fвыражение s=f(a,b)+f(a,c)-f(c,b). Главная программа и вызов функцииf:

Cls Dim a as double, b as double, c as double Dim s as double Input “введитеa,b,c ”, a,b,c S=f(a,b)+f(a,c)-f(c,b) ‘ вызов_функции_f_в_главном_модуле Print “s=”;s

Пример 2. Разработать функцию для поиска максимального элемента строки с номером Kв матрице B(M, N). Применить эту функцию для построения одномерного массива из максимальных элементов строк заданной матрицы A (10,5).

Решение. На рис.16 приведена схема алгоритма функции, а на рис. 17 – схема алгоритма вызывающего (основного) модуля.

Рис. 16   Рис. 17

 

‘ вызывающий_модуль Cls DimA(1 to 10, 1 to 5) assingle, C(1 to 10) assingle Dim i as integer, j as integer For i=1 to 10 For j=1 to 5 Print “A(;”i;”,”;j;”)=”; Input A(i, j) Next j Next i For i=1 to 10 C(i)=MaxArray(A(), 10, 5, i) Next i Cls Print “МассивА” For i=1 to 10 For j=1 to 5 Print A(i, j), Next j Print Next i Print Print “МассивС” For i=1 to 10 Print C(i); Nexti ‘ функция по поиску максимального элемента Function MaxArray (B(), M as integer, N as integer, K as integer) Dim Max as single, i as integer Max=B(K,1) For i=2 to N If B(K,i)>Max Then Max=B(K,i) Next i MaxArray=Max End Function

Процедуры

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

Для определения процедуры служат операторы SUB и END SUB, имеющие следующий формат:

SUB имя [(список_формальных_параметров)] операторы [EXIT SUB] операторы END SUB

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

Вызов процедуры из некоторой программы (процедуры) производится одним из двух способов:

· с помощью оператора CALL, имеющего следующий формат:

CALL имя_процедуры [(список_фактических_параметров)]

Например, CALL TestSub (3, K)

· указанием имени процедуры в начале строки, за которым следует список параметров через запятую, но без охватывающих круглых скобок. Например,

TestSub 3, K

Количество фактических параметров, порядок их следования и тип в операторе CALL должны соответствовать списку формальных параметров в операторе SUB при описании процедуры. Если фактическим параметром является массив, то после его имени ставятся пустые круглые скобки.

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



Дата добавления: 2016-05-31; просмотров: 2130;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.