Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АЛТАЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ.docx
Скачиваний:
11
Добавлен:
06.08.2019
Размер:
163.01 Кб
Скачать

Процедуры и функции

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

В Visual FoxPro процедуры выглядят приблизительно так:

 

PROCEDURE myproc

       * Сюда помещают код процедуры

ENDPROC

 

По традиции процедуры разрабатываются для совершения определенных действий, а функции ѕ для вычисления и возврата величины. В Visual FoxPro функции выглядят так же, как и процедуры:

 

FUNCTION myfunc

       * Сюда помещают код функции

ENDFUNC

 

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

Если процедуры и функции размещены в отдельном файле, то сделать их доступными в программе можно командой SET PROCEDURE TO. Например, если имеется файл с именем FUNPROC.PRG, то можно сделать его доступным в программе, введя в окно Command следующую команду:

SET PROCEDURE TO funproc.prg

 

Передача параметров в подпрограммы

Для передачи параметров из вызывающей программы, локальным переменным или элементам массивов подпрограммы служит оператор PARAMETERS.

Синтаксис

PARAMETERS ParameterList

Параметры

ParameterList Задает имена переменных памяти или массивов, которым присваиваются данные. Параметры в списке ParameterList разделяются запятыми. Их должно быть, по крайней мере, столько же, сколько в операторе DO ... WITH. Если в операторе PARAMETERS указано больше переменных или массивов, чем было передано оператором DO ... WITH, то оставшиеся переменные или массивы инициализируются значением "ложь" (.F.). Всего может быть передано не более 27 параметров.

Комментарии

Когда команда PARAMETERS используется совместно с DO ... WITH, она должна быть первым исполняемым оператором в вызываемой программе, процедуре или пользовательской функции.

По умолчанию оператор DO ... WITH передает в процедуры переменные и массивы по ссылке. Если какое-либо значение в вызываемой процедуре изменяется, то в соответствующую переменную или массив вызывающей программы возвращается новое значение. Если вы хотите передать переменную или массив по значению, поставьте в скобки имя переменной или массива в списке параметров DO ... WITH. Изменения, которым параметр подвергнется в вызываемой процедуре, не будут передаваться обратно в вызывающую программу.

В процедуру и в пользовательскую функцию переменные по умолчанию передаются по ссылке. Чтобы передавать переменные в пользовательскую функцию по ссылке, используйте команду SET UDFPARMS TO REFERENCE или символ @.

 

Примеры:

  1. Напишем программу табулирования функции f(x)=x^2+4, текст которой оформлен в виде подпрограммы-функции для  -5 <= x <=5.

 

for x=-5 to 5 step 0.2

? x, f(x)

endfor

 

function f

parameters x

g=x^2+4

return g

 

  1. Напишем программу табулирования функции f(x)=x^2+4, текст которой оформлен в виде подпрограммы-процедуры для  -5 <= x <=5.

 

for x=-5 to 5 step 0.2

do вычислить with f,x

? x, f

endfor

 

procedure вычислить

parameters g, y

g=y^2+4

return

 

  1. Напишем программу табулирования функции f(x)=x^2+4, текст которой оформлен в виде подпрограммы-процедуры для  -5 <= x <=5. Причем вызывать подпрограмму-процедуру будем «как функцию» с передачей параметров «по ссылке»

 

for x=-5 to 5 step 0.2

вычислить(@f,x)

? x, f

endfor

 

procedure вычислить

parameters g, y

g=y^2+4

return

 

Здесь символ @ в списке параметров при вызове процедуры указывает, что параметр f передается в процедуру «по ссылке».

 

Определение количества параметров, переданных в подпрограмму. Функция PARAMETERS()

Для определения количества параметров, переданных последней вызванной программе, процедуре или пользовательской функции используется функция PARAMETERS().

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

 

PROCEDURE testpar

PARAMETERS gn1,gn2,gn3

gcMessage = 'Всего передано '+ALLTRIM(STR(PARAMETERS()))+" параметров"

WAIT WINDOW (gcMessage)

RETURN

 

При вызове этой процедуры командой DO testpar WITH 1,2,.t.,3,[Строка] в окно WAIT будет выведен текст: "Всего передано 5 параметров"

Массивы

Создание массивов

Для определения массивов в FoxPro используется команда DIMENSION.

Синтаксис

DIMENSION ArrayName1 (nRows1 [, nColumns1])

            [, ArrayName2 (nRows2 [, nColumns2])] ...

Параметры

ArrayName1 Задает имя массива. Одной командой DIMENSION можно создать сразу несколько массивов, если включить имена всех этих массивов (ArrayName2, ArrayName3 и т.д.).

nRows1 [, nColumns1] Задает размер создаваемого массива. Если указать только nRows1, будет создан одномерный массив, состоящий из одного столбца и nRows1 строк.

Например, следующая команда создает одномерный массив gaArrayOne, содержащий один столбец и десять строк:

DIMENSION gaArrayOne(10)

Чтобы создать двумерный массив, укажите как nRows1, так и nColumns1. Аргумент nRows1 задает число строк в массиве, а nColumns1 ѕ число столбцов. В следующем примере создается двумерный массив gaArrayTwo, содержащий две строки и четыре столбца:

DIMENSION gaArrayTwo(2,4)

Нужно указывать размер каждого массива, создаваемого командой DIMENSION. В следующем примере создаются три массива: gaArrayOne и gaArrayTwo из предыдущих примеров, а также третий массив gaArrayThree:

DIMENSION gaArrayOne(10), gaArrayTwo(2,4), gaArrayThree(3,3)

В командах DIMENSION и DECLARE выражения размерности можно заключать как в круглые скобки, так и в квадратные. Например, приведенные ниже две команды создают идентичные массивы:

DIMENSION gaArrayOne(10), gaArrayTwo[2,4], gaArrayThree(3,3)

DIMENSION gaArrayOne[10], gaArrayTwo(2,4), gaArrayThree[3,3]

Элементы массива

Размер массива определяет, сколько элементов он в состоянии вместить. Каждый элемент массива может хранить одну порцию информации. Чтобы определить, сколько элементов содержит массив и какой объем информации в нем можно хранить, умножьте число строк массива (nRows1) на число столбцов (nColumns1).

Элементы массива могут содержать данные любого типа; когда массив впервые создается, его элементы инициализируются значением "ложь" (.F.). С помощью команды STORE можно проинициализировать все элементы массива одним значением, если установка SET COMPATIBLE имеет значение FOXPLUS или OFF (принимается по умолчанию). Например:

DIMENSION gaArray(10,3)

STORE 'initial' TO gaArray