Лекции. Основные понятия и определения
![]()
|
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(m-1, n-1) Замечание 1. Старайтесь не использовать нижнюю границу при объявлении массива, поскольку нижняя граница измерения всегда равна 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 располагаются в памяти построчно. Замечание 2. Весьма важно! Границы массивов в языке Basic могут быть выражениями, включающими имена переменных, и их объявления могут располагаться в произвольном месте кода до 1-го употребления их имен. Следовательно, можно сначала задать размеры массивов, а затем объявить их, используя заданные размеры. Это дает возможность использовать динамические массивы, размеры которых неизвестны до начала выполнения программы, что существенно повышает универсальность реализуемых алгоритмов (свойство массовости). Пример. …………………..………………………. ‘ Ввод размеров m n ………..………………………………….. ' Объявление динамических массивов … a(m - 1), b(n - 1), c(m + n - 1) … Обращение к элементу массиваС <имя>[ i1 ][[ i2 ]]…, где i1, i2 – целые выражения. Пример. Page[ 5 ] Line[ i ] Screen[ j ][ k ] Matr[ i-1 ][ j+i-1] Basic <имя>(i1[,i2]...), где i1, i2 – целые выражения. Пример. Page( 5 ) Line( i ) Etap( j, k ) Matr( i-1, j+i-1) 3.2.2. СтруктурыСтруктура (запись) – составной объект, содержащий 1 или более элементов любых типов, кроме функций. Структура может содержать массив любого типа и другую структуру (подструктуру). Пример. Структура "Работник" (worker): - таб. номер; - Фамилия И.О.; - должность; - сумма к выдаче. В языке C для определения структур применяется ключевое слово struct, в языке Basic - Structure. Работа со структурами будет рассмотрена позже. |