массивы данных (простой статический)

Предыдущая тема Следующая тема Перейти вниз

массивы данных (простой статический)

Сообщение  Eric-S в Вс Сен 13, 2009 8:03 am

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

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

Доступ к определённому значению производиться по индексу. Или проще говоря номеру элемента.


Давайте познакомимся с простым статическим массивом.


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

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

Вот например создадим массив из 10 элементов.
Код:

dim array( 9 ) as integer

По умолчанию первый элемент имеет индекс 0.
А значит их ровно 10, от 0, до 9.

а вот так создадим диапазон значений от 1 до 10
Код:

dim array( 1 to 10 ) as integer

Я рекомендую всегда обозначать начальное значение, для большего понимания кода.


использование массива

Массив можно сразу инициировать значениями.
Список значений заключаеться в фигурные скобочки "{" и "}". Значение отделяеться от других запятой ",".

Вот простая программка, которая печатает список знакомых девушек.
Код:

' список девушек
dim girls(1 to 10) as string = {"Катя", "Маша", "лена", "Оля", "Наташа", "Света", "Аня", "Даша", "Таня", "Аня"}

' перечислим всех их
dim i as integer
for i = 1 to 10
print i, girls(i)
next

Она нам выведет следующее:

1 Катя
2 Маша
3 лена
4 Оля
5 Наташа
6 Света
7 Аня
8 Даша
9 Таня
10 Аня

В примере мы получаем значения элемента массива girls указывая его номер.
Так например
Код:

print girls(1)
Напечатает

Катя

Но ведь писать десять строк не смешно.
Код:

print girls(1)
print girls(2)
...
print girls(9)
print girls(10)
А если допустим надо ещё больше? Не 10 а 100 или 10000?

А в цикле вышло очень даже красиво и экономично.



измерения

У массивов может быть несколько измерений.
Сейчас мы познакомились только с первым. Но можно создать и второе измерение.

Вот например создадим поле 10x10
Код:

dim pole( 1 to 10, 1 to 10 ) as integer
У нас в итоге получаеться ровно 100 элементов.
Но доступ к каждому осуществляеться по двойному индексу. Или с указанием обоих измерений.

Например чтобы узнать, что находиться в поле с координатами x=10 y=5 напишем
Код:

print pole(10,5)

Вот урезанный и упращонный фрагмент простой игрушки.
Код:

' фигуры
dim figura(0 to 2) as string = {".", "0", "="}

' создаём поле
dim pole( 1 to 10, 1 to 10 ) as integer

' переменные для координат
dim x as integer
dim y as integer

' раставим фишки
for x = 1 to 10
pole(x, 1) = 1
pole(x, 10) = 2
next

' прорисуем поле
for y = 1 to 10
' курсор на строчку
locate y + 5, 10

for x = 1 to 10
' выводим фигуру
print " " & figura( pole(x, y )) & " ";
next
next

В этом примере сразу два массива. В одном figura храниться символ, который будет выводиться на экран. А во втором pole - код фигуры, которая находиться в конкретной позиции.


Два измерения это не придел, их может быть 3 или даже 10.
Думаю, что 10 измерений вам хватит. Я не могу вообразить, для каких расчётов нужно столько измерений! Наверное их оставили прозапас.



изменение размера массива

Может возникнуть необходимость изменить размер массива. Допустим массив слишком мал, или наоборот слишком велик.

Для того, чтобы создать массив, размер которого можно изменять, нужно использовать вместо dim redim

Код:

' создаём пустой массив
redim girls(0) as string

' изменяем размер массива
redim girls(1 to 100) as string

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

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

Чтобы сохранить данные, нужно использовать ключевое слово preserve

Код:

' изменяем размер, скопировав данные
redim preserve girls(1 to 100) as string

Я бы не рекомендовал использовать эту возможность слишком часто. Ваша программа значительно потеряет в быстродействии. Посмотрите в сторону списков, они более удобны для добавления и удаления элементов.


получение верхнего и нижнего индекса

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

Код:

sub foot( array() as string )
' нижний индекс
dim min as integer = LBound(array)

' верхний индекс
dim max as integer = UBound(array)

dim i as integer
for i = min to max
print i, array(i)
next
end sub


очистка массива

Функция erase очищает значения элементов массива.

Код:

erase girls

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: массивы данных (простой статический)

Сообщение  Eric-S в Вс Сен 13, 2009 8:08 am

Глава под конец откровенно скомкана.
У меня пропало желание продолжать её сейчас.
Возможно я к ней ещё вернусь.
А пока пусть будет лучше так, чем никак вообще!

можете добавить, про массивы ещё интересненькое. И конечно же спрашивайте о непонятном!

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения