Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гладков_Кулютникова.doc
Скачиваний:
8
Добавлен:
03.11.2018
Размер:
1.36 Mб
Скачать

Массивы Одномерные массивы

Если необходимо при решении задачи использовать большое количество данных одного типа, то обозначать их различными именами и обрабатывать становится затруднительно. В предыдущем разделе был показан прием, позволяющий вводить большое количество однородных данных, используя одну переменную. К сожалению, этот способ имеет существенный недостаток: сохраняется только последнее введенное значение, что не позволяет повторно обратиться к введенным данным. Например, задача нахождения количества элементов в заданной последовательности чисел, равных последнему элементу, предполагает просмотр элементов последовательности два раза: первый - при вводе элементов и получении значения последнего элемента и второй - при поиске количества элементов, совпадающих с последним. Логично ввести для всей последовательности одно обобщающее имя, а индексом (или номером) отметить то число, которое нас интересует. Этот прием часто используется и в обыденной жизни. Например, книги на книжной полке. Можно попросить ребенка, не умеющего читать, принести третью книгу с полки. И однозначно получим то, что хотели. Таким образом, в данном случае обобщающим именем служит “полка”, а индексом - порядковый номер книги на полке. Другой пример: можно не знать имени зрителя в концертном зале, но однозначно его определить, указав номер ряда и место в ряду, которое занимает зритель.

Такие данные описываются при помощи структурированного типа данных, который называется массивом.

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

Массив может быть описан следующим образом:

var имя_массива: array [тип_индекса] of тип_элементов;

В качестве типа индекса может быть любой простой тип, кроме стандартного real и integer, чаще всего это тип-диапазон, с помощью которого компилятор определяет общее число элементов массива: [N..K], где N, K - нижняя и верхняя границы диапазона. Количество элементов в диапазоне определяется следующим образом: K - N +1.

Тип элементов или базовый тип - это простой или сложный тип, допустимый в Паскале.

Пример 1. var a: array [-5..5] of real;

a - имя массива, элементы которого имеют базовый тип real, первый элемент имеет индекс -5, индекс последнего элемента - 5, всего элементов 5 - (-5) + 1 = 11.

Пример 2. var aа: array [‘A’..’Z’] of integer;

aa - имя массива, элементы которого имеют базовый тип integer, первый элемент имеет индекс -’A’, последний - ‘Z’, всего элементов - 24.

В Паскале есть возможность создавать свои типы данных, которые должны быть описаны в специальном разделе описания типов TYPE.

Пример.

const n =10;

type vector = array [1..n] of real; {тип vector объединяет в себе все

одномерные массивы, состоящие из n

действительных элементов}

var a, b: vector;

c : array [1..20] of vector;

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

var a: array [1..20] of real;

...

for i := 1 to 10 do

read (a[i]);

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

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

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

Пример.

for i := 1 to 10 do

read (a[i]);

for i := 1 to 10 do

write (a[i]);

for i := 1 to 10 do

begin

write (‘a[‘, i:2, ‘]=‘);

readln (a[i])

end;

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

Заполнение массива случайными числами будет осуществляться следующим образом:

Randomize;

for i := 1 to 10 do

begin

a[i] := 10 + random (41); {элементами массива будут целые числа

10 <= a[i] <= 50}

write (‘a[‘, i:2, ‘]= ’, a[i],' ')

end;

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

var a, b: array [1..30] of real;

a := b; {в массив а переписаны элементы массива b}

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]