Файл: Особенности и примеры использования массивов при разработке программ (Особенности использования массивов).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 16.05.2023

Просмотров: 86

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

Занимаясь программированием, мы достаточно часто сталкиваемся с использованием массивов. У многих эта тема вызывает достаточно много трудностей из-за непонимания того: что из себя представляют массивы и как с ними работать. Однако их использование было, есть и будет одной из наиболее важный частей написания программного кода. Именно поэтому была выбрана эта тема.

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

Если понять это не очень просто, то представьте себе «волшебную» коробку. В ней Вы можете создавать сколько угодно отделов и складывать что-то в эти отделы. При необходимости, Вы можете: удалять отделы; создавать новые; вытаскивать и использовать содержимое, которое в них находится; заменять содержимое отдельных отсеков чем-то другим; Вы можете даже хранить в одном из отсеков другой массив, который также содержит разные отделы. 

Цель работы – рассмотреть особенности и примеры использования массивов при разработке программ.

Так как массивы по-разному описываются в разных языках программирования, используются разные функции при работе с ними, то примеры использования будут рассмотрены на одном языке программирования – Visual FoxPro.

1. Особенности использования массивов

1.1 Понятие и назначение массивов

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

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


a1, а2, а3, …, аn.

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

Примеры массивов:

  • Х1, Х2, …, Хn  одномерный массив, состоящий из n элементов;
  • А0, А1, А2, …, А10  одномерный массив, состоящий из 11 элементов.

Массивы бывают одномерными  (один индекс), двумерными (два индекса) и т.д.

Структура массива всегда однородна. Массив может состоять из элементов типа integer , real или char , либо других однотипных элементов. Другая особенность массива состоит в том, что к любой его компоненте можно обращаться произвольным образом. Программа может сразу получить нужный ей элемент по его порядковому номеру (индексу). Номер элемента массива называется индексом. Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. Тип индекса определяет границы изменения значений индекса.

Рассмотрим массив Х1, Х2, …, Хn.  Здесь

  • Х – имя массива;
  • 1, 2,…, n – индексы (порядковые номера) элементов;
  • Х7  седьмой элемент массива Х.

Описание массивов на примере языка FoxPro

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

Массив – это объект языка, содержащий несколько элементов, доступ к элементу осуществляется по имени массива и индексам элемента, например:

declare twoDArray(3, 4)

&& Печатаем элемент twoDArray(2, 3) двумерного массива формы 3×4,

&& Элемент расположен во второй строке массива и его третьем столбце,

&& то есть имеет индексы равные 2 и 3

? twoDArray(2, 3)

В VFP можно работать как с одномерными массивами (векторами), так и с двумерными (матрицами).

Перед употреблением массив надо создать. Массив, как и скалярные переменные, создается командами LOCAL, PUBLIC, а также командами DECLARE и DIMENSION, например:

&& Создаем одномерный и двумерный массивы

&& Двумерный массив twoDArray имеет 3 строки и 4 столбца

dimension oneDArray(7), twoDArray(3, 4)

или

local oneDArray(7), twoDArray(3, 4)

Можно одновременно употребить LOCAL (PRIVATE, PUBLIC) и DIMENSION (DECLARE):

local oneDArray, twoDArray

dimension oneDArray(7), twoDArray(3, 4)

Массивы, объявленные командой DIMENSION (DECLARE) без использования команд LOCAL и PUBLIC, воспринимаются VFP как PRIVATE-переменные.


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

dimension oneDArray[7], twoDArray[3, 4]

oneDArray[2] = 9

twoDArray[2, 3] = 9

Массив характеризуется формой. Так, oneDArray является массивом формы 7, а twoDArray – это массив формы 3×4. Каждое измерение массива характеризуется протяженностью. Так, массив формы 3×4 по первому измерению имеет протяженность равную 3, а по второму – 4.

Одномерный массив oneDArray имеет 7 элементов с именами

oneDArray(1), oneDArray(2), …, oneDArray(7).

