Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сокращённые консультации к ГОС.doc
Скачиваний:
3
Добавлен:
21.09.2019
Размер:
377.34 Кб
Скачать

26. Создание и использование переменных

Пользовательские переменные, используемые при программировании, могут иметь различный статус. Статус (область видимости) переменных можно объявить выполнением командой.

LOCAL <список временных переменных > - объявляет переменные, которые доступны только в пределах программы в которой они объявлены. В вызываемых этой программой процедурах и функциях – недоступны. После завершения программы эти переменные удаляются из памяти.

PRIVATE <список временных переменных> – объявляет ранее созданные переменные или массивы, как доступные в пределах программы, в которой они объявлены, а также во всех процедурах и функциях, вызываемых из этой программы. Изменения локальных временных переменных не отражаются на временных переменных с теми же именами в других программах. При завершении программы значения локальных временных переменных, созданных командой PRIVATE, исключаются.

PUBLIC <список временных переменных > – объявляет глобальные временные переменные, доступные из любой программы и из командного окна. Не уничтожаются при завершении программы. Значения этих переменных видны из всех процедур и функций. Глобальные переменные должны быть объявлены до присвоения им значений.

Статус переменной задаётся использованием рассмотренных служебных слов, например:

PUBLIC rec && переменной reg присваивается статус PUBLIC

Кроме пользовательских переменных в FoxPro существуют системные переменные, которые являются рези­дентными и не могут быть уничтожены. Такие переменные имеют специальные имена, начинающиеся с символа подчёркивания. Например, системная переменная _SCREEN.Cls применяется для управления главным окном программы FoxPro и служит для его очистки. Другим примером является системная переменная _DIARYDATE, которая хранит дату, выбранную в окне календаря, открываемого командой ACTIVATE WINDOW calendar. По умолчанию системной переменной _DIARYDATE присваивается значение текущей даты. Если же в окне календаря выбрать другую дату, указанная переменная принимает выбранное значение.

Команда присваивания

Имя переменной начинайте с буквы, используйте только буквы, цифры и подчеркивания. Имя переменной может быть длиной до 255 знаков. Имя переменной не должно быть зарезервированным словом языка Foxpro или совпадать с его первыми четырьмя буквами. Напомним, что язык программирования Visual FoxPro регистронезависим, т.е. имена переменных, команды и прочее можно набирать как заглавными, так и строчными буквами.

Следующие команды создают переменные и присваивают им зна­чения:

<имя переменной>=<выражение>

или STORE <выражение> ТО <имена переменных>

Если одной переменной, в процессе работы, последовательно присваиваются разные значения, то тип переменной определяется типом последнего присваиваемого ей выражения.

Чтобы попробовать работу с переменными, запустите программу FoxPro. В окне программы сверните или закройте окно Task Pane Manager. В окно Command вводите рассмотренные ниже команды.

Символьные константы должны быть взяты в апо­строфы, кавычки или квадратные скобки.

Например:

Х='24' и Y=24, где X - символьная, a Y - числовая переменные.

Тип переменной «Дата» должен быть заключён в фигурные скобки. При этом дата должна быть указана в правильном формате.

Примеры:

А=2

V='Программа успешно завершена'

Birth={^2004/07/10} && здесь переменной Birth присваивается значение типа дата;

B=5* (2+3) и

STORE 5*(2+3) TO B && В обоих случаях переменной B присваивается значение результата вычисления выражения 5*(2+3).

Можно присвоить од­но и то же значение сразу нескольким переменным. Например:

STORE 27 ТО а, b && а=27 и b=27

Значение, присвоенное переменной, можно проверить, выполнив команду

?x

где x – имя переменной, например:

?a && 27

Чтобы вывести на экран значение переменной вместе с её именем, выполните команду:

?’Значение а =’, x && Значение а = 27

Заметим, что символ ? здесь является командой вывода. В результате исполнения команды вывода в главное окно будут выведены все следующие за командой символы, заключённые в апострофы «’» или в кавычки «”».

Имена переменных могут быть любыми. В предыдущих примерах мы использовали произвольные имена, состоящие из одного символа. Лучше, если имя переменной содержит сведения о её типе и статусе. В противном случае разобраться в логике программы, спустя время после её создания, становится сложно.

Microsoft рекомендует следующие правила именования переменных:

[Статус (область видимости)] Тип Имя переменной

Статус - указывается одним из символов:

l -LOCAL;

р - PRIVATE;

g - PUBLIC;

Тип - тип переменной, обозначается одним из следующих символов:

а – массив;

с - Character;

d - Date;

1 - Logical;

n - Number;

t -DateTime;

у - Currency;

u - Unknown (если параметр может принимать значения нескольких типов);

Рекомендуется отделять подчеркиванием первые два символа от имени переменной, например:

gc_FirstNane - глобальная строковая переменная.

Иногда, если есть вероятность совпадения имен полей с именами перемен­ных, перед именами переменных ставят префикс m с точкой. Например, m.lnIndex.

Просмотр переменных

Для просмотра всех пользовательских переменных выполнить команду:

DISPLAY MEMORY LIKE *

В результате выводится имя переменной, её статус, тип и присвоенное значение.

Команда

DISPLAY MEMORY

