«У Т В Е Р Ж Д А Ю»
Заведующий кафедрой КС
Профессор Н.Е. Сапожников
« » 2012 г.
Л Е К Ц И Я № 7
по дисциплине «Программирование»
Тема: «Структурированные данные. Массивы»
План лекции:
Введение.
Массивы.
Составление программ с структурированными данными.
Задача сортировки. Методы сортировки.
Литература:
Беляева Т.А. и др. Алгоритмические языки программирования. Паскаль. – Севастополь: СНИЯЭиП, 2002 г.
Фаронов В.В. - "DELPHI. Программирование на языке высокого уровня: Учебник для вузов" – СПб.: Питер, 2006. – 640 с.
Марченко А.И. Программирование в среде Borland Pascal 7.0.-К.:Юниор,1997.-480 с.
Введение
В различных областях знаний часто приходится сталкиваться с ситуацией, когда необходимо обработать большое количество значений переменных одного и того же типа. В принципе мы можем обойтись понятием обычной переменной, но остается ощущение неудобства, особенно, если задача сопряжена с огромным их количеством. Для таких случаев Паскаль предоставляет введение большого числа переменных одного и того же типа, используя понятие «массив». Массив, как и любой из структурированных типов (а в Delphi их четыре: массивы, записи, множества и файлы) характеризуется множественностью образующих этот тип элементов. Каждый элемент, в свою очередь, может принадлежать структурированному типу, что позволяет говорить о возможной вложенности типов, однако суммарная длина любого из них во внутреннем представлении не должна превышать 2 Гбайт.
1. Описание типа Массив
Итак, массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип и объединенных одним именем.
Так совокупность действительных чисел 1.6, 14.9, -5.0, 8.5, 0.46, 2.37, 0.53 можно считать массивом и обозначить именем, например А. Число элементов фиксируется. В нашем примере количество элементов 7. Доступ к каждому элементу массива осуществляется путем индексирования элементов массива. Индекс – это величина, характеризующая положение объекта в массиве. Каждый элемент массива обозначается именем и индексом.
Индекс заключается в квадратные скобки. В нашем примере элементами массива являются: А[1] = 1.6, A[2] = 14.9, A[3] =-5.0, A[4]=8.5, A[5]=0.46.
Если в программе используется массив, то он должен быть описан либо в разделе типов, либо в разделе переменных.
В разделе типов
TYPE <имя типа>=array[<сп. инд. типов>]of <тип> ;
Здесь <имя типа> – правильный идентификатор; array,of – зарезервированные слова (массив, из); <сп. инд. типов> – список из одного или нескольких индексных типов , разделенных запятыми; квадратные скобки, обрамляющие список, – требование синтаксиса; <тип> любой тип Delphi.
TYPE M = array[1..5] of real;
VAR A : M;
В разделе переменных
VAR A : array[[<сп. инд. типов>] of <тип>;
VAR A : array[1..5] of real;
Здесь А – имя массива, элементы которого имеют базовый тип REAL. Тип индекса ограниченный от 1 до 5.
Примеры :
1. TYPE Color = (red, blue, black);
mas1 = array[-5..15] of real;
mas2 = array[1..10,1..10] of integer;
mas3 = array[‘A’..’C’] of array[1..5] of boolean;
mas4 = array[boolean] of char;
VAR A:mas3; B:mas2; C:mas4; D:mas1; E:array[color] of real;
В качестве элементов массива можно использовать данные любого, (в том числе и структурированного) типа. Вполне правомерно существование массивов записей, массивов строк, массивов множеств, массивов и т.д.
Если несколько массивов имеют одинаковый тип индексов и одинаковый базовый тип, то допускается объединить массивы в список, например:
VAR A,B,C : array[1..50] of real;
Нельзя путать понятие «индекс» и «тип индекса». Тип индекса используется только в разделе описаний массива, а индекс указывается в разделе операторов для обозначения конкретных элементов массива. Индекс должен быть того же типа, что и описание типа индекса.
Пример: B[5]:=B[3]+1; C[1]=3.4;
Индекс может быть выражением, частным случаем которого является константа или переменная. Элемент массива иначе называется переменной с индексом. N[I+J]; MAS[2*I].
Если в качестве базового массива взят другой массив, образуется структура, которую принято называть многомерным массивом.
Например:
TYPE Vector = array[1..4] of integer;
Massiv = array[1..4] of vector;
VAR Matr : Massiv;
Ту же структуру можно получить, используя другую форму записи.
VAR Matr : array[1..4,1..4] of integer;
Если в такой форме записи массива задан один индекс, массив называется одномерным, если два индекса – двумерным, если N индексов, N – мерным.
Одномерные массивы обычно используются для представления векторов, а двумерные – для представления матриц. Элементы массива располагаются в памяти последовательно. Элементы с меньшими адресами – в более низких адресах памяти. Многомерные располагаются таким образом, что самый правый индекс возрастает самым первым.
Например, если имеется массив A:array[1..5,1..5] of integer;, то в памяти элементы будут размещены по возрастанию адресов. A[1,1]; A[1,2]; … A[1..5]; … A[2,1]; A[2,2]; … A[5,5]; т.о. матрицы размещаются по строкам.
Задав конкретные значения индексов можно выбрать определенную компоненту массива. Например, запись N:=A[1,2] означает, что в N будет отправлено значение, стоящее в 1-й строке,
2-м столбце.