Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_2_изд_испр.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
2.27 Mб
Скачать

3.2. Совокупности данных

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

3.2.1. Массивы

Пример. Массив. Система линейных алгебраических уравнений.

a11*x1+a12*x2=b1

a21*x1+a22*x2=b2

В результате имеем 3 массива: {aij,i,j=1,2}, {xk,k=1,2}, {bl,l=1,2}.

Количество индексов определяет размерность массива. Различают одномерные (размерность равна 1) и многомерные (размерность > 1) массивы.

Расположение в памяти элементов многомерного массива в языках C и Basic лексикографическое, т.е. в следующем порядке: a11 a12 a21 a22.

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

Пример.

i=1 j=2 aij=a12

Массивы должны быть объявлены в специальных инструкциях.

Объявления массивов

С

<элемент>:=<имя>[<длина>][,[<длина>]]…

<длина> - количество элементов массива в данном измерении.

Замечание. Жирным выделены символы языка, начертание которых совпадает с метаобозначениями.

Пример.

Page[10 ] Line[81] Screen[24][80] Vect[20] Matr[10][10]

Нижняя граница (минимальное значение) индекса в каждом измерении всегда равна 0, верхняя (максимальное значение) равна длина-1.

Пример.

В объявлении Matr[10][10] первый элемент – это Matr[0][0], последний – Matr[9][9]. Всего элементов 10*10=100. Многомерный массив можно рассматривать как массив, элементами которого являются массивы меньшей размерности.

Пример.

Matr[0] – первый элемент массива, элементом которого является массив из 10 элементов.

Длина измерения – целое постоянное выражение (пока будем считать, целое без знака).

Basic

<массив>:=<имя>(<индекс>[,<индекс>]...)

<индекс>:=[нижняя граница to] верхняя граница

Различают массивы фиксированного размера (в качестве границ при объявлении используются целые числа >0) и массивы, размеры которых могут изменяться при выполнении программы – динамические массивы (о них позже). В данной версии языка нижняя граница индекса массива всегда равна 0. Задать отличную от 0 нижнюю границу можно, но это только приведет к неиспользованию части отведенной под массив памяти.

Пример.

A(1,1) X(1) DaysOfMonth(1 to 12) Etap(1 to 20, 1) Matr( , )

Массив Matr( ) относится к динамическим массивам.

Замечание. Старайтесь не использовать нижнюю границу при объявлении массива, поскольку нижняя граница измерения всегда равна 0. В результате при массивах DaysOfMonth и Etap память используется неполностью.

DaysOfMonth: выделено памяти под 12+1=13 элементов, используется 12,

Etap: выделено памяти под (20+1)*(1+1)=42 элемента, используется 40.

В отличие от языка C, где в объявлении массивов используется понятие длина или количества элементов в данном измерении массива, понятие верхняя граница означает максимальное значение индекса в данном измерении и, следовательно, объявление A(1,1) определяет массив данных из 4 элементов: A(0,0), A(0,1), A(1,0), A(1,1). Как видно из примера, многомерные массивы аналогично языку C располагаются в памяти построчно.