выводит на экран все переменные, включая системные. Имена системных переменных начинаются с символа подчёркивания.

Выполните команду DISPLAY MEMORY и ознакомьтесь со списком системных переменных. Значения системных переменных можно найти в литературе Л1, с364.

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

Ввод переменных по запросу

Ввод в переменные любого типа, при выполнении программы, может происходить командой ввода по запросу:

INPUT <запрос> ТО <переменная>

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

Например, для присвоения значения переменной a введите команду:

INPUT ‘Введите значение переменной a’ TO a && программа выводит указанный текст и ожидает введения значения переменной а

* введите значение и нажмите ввод

?a && выводится ввёденное значение переменной.

Сохранение переменных

Созданные переменные могут быть использованы только в текущем сеансе работы. Для их сохранения в файлах с расширением .mem или в Memo-поле текущей записи используется следующая команда:

SAVE TO <файл> | ТО MEMO <имя Меmо-поля> [ALL LIKE/EXCEPT <маска>]

Например:

SAVE TO fsave

* сохраняются все переменные в файле fsave.mem

SAVE TO fsave ALL LIKE a*

* сохраняются все переменные, начинающиеся с символа 'а'

SAVE TO fsave ALL EXCEPT a*

* сохраняются все переменные, кроме тех,

* которые начинаются с символа 'а'.

SAVE ALL LIKE a? TO fsave

* сохраняются все переменные, имена которых начинаются

* с символа ‘а’ и состоят из двух символов.

Для восстановления переменных необходимо выполнить команду

RESTORE FROM <файл> │ FROM MEMO<мемо-поле> [ADDITIVE]

При отсутствии опции ADDITIVE будут удалены все имеющиеся в памяти переменные.

Команда ожидания

Команда WAIT без операндов приостанавливает программу для просмотра промежуточных результатов. При этом на экран выводится сообщение "Press any key to continue". После нажатия любой клавиши или перемещения мыши, выполнение программы продолжается.

Для вывода символьного сообщения выполните команду:

WAIT ‘Нажмите любую клавишу’

Для вывода вашего собственного системного сообщения в верхнем правом углу экрана выполните команду: WAIT WINDOW ‘Привет программистам!’

27. Функции в FoxPro используются для анализа или преобразова­ния данных. Синтаксическая особенность функций - обязательное наличие скобок. Пробел между скобками недопустим. Всего функций более 450. Здесь рассмотрены лишь некоторые.

Использование функции обязательно приводит к возврату (выдаче) какого-либо значения. Например, чтобы узнать значение числа пи, используем функцию:

?PI() && выводится 3,14 (число десятичных знаков определяется настройками VFP

Арифметические функции

ABS(<выpN>) - вычисляет абсолютное значение <вырМ>.

Пример:

? ABS(-24.8) && 24 . 8

BETWEEN(<выp>,<выpl>,<выp2>) - возвращает значение "Истина" (.Т.), если <выр> больше или равно <выр1> и меньше или равно <выр2>, иначе - "Ложь" (.F.). Тип всех трех выра­жений должен быть одинаковым (строка, число, дата).

Пример:

? BETWEEN(4 ,1, 6) && .Т.

? BETWEEN({^2016.06.05},{^2003.10.10},{^2015.12.01}) && . F.

USE kadr LIST FOR BETWEEN(YEAR(dtr),1943,1960) fam,dtr

Последняя команда выводит все записи из базы KADR.DBF, где дата рождения находится между 1943 и 1960 годами.

СEILING(<ВырN>) - возвращает ближайшее целое число боль­шее или равное <вырN>. Аргумент может иметь любой знак.

Пример:

? CEILING(6.3), CEILING(-8.4) && 7 и -8

FLOOR(<выpN>) - ближайшее целое меньшее или равное <вырN>.

Пример:

? FLOOR(6.3), FLOOR(-8.4) && 6 и -9

INT(<выpN>) - целая часть <вырN>

Пример:

? INT (18.7) && 18

ROUND(<вырNl>,<вырN2>) - округление <вырNl> до задан­ного в <вырN2> количества знаков после запятой.

Пример:

? ROUND (-342.268,1) && -324 .3

SIGN(<вырN>) - возвращает значения: 1, если число положительное, -1, если отрицательное, 0, если нуль.

Пример:

? SIGN(5), SIGN(-7), SIGN(O) && 1, -1 и 0

Степенные функции

ЕХР(<вырN>) - экспонента <вырN> - основание натурального логарифма "е" в степени <вырN>.

LOG(<вырN>) - натуральный логарифм <вырN>. Аргумент должен быть больше нуля.

LOG10(<вырN>) - десятичный логарифм <вырN>. Аргумент должен быть больше нуля.

SQRT(<вырN>) - квадратный корень <вырN>. Аргумент должен быть положительным.

Тригонометрические функции

SIN(<вырN>) - синус(<вырN>). <вырN> задается в радианах. Результат, возвращаемый функцией, находится в диапазоне -1 - +1.

Пример:

SIN(1.3) && 0.96

СОS(<вырN>) - косинус(<вырN>). Аргумент задается в радианах.

TAN(<вырN>) - тангенс(<вырN>). Аргумент задается в радианах.