- •Начало работы в среде разработчика FoxPro
- •Константы и переменные
- •Примеры
- •Примеры
- •Примеры
- •Комментарии
- •Процедуры и функции
- •Примеры:
- •Индексы массива
- •Примеры
- •Примеры
- •Примеры
- •2. Считывание информации из файла.
- •3. Перемещение по файлу
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Задание
- •Примеры
- •Задание
- •Графические функции
- •Шрифтовые свойства
- •Метод line
- •Метод box
- •Метод Circle
- •Функции даты и времени
- •Use [файл | ?] [in рабочаяОбласть] [again] [alias Псевдоним] [exclusive | shared] [noupdate]
- •Добавление и изменение значений полей
- •Относительное перемещение:
- •Контрольные работы
Индексы массива
Ссылаться на элементы массива можно по их индексам. У каждого элемента массива имеется уникальный числовой индекс, идентифицирующий его. Если массив одномерный, индекс элемента ѕ это номер его строки. Например, индекс элемента, находящегося в третьей строке одномерного массива, равен 3.
Элементы в двумерных массивах обозначаются двумя индексами. Первый индекс указывает положение элемента в строках, а второй индекс ѕ его положение в столбцах. Например, индексами элемента, находящегося в третьей строке и четвертом столбце двумерного массива, будут 3,4. Подробнее об индексах элементов массивов см. описание функции ASUBSCRIPT().
Индекс (индексы) первого элемента массива всегда равен 1. Если массив двумерный, его также можно обозначить одним числом. Функция AELEMENT() возвращает одиночный индекс для пары строчного и столбцевого индексов, а функция ASUBSCRIPT() возвращает строчный и столбцевой индексы элемента из его одиночного индекса.
Изменение размеров массивов
Повторно выдавая команду DIMENSION, можно изменять размер и размерность массива. Размер массива можно увеличивать и уменьшать, одномерные массивы можно преобразовывать в двумерные, а двумерные ѕ в одномерные.
Если число элементов в массиве увеличивается, значения всех элементов первоначального массива копируются в новый расширенный массив. Дополнительные элементы массива инициализируются значением "ложь" (.F.).
Области видимости переменных
Команда PUBLIC
Определяет глобальные переменные памяти или массивы.
Синтаксис
PUBLIC MemVarList
или
PUBLIC [ARRAY] ArrayName1 (nRows1 [, nColumns1]) [, ArrayName2 (nRows2 [, nColumns2])] ...
Параметры
MemVarList Задает одну или несколько переменных памяти, которые необходимо инициализировать и обозначить как глобальные.
[ARRAY] ArrayName1 (nRows1 [, nColumns1]) [, ArrayName2 (nRows2 [, nColumns2])] ... Задает один или несколько массивов, которые необходимо инициализировать и обозначить как глобальные. Описание аргументов см. DIMENSION.
Комментарии
Глобальные переменные и массивы можно использовать и модифицировать из любой программы, выполняемой в ходе текущего сеанса Visual FoxPro.
Переменные памяти и массивы, созданные с помощью команды PUBLIC, инициализируются значением "ложь" (.F.), за исключением глобальных переменных FOX и FOXPRO, инициализируемых значением "истина" (.T.). Глобальные переменные FOX и FOXPRO можно использовать для условного выполнения кода в зависимости от того, какой именно продукт работает.
Любая переменная памяти или массив, создаваемые в окне команд, автоматически становятся глобальными.
Если вы хотите объявить переменную памяти или массив глобальным, сделайте это до присваивания им значений.
Если вы в своей программе присвоите значение переменной памяти (или массиву), а позже объявите эту переменную (массив) глобальной с помощью команды PUBLIC, Visual FoxPro сгенерирует ошибку синтаксиса.
Команда LOCAL
Создает локальные переменные памяти и массивы переменных памяти.
Синтаксис
LOCAL MemVarList
или
LOCAL [ARRAY] ArrayName1 (nRows1 [, nColumns1]) [, ArrayName2 (nRows2 [, nColumns2])] ...
Параметры
MemVarList Задает одну или несколько локальных переменных памяти, которые предстоит создать.
[ARRAY] ArrayName1 (nRows1 [, nColumns1]) [, ArrayName2 (nRows2 [, nColumns2])] ... Задает один или несколько локальных массивов, которые предстоит создать. Описание аргументов см. в DIMENSION.
Комментарии
Локальные переменные памяти и массивы переменных памяти могут использоваться и модифицироваться только в рамках процедуры или функции, в которой они созданы, и остаются недоступными для программ более высокого или более низкого уровня. Локальные переменные памяти и массивы освобождаются, как только содержащая их процедура или функция завершает выполнение.
Переменные памяти и массивы, созданные с помощью команды LOCAL, инициализируются значением "ложь" (.F.). Если вы хотите объявить переменную памяти или массив как локальный, это необходимо сделать до присвоения значения. Если сначала присвоить переменной памяти или массиву значение, а потом объявить ее (его) локальной с помощью команды LOCAL, Visual FoxPro сгенерирует сообщение об ошибке "Illegal redefinition of variable" [Недопустимое переопределение переменной].
Локальные переменные можно передавать по ссылке.
Не сокращайте слово LOCAL, чтобы не смешивать его с командой LOCATE.
Команда PRIVATE
Скрывает от текущей программы заданные переменные памяти или массивы, которые были определены в вызывающей программе.
Синтаксис
PRIVATE MemVarList
или
PRIVATE ALL [LIKE Skeleton | EXCEPT Skeleton]
Параметры
MemVarList Задает переменные памяти или массивы, которые необходимо объявить локальными.
ALL LIKE Skeleton Задает скрытие всех переменных памяти и массивов, имена которых соответствуют шаблону Skeleton, который может включать символы подстановки ѕ вопросительный знак (?) и звездочку (*).
ALL EXCEPT Skeleton Задает скрытие всех переменных памяти и массивов, имена которых не соответствуют шаблону Skeleton, который может включать символы подстановки ѕ вопросительный знак (?) и звездочку (*).
Комментарии
Скрытие переменных, созданных в программах более высокого уровня, позволяет манипулировать в текущей программе переменными с теми же именами, что и локальные переменные, не изменяя значений скрытых переменных. После того как программа, содержащая команду PRIVATE, завершит выполнение, все переменные памяти и массивы, объявленные локальными, станут вновь доступными.
Команда PRIVATE не создает переменные; она просто скрывает от текущей программы переменные, объявленные в программах более высокого уровня.
Примеры:
Напишем программу для сложения двух векторов длины 10. Значения этих векторов зададим при помощи генератора случайных чисел – rand()
N=10
Dimension a(n), b(n), c(n)
For I=1 to n
A(i) = rand()
B(i)= 3*rand()
C(i)=0
Endfor
Сумма(@a,@b,@c,n)
?
For I=1 to n
?? c(i)
endfor
procedure сумма
parameters a,b,c,n
local i
for I=1 to n
c(i)=a(i)+b(i)
endfor
Обратите внимание на то, что при передаче массивов в качестве параметров нужно использовать символ @ в качестве явного указателя на передачу параметров «по ссылке».
Напишем программу для сложения двух векторов длины 10. Значения этих векторов зададим при помощи генератора случайных чисел – rand(). Но запишем фрагменты программы для задания первоначальных значений векторов и печати векторов в виде процедур.
N=10
Dimension a(n), b(n), c(n)
задать_вектор(@a,1,n)
задать_вектор(@b,3,n)
задать_вектор(@с,0,n)
печать_вектора(@a,n)
печать_вектора(@b,n)
печать_вектора(@c,n)
Сумма(@a,@b,@c,n)
печать_вектора(@c,n)
Procedure задать_вектор
Parameters a,x,n
For I=1 to n
A(i) = x*rand()
Endfor
return
procedure печать_вектора
parameters a,n
?
For I=1 to n
?? a(i)
endfor
return
procedure сумма
parameters a,b,c,n
local i
for I=1 to n
c(i)=a(i)+b(i)
endfor
Пример программы для получения матрицы NxM при помощи генератора случайных чисел.
N=10
M=8
Dimension a(n,m)
Получить_матрицу(@a,n,m)
Распечатать_матрицу(@a,n,m)
Procedure Получить_матрицу
Parameters a,n,m
Local i,j
For i=1 to n
For j=1 to m
A(i,j)=1+2*rand()
* задаем элементы матрицы случайными числами в диапазоне от 1 до 3
Endfor
Endfor
Return
Procedure Распечатать_матрицу
Parameters a,n,m
Local i,j
For i=1 to n
?
For j=1 to m
?? A(i,j)
Endfor
Endfor
Return
Строковые функции
Упражнения и задания:
Перед выполнением каждого задания обязательно откройте HELP и найдите описания команд, после чего выполняйте упражнения в командном окне:
1. Определение длины строки. Функция len()
Функция len(s) определяет длину строки s.
Примеры
1.
? len("Привет")
Результат: 6
2.
s="Это тестовая строка"
? len(s)
Результат: 19
3.
x=len(s)
? x
Результат: 19
2. Удаление пробелов. Функции alltrim(), ltrim(), rtrim(), trim()
Функция удаления пробелов alltrim(), trim(), ltrim(), rtrim().
Примеры
1. Удаляем завершающие пробелы:
? "*" + trim(" Тестовая строка ")+"*"
Результат: * Тестовая строка*
2. Удаляем ведущие пробелы:
? "*" + ltrim(" Тестовая строка ")+"*"
Результат: *Тестовая строка *
3. Удаляем пробелы и слева и справа:
? "*" + alltrim(" Тестовая строка ")+"*"
Результат: *Тестовая строка*
3. Преобразование строки в число. Функция str()
Функция str(V,n1,n2) преобразует число V в текстовую строку длиной n1 - позиций, в которой под дробную часть отводится n2 - позиций. По умолчанию (если n1 и n2 не указаны) функция str() создает текстовую строку длиной 10 символов. Число округляется до целого.