Двумерный массив twoDArray имеет 12 элементов с именами

twoDArray(1, 1), …, twoDArray(1, 4)
twoDArray(2, 1), …, twoDArray(2, 4)
twoDArray(3, 1), …, twoDArray(3, 4).

Создать массив, как и иную переменную, можно в любом месте программного компонента. Кроме того, в команде, создающей массив, для указания формы массива можно использовать не только константу, но и переменную, например:

store 3 to numberOfRows

numberOfCols = 2 * numberOfRows

declare someArray(numberOfRows, numberOfCols)

Если при задании формы массива использовано нецелое число, то при исполнении берется его целая часть, например:

declare someArray(3.2, 4.8) && Массив формы 3×4

store 9 to someArray(2, 3)

? someArray(2.25, 3.8) && Напечатает: 9

После создания все элементы массива равны .F. Всем элементам массива можно, если SET COMPATIBLE установлен в OFF (что задано по умолчанию), присвоить одно значение, выполнив команду STORE или употребив оператор присваивания, например:

dimension oneDArray(7), twoDArray(3, 4)

if set("COMPATIBLE") = "ON" then

set compatible off

endif

store 1 to oneDArray

twoDArray = 2

Эти же средства пригодны и для изменения значения одного элемента массива:

store 9 to twoDArray(2, 3)

oneDArray(4) = 9

К двумерному массиву можно обратиться так же, как и к одномерному, а к одномерному, – как к двумерному, например:

store 9 to oneDArray(4), twoDArray(2, 3)

? twoDArray(2, 3) && Напечатает: 9

&& Обращаемся к тому же элементу массива, используя номер элемента

? twoDArray(7) && Напечатает: 9

? oneDArray(1, 4) && Напечатает: 9

Элементы двумерного массива нумеруются построчно. Поэтому нетрудно подсчитать, что порядковый номер элемента twoDArray(2, 3) массива формы 3×4 равен 7. Можно не обременять себя расчетами, а применить функцию AELEMENT( ), возвращающую номер элемента массива по его индексам.

Форму массива можно изменить по ходу выполнения программы. Если число элементов массива уменьшается, то отбрасываются его последние элементы. Так, в случае двумерного массива twoDArray при изменении его формы с 3×4 на 2×3 будут отброшены элементы twoDArray(2, 3), twoDArray(2, 4), twoDArray(3, 1), …, twoDArray(3, 4). В этом легко убедиться, выполнив следующий код:

dimension twoDArray(3, 4) && Все элементы массива равны .F.


store 2 to twoDArray && Все элементы массива равны 2

&& Меняем значения элементов начиная с элемента twoDArray(2, 3) с 2-х на 5

twoDArray(2, 3) = 5

twoDArray(2, 4) = 5

for iCol = 1 to 4

twoDArray(3, iCol) = 5

endFor

&& Уменьшаем размер массива с 3×4 до 2×3

dimension twoDArray(2, 3)

&& Печатаем значения всех его элементов

for iRow = 1 to 2

for iCol = 1 to 3

&& Все значения печатаем на одной строке

?? twoDArray(iRow, iCol) && Напечатает: 2 2 2 2 2 2

endFor

endFor

При увеличении числа элементов массива добавленные элементы получат значение .F.

В VFP элементы одного и то же массива могут иметь разный тип, например:

oneDArray(4) = 9

oneDArray(5) = "5-й элемент"

Пример 1. Присвоить каждому элементу массива twoDArray значение, равное номеру строки для этого элемента.

dimension twoDArray(3, 4)

for iRow = 1 to 3

for iCol = 1 to 4

twoDArray(iRow, iCol) = iRow

endFor

endFor

Пример 2. Выводится элемент массива oneDArray, если в массиве twoDArray есть элемент с таким же значением и если его значение не равно .F.

dimension oneDArray(7), twoDArray(3, 4)

store 9 to oneDArray(4), twoDArray(2, 3)

for iRow = 1 to 3

for iCol = 1 to 4

someElement = twoDArray(iRow, iCol)

for k = 1 to 7

&& Нельзя сравнивать значения разных типов

if VarType(oneDArray(k)) = VarType(someElement) then

if VarType(someElement) = 'L' and not someElement then

&& Элементы со значение .F. выводиться не должны

loop

else

if oneDArray(k) = someElement then

&& Печатаем элемент, удовлетворяющий заданным условиям

? someElement

endif

endif

endif

endFor

endFor

endFor

Если быть уверенным, что элементы рассматриваемых массивов имеют один отличный от Logical тип (скажем, Character), то код станет существенно короче:

for iRow = 1 to 3

for iCol = 1 to 4

someElement = twoDArray(iRow, iCol)

for k = 1 to 7

if oneDArray(k) = someElement then

? someElement

endif

endFor

endFor

endFor

Поскольку в общем случае это не так, то перед выполнением команды

if oneDArray(k) = someElement then

нужно убедиться, что сравниваемые значения имеют один тип.

1.2 Использование массивов при разработке программ

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

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

Команда DIMENSION ArrayName1(nRows1 [, nColumns1]) [AS cType]
[, ArrayName2(nRows2 [, nColumns2])] ...

создает один или несколько одномерных или двумерных массивов. При создании все элементы массива получают значение .F.

Параметры и опция:

ArrayName1, ArrayName2 ... – имена создаваемых массивов.

nRows1 [, nColumns1] – протяженности массива ArrayName1 по первому и второму измерениям (число строк и столбцов массива). Если указывается только nRows1, то создается одномерный массив, если добавляется и nColumns1, то – двумерный.


AS cType – тип массива. Задается, когда нужно указать тип, отличный от Variant. Опция употребляется при передачи массива COM-компоненту. Если тип указан неверно, то VFP устанавливает для массива тип Variant. Данные типа Variant могут передаваться только по ссылке.

Возможные значения параметра c Type и варианты преобразования типа cType приведены в табл. 1.

Таблица 1

Значения cType и варианты преобразования типа, заданного cType

cType

IntelliSense-информация

COM-имя

COM Typelib-имя

.NET system
тип

XSD (SOAP)
тип

Array

Array

SAFEARRAY(type)

Type[ ]

Base64Binary

BinaryMemo

Variant

VARIANT (VT_VARIANT)

System.Object

anyType

Boolean

Logical

Boolean

VARIANT_BOOL (VT_BOOL)

System.Boolean

boolean

Byte

Number

Byte

unsigned char (VT_UI1)

System.Byte

Character

String

String

BSTR (VT_BSTR)

System.String

string

Currency

Currency

Currency

CURRENCY (VT_CY)

Date

Date

Date

DATE (VT_DATE)

System.DateTime

dateTime

DateTime

Date

Date

DATE (VT_DATE)

System.DateTime

dateTime

Decimal

Number

wchar_t (VT_DECIMAL)

System.UInt16

Double

Number

Double

double (VT_R8)

System.Double

double

Float

Variant

VARIANT (VT_VARIANT)

System.Object

anyType

Integer

Number

Long

long (VT_I4)

System.Int32

int

Logical

Logical

Boolean

VARIANT_BOOL (VT_BOOL)

System.Boolean

boolean

Long

Number

Long

long (VT_I4)

System.Int32

int

Memo

Variant

VARIANT (VT_VARIANT)

System.Object

anyType

Number

Number

Double

double (VT_R8)

System.Double

double

Object

Object

Object

IDispatch* (VT_DISPATCH)

System.Object

Short

Number

Long

long (VT_I4)

System.Int32

int

Single

Number

Single

single (VT_R4)

System.Single

String

String

String

BSTR (VT_BSTR)

System.String

string

Variant

Variant

VARIANT (VT_VARIANT)

System.Object

anyType

Void

VOID

Void

void (VT_VOID)

System.IntPtr