Понятие массива. Способы описания массивов
До сих пор рассматривались лишь простые (скалярные), типы данных, где каждым значением любого из этих типов является отдельное данное, то есть тривиальная структура. Значения структурированных или производных типов в общем случае представляют собой нетривиальную структуру, то есть имеют более чем одну компоненту. При этом каждая компонента структуры может быть как отдельным данным, так и нетривиальной структурой, то есть значением любого из производных типов.
На языке Паскаль можно обрабатывать не только отдельные переменные, но и их совокупности. Одной из таких совокупностей и наиболее часто используемым производным типом является регулярный тип, а его значения обычно называют массивами. Массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип.
Тип элементов массива называется базовым. Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется. Доступ к каждому отдельному элементу осуществляется путем индексирования элементов массива. Индексы представляют собой выражения любого скалярного типа, кроме вещественного. Тип индекса определяет границы изменения значений индекса. Например, массив A состоит из элементов a1, a2, a3, . . . an. Здесь а – имя элемента массива, n – его индекс, т.е. порядковый номер в массиве, по которому можно определить (найти) каждый элемент.
Для описания массива в языке Паскаль предназначено словосочетание ARRAY OF (массив из...). Описание массива возможно двумя способами.
Способ 1.Используя раздел описания типов
Type <имя типа> = array [тип индекса] of <тип компонент>;
Var <идентификатор>: <имя типа>;
Например, Type Mas = array[1..100] of real;
Var M1,M2:Mas;
Способ 2.Используя раздел описания переменных (Var) без представления типа в разделе описания типов данных.
Var
<идентификатор>: array [тип индекса] of <тип компонент>;
Например, Var M1, M2: array[1..100] of real;
V1: array[1..50] of integer;
Если в качестве базового типа взят другой массив, образуется структура, которую принято называть многомерным массивом.
Например,Type Vector = array [1..4] of integer;
Massiv = array [1..4] of Vector;
Var M1:Massiv;
Ту же структуру можно получить, используя другую форму записи:
Var M1: array[1..4,1..4] of integer;
Таким образом, многомерный массив задается при помощи индексированных выражений, следующих друг за другом. Если индексное выражение одно, то массив называется одномерным, если два – двумерным (матрица), если n – n-мерным. Одномерные массивы в Паскале обычно используются для представления векторов, двумерные – для представления матриц.
Например,Var Vector = array [1..5] of real;
{одномерный массив-вектор из 5-ти элементов типа real}
Matr = array [1..4,1..3] of integer;
{матрица из 4-х строк и 3-х столбцов с элементами типа integer}
При описании массивов для задания границ индексов можно использовать предварительно определенные константы. Например,
Const G1=4;G2=5;
Var Matr = array [1..G1,1..G2] of integer;
Элементы массива располагаются в памяти последовательно, по строкам. Для массива Matr:
Matr[1,1] Matr[1,2] Matr[1,3]
Matr[2,1] Matr[2,2] Matr[2,3]
Matr[3,1] Matr[3,2] Matr[3,3]
Matr[4,1] Matr[4,2] Matr[4,3]
При обращении к элементам массива на Паскале индекс указывается в квадратных скобках: А[i], B[i,j].
При работе с массивами необходимо помнить следующее:
массив – это структура данных, представляющая собой совокупность элементов одного типа;
при объявлении массива указывается количество элементов массива;
доступ к элементу массива осуществляется путем указания индекса (номера) элемента массива.
Тип индекса элемента массива может быть только скалярным. Наиболее часто в качестве типа индекса используется ограниченный тип [1], причем в большинстве случаев это ограниченный целый тип.
Так, например, массив из 100 компонент вещественного типа может быть задан как array [1..100] of real.
Ограниченный целый тип 1..100 определяет количество компонент – 100 и их упорядоченность – от 1-ой до 100-ой.
В большинстве задач нумерация компонент начинается от 1 и ограничивается положительным целым числом. Но это необязательно. Если, например, представить в виде массива численность г. Москвы [1] в отдельные годы, то нумерацию удобно начинать с 1147 – года основания Москвы и до 2006 , т.е. такой массив можно задать как array[1147..2006] of integer;, а для Рима, основанного в 754 г. до н.э. – array[-754..-1] of integer;.
Здесь –1 –последний год до н.э.
Каждый из рассмотренных массивов может быть задан двояко:
1) используя описание типа:
Type vector = array[1..100] of real;
ch_M = array[1147..2006] of integer;
ch_R = array[-754..-1] of integer;
Var a, b: vector;
c: ch_M; d: ch_R;
Обращение к элементам массивов с и d: с[1147], c[1999] и т.п., то есть с[i], d[i];
2) непосредственно при описании переменной:
Var a,b: array[1..100] of real;
c: array[1147..2006] of integer;
d: array[-754..-1] of integer;
Использование ограниченного целого типадля индексов дает достаточно широкие возможности для описания массивов.
Множество значений перечисляемого типатакже образует ограниченное перенумерованное множество.Следовательно, перечисляемый типтакже может быть использован в качестве типа индексов [1]. Значения перечисляемого типа упорядочены (порядок задается порядком перечисления имен, являющихся значениями этого типа), и число их конечно (определяется количеством имен в этом типе).
Например, необходимо проанализировать среднемесячную температуру воздуха за год [1]. Можно в качестве индекса использовать ограниченный целый тип 1..12, но можно для наглядности ввести перечисляемый тип, состоящий из имен месяцев года:
Type Month = (Jan, Feb, Mar, Apr, … , Deс);
Тогда переменные, являющиеся векторами среднемесячных температур, можно определить следующим образом: Var t,r: array[Month] of real;
Частичные компоненты массива, обозначающие температуру каждого месяца, запишутся следующим образом: t[Yan], t[Feb], t[apr] и т. п. Если ввести переменную m типа Month (m: Month), то можно обращаться t[m], где m меняется от Janдо Deс.
В качестве типа индексов могут использоваться также стандартные типы Boolean и Char. Например,
Type priznak = array[Boolean] of integer;
kod_s = array[Char] of integer;
Var k: priznak; s: kod_s;
Частичные компоненты таких массивов выглядят следующим образом:
k[False], k[True]; s[‘d’], s[‘h’].
Для работы с массивом как с единым целым используется идентификатор массива без указания индекса в квадратных скобках. Если массивы описаны одинаково, то с ними можно проводить следующие операции [5]:
Проверка на равенство: А=В. Результатом является значение «истина», если каждый элемент массива А равен соответствующему элементу массива В.
Проверка на неравенство: А<>В. Результатом является значение «истина», если значение хотя бы одного элемента массива А не равно значению соответствующего элемента массива В.
Присваивание. А:=В. Все значения элементов массива В присваиваются элементам массива А. Значения элементов массива В остаются без изменения.
Дата добавления: 2019-02-07; просмотров: 652;