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

Индексы массива

Ссылаться на элементы массива можно по их индексам. У каждого элемента массива имеется уникальный числовой индекс, идентифицирующий его. Если массив одномерный, индекс элемента ѕ это номер его строки. Например, индекс элемента, находящегося в третьей строке одномерного массива, равен 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 не создает переменные; она просто скрывает от текущей программы переменные, объявленные в программах более высокого уровня.

 

Примеры:

  1. Напишем программу для сложения двух векторов длины 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

 

Обратите внимание на то, что при передаче массивов в качестве параметров нужно использовать символ @ в качестве явного указателя на передачу параметров «по ссылке».

 

  1. Напишем программу для сложения двух векторов длины 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

 

  1. Пример программы для получения матрицы 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 символов. Число округляется до целого.