Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры данных_файлы.doc
Скачиваний:
4
Добавлен:
17.04.2019
Размер:
166.91 Кб
Скачать

Массивы.

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

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

Так как структура одномерного массива однозначно соответствует структуре памяти ЭВМ, то отображение других структур данных на память ЭВМ соответствует отображению этих структур данных на одномерный массив.

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

S=0 20

FOR I=1 TO 6

INPUT A

S=S+1

NEXT I

S=S/6

PRINT "СРЕДНЕЕ =";S

END

Каждое новое значение вводится в одну и ту же переменную. А с помощью оператора INPUT она добавляется к сумме предыдущих чисел. Предыдущие значения оказываются утерянными, так как каждое новое значение занимает место непосредственно предшествующего значения. В конце цикла А содержит самое последнее значение. Альтернативой сохранения всех значений А может быть программа

INPUT A, B, C, D, E, F

S=A+B+C+D+E+F

S=S/6

END ,

дающую тот же результат, но сохраняющая для будущих расчетов значения всех чисел. То есть, создается впечатление, что программа даже сокращается по объему. Но если необходимо ввести 1000 чисел? То есть, необходимо предусмотреть возможность манипулировать числами не учитывая их значений, что достигается введением определенной структуры данных. В языке Visual Basic предусмотрены две структуры данных : массивы и файлы.

Объявление массивов используется для описания характеристик данных, хранящихся в памяти ЭВМ: символическое имя, тип, число измерений, размер по каждому измерению.

Для использования массивов в программу необходимо включить (объявить) оператор DIM (DIMENTION -размер ), помещенный в поле программы.

метка DIV V(k) [,V(k),...]

V - символическое имя массива.

К - список границ, состоящий из одной или более констант или переменных (верхних границ), разделенных запятой.

ПРИМЕР : DIM M(7) - одномерный массив типа вещественный DIM A%(8) - одномерный массив типа целый DIM B$(7,8)- двумерный массив типа текстовый.

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

DIM A(7), A%(8), B$(7,8)

Значения констант и переменных в объявлении массива определяют максимальные значения, которые может принимать граница (индекс) этого массива. Граница массива может задаваться константой, переменной или арифметическим выражением. Но при этом необходимо отметить, что число, определяющее границу, должно быть целым в момент выполнения инструкции DIM . При рассмотрении понятия массива необходимо помнить, что речь идет о статическом распределении памяти, чтобы обозначить резервирование памяти в программе согласно типа и границ массива раз и навсегда для данной программы. Из определения массива следует, что одному имени массива в соответствие поставлено несколько ячеек памяти. Возникающая здесь проблема состоит в том, чтобы суметь отыскать необходимую информацию в массиве. Для этого и введено понятие индекса массива, который указывает распределение информации по ячейкам памяти. Ценность массивов как раз и состоит в возможности использования переменной в качестве индекса. Индекс может быть константой, переменной или арифметическим выражением, помещенным в скобки за именем массива. Если индексное выражение имеет вещественное значение, это значение приводится к целому типу путем усечения. Значение индекса не должно быть меньше нуля или больше максимального значения, определенного в описании массива. Имена массивов имеют тот же тип, что и переменные. Если допускаются целые переменные или переменные с двойной точностью, то допускаются и массивы этих типов. Не стесняйтесь выбирать одно и тоже имя для переменной, массива или текстовой переменной, система должна трактовать их как разные объекты.

НАПРИМЕР

Dim F(4)

A(0)=-9

A=10

A$='OK'

50 PRINT A,A(0),A$

В результате выполнения программы должен быть получен результат

10

-9

OK

В противном случае необходимо избегать одинаковых имен. Выше в примерах были рассмотрены одномерные массивы. На практике при написании программ широко используются и многомерные массивы ( но не более трех, хотя допускается и использование до семи измерений). Для этого в скобках после имени массива указывается несколько максимальных индексов, разделенных запятой.

Двумерные массивы размещаются в одномерной памяти машины по строкам. Это означает, что второй индекс у переменной, указывающей элемент двумерного массива, изменяется быстрее первого индекса. Пусть дан массив Т(3,4), состоящий из трех строк и четырех столбцов, содержащих следующие значения

1 2 3 4

5 6 7 8

9 10 11 12

Если записать

DIM T(3,4)

FOR I=1 TO 3

FOR J=1 TO 4

PRINT T(I,J);

NEXT J

PRINT

NEXT I

END

то результатом работы программы будет

1 2 3 4

5 6 7 8

9 10 11 12

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

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

2. Результаты вычислений или промежуточные переменные должны быть сохранены в памяти и несут одинаковую "логическую функцию". Эти ячейки могут быть сгруппированы под одним именем, образуя массив.

А надо ли использовать массив? Если да, то какой размерности?

Смысл первого вопроса в том, чтобы использовать массив лучше в том случае, когда это совершено необходимо. Для этого имеются три причины:

- по мере усложнения программы, использование многих массивов и возрастания числа индексов растет вероятность появления ошибок;

- массив очень быстро разрастается до значительных размеров и занимает много места в памяти;

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

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

Каковы должны быть размеры массива?

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

Отличие средств обработки массивов в языке Бейсик от аналогичных средств в других языках программирования состоит, например, в том, что другие языки ( Алгол-68, Фортран, Паскаль и др.) допускают описание и обработку массивов с размерностью больше двух, варьируя значение индексов не только в положительной, но и в отрицательной части числовой полуоси, оперирование не только элементами массива, но и массивами целиком. Так в языке Алгол-68 допустима пересылка значений одного массива в другой одним оператором присваивания. Но отсутствие таких средств в языке VB, не обедняя его в значительной степени, позволило создать компактное и достаточно быстродействующее средство его обработки - интерпритатор.

Представление данных в виде двухмерного массива сводится в представлении данных в виде ячеек, организованных по строкам и столбцам, записываемых в память последовательно друг за другом. Поэтому исходя из подобного представления, любую структуру данных можно отображать на одномерный массив как по строкам, так и по столбцам. В случае первого способа отображения (по строкам), k – й номер последовательности для двухмерного массива может быть вычислен по формуле k=(i-1)n+j, где n число элементов в строке двухмерного массива. По аналогичному принципу отображается на одномерный массив и массивы большей размерности.

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