Урок из серии: «Язык программирования Паскаль»
В предыдущем уроке мы ввели понятие структурированных данных.
Изучение данных структурированного типа начнем с регулярного типа данных — массивов.
Название регулярный тип массивы получили за то, что в них объединены однотипные элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве.
Массив — структурированный тип данных, состоящий из фиксированного числа однотипных элементов, объединённых одним именем, где каждый элемент имеет свой номер (индекс).
Когда возникает необходимость использовать массивы?
Рассмотрим следующую задачу: ввести с клавиатуры 30 целых чисел и вычислить их сумму, при этом каждое из чисел сохранить в памяти для последующей обработки.
Мы будем вынуждены ввести 30 имен переменных, что, естественно, очень неудобно. Как быть?
В этом случае лучше организовать массив. Имя у всех элементов будет общее. Чтобы получить доступ к элементу, достаточно будет указать имя массива и его порядковый номер.
И так, массивы будем использовать тогда, когда нужно обработать большой объем однотипной информации, которую необходимо сохранить в памяти для последующей обработки.
Определим еще несколько понятий, связанных с массивами.
Элемент массива— отдельная переменная, входящая в массив.
Размерность массива— количество индексов, по которым определяется положение элемента в массиве.
Индексы элемента массива — совокупность номеров, определяющих его местоположение в массиве.
Чтобы лучше понять, что такое размерность массива, сравним их с таблицами.
Одномерный массив сравним с таблицей, состоящей из одной строки. Для определения положения элемента в строке достаточно знать порядковый номер ячейки, в которой находится элемент. Поэтому в одномерном массиве один индекс — порядковый номер элемента.
Двумерный массив — прямоугольная таблица. Для определения положения элемента в прямоугольной таблице нужно знать порядковый номер строки и столбца, на пересечении которых находится ячейка. Поэтому в двумерном массиве — два индекса, номер строки и номер столбца.
И так, потребность использовать массив возникает всякий раз, когда при решении задачи приходится иметь дело с большим, но конечным количеством однотипных данных, которые необходимо хранить в памяти.
Переходим к изучению массивов.
Описание массива
Прежде чем использовать массив в программе, его необходимо предварительно описать. Описать массив — значит выделить в памяти место, достаточное для хранения всех его элементов. Для этого надо указать имя массива и длину массива — количество элементов в нем. В большинстве случаев при задании размеров массива используются диапазоны изменения значений индекса.
При описании массива используется зарезервированное слово array (массив), указываются диапазон изменения для индексов и тип компонентов массива.
Способ 1. Описание массива с определением типа.
type <имя типа> = array [<нижний индекс>..<верхний индекс>] of <тип компонента>; var <идентификатор> : <имя типа>; |
Способ 2. Описание массива без определения типа.
var <идентификатор> : array [<нижний индекс>..<верхний индекс>] of <тип компонента>; |
Двумерный массив описывается так же, как и одномерный. Различие состоит в том, что вы должны указать диапазон для двух индексов массива — положение каждого элемента массива A[i, j] определяется номером строки и номером столбца.
Например, описание двумерного массива натуральных чисел размера N x М может быть задано следующей строкой:
var myarray : array [1..n, 1..m] of integer ; |
Вернемся к нашей задаче. У нас 30 целых чисел, выделим для них 30 ячеек, объединим их общим именем А.
№ | A | Имя А — это общее имя для всех элементов. Элементы массива — это числа, их 30 |
1 | 25 | |
2 | 64 | |
3 | 27 | |
… | … | |
29 | 53 | |
30 | 89 |
Опишем одномерный массив из 30 целых чисел для этой задачи следующим образом:
type myarray = array[1..30] of integer var m1: mas; |
Напомним, что раздел типов начинается со служебного слова type, после этого идет имя нового типа и его описание. Между именем типа и его описанием ставится знак «равно» (в разделе переменных между именем переменной и её описанием ставится двоеточие).
Тогда:
myarray — это имя нового типа;
array — служебное слово (в переводе с английского означает «массив», «набор»);
[1..30] — в квадратных скобках указывается номер первого элемента, затем, после двух точек, номер последнего элемента массива, в этом примере первый элемент имеет номер 1, а последний — номер 30;
Of — служебное слово (в переводе с английского — «из»);
Integer — тип всех элементов массива.
Так как каждый элемент имеет свой номер, то к каждому элементу можно обращаться непосредственно. Для того чтобы получить доступ к i-му элементу этого массива, необходимо записать: A[i] — сначала имя массива, а в квадратных скобках указывается номер элемента, к которому обращаемся, — i.
Например, обращаемся к первому элементу массива А — А[1], а к пятому — А[5].
Тот же самый массив может быть задан и при определении соответствующей переменной:
var m1: array[1..30] of integer; |
Особенность языка Паскаль
Особенностью языка Паскаль является то, что число элементов массива фиксируется при описании и в процессе выполнения программы не меняется. Это считается недостатком языка, так как не во всех программах можно заранее предсказать необходимый размер массива (который может определяться в зависимости от тех или иных условий, возникающих в процессе исполнения).
Для решения этой проблемы используют прием, позволяющий имитировать работу с массивами переменной длины, который заключается в следующем: в разделе описания предварительно определяют возможное максимальное значение размера массива, а затем в программе запрашивают текущее значение размера и используют это значение далее при заполнении и обработке массива.
На следующем уроке мы рассмотрим основные алгоритмы, которые используются при обработке данных, хранящихся в массиве.