|
|
Лекция 7
|
 |
 |
Регулярный тип (массив).
|
В ряде
случаев приходится сталкиваться с ситуацией, когда должно
использоваться относительно много переменных одного типа. |
|
Представим
себе программу, которая вычисляет метеорологические данные
(температура, влажность, давление, осадки и т.п.) за год. Т.е. в
этой программе всегда будет не меньше 365 переменных. Можно
описать эти 365 (366) переменных следующим образом: |
|
var day1, day2,
day3, …, day365: real; |
но уже только одна
такая запись будет занимать больше страницы, не говоря о том, чтобы
посчитать, например, среднюю температуру за год.
|
Для таких и
подобных этому случаев в языке Паскаль предусмотрена возможность
введения большого числа переменных одного и того же типа за счет
использования структурированного типа массив. Следует отметить,
что подобный тип данных есть практически во всех языках
программирования. |
|
Массив – это
упорядоченный набор перенумерованных элементов одного типа. |
|
Элементы
массива характеризуются следующими свойствами: |
|
1) |
все
элементы упорядочены; |
|
2) |
обращение к
любому элементу массива осуществляется по его индексу; |
|
3) |
количество
элементов определяется один раз при описании массива и далее не
может быть превышено; |
|
4) |
все
элементы массива принадлежат к одному типу данных, называемому
базовым типом массива. |
|
Все
элементы массива имеют общее имя – имя массива, а
указание на конкретный элемент осуществляется с помощью
индекса – порядкового номера элемента. |
|
Для
описания объекта типа массив в языке Паскаль используется
следующая конструкция: |
|
array
[<тип1>] of <тип2>; |
тип2 – тип
элементов (базовый тип).
|
В качестве
типа индекса могут быть использованы такие типы, как: |
|
array
[1146..2004] of real; |
|
array
[-754..-1] of integer; |
|
В этом
случае обращение к элементам массива осуществляется через
указание имени массива и в квадратных скобках его индекса –
любого числа из представленного интервала. |
|
При
описании следующего вида |
|
type tula = array
[1146..2004] of real; |
|
возможны
обращения к элементам массива: |
|
stat
[1675] stat [1980] stat [2000] |
|
Описать
массив можно и другим способом: |
|
var stat1: array
[2000..2004] of real; |
|
type m = (Jan, Feb,
Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); |
|
|
var t: array [m] of
integer; |
|
Тогда
обращение к элементам массива будет следующим: |
т.е. в качестве индекса выступает любое
значение из определенного ранее набора.
|
В этом
случае индексные выражения могут представлять собой логические
выражения. |
|
var k: array
[boolean] of integer; a,b: boolean; |
|
|
Обращение к
элементам массива может быть следующим: |
|
k[false] k[true] k[a or b] |
|
type s = array
[char] of integer; |
|
К элементам
массива можно обратиться следующим образом: |
|
В качестве
типа индекса не могут быть использованы типы integer и real,
т.к. множества значений этих типов в языке Паскаль не ограничены
(тип integer ограничен лишь возможностями техники), а real еще и
не упорядочено. |
|
При
объявлении типа индексов массива удобно использовать константы:
|
|
type m =
array[1..n] of integer; |
|
Количество
индексов в обозначении элемента массива определяет
размерность массива. Массив может быть одномерным,
двумерным, трехмерным и т.д. При описании таких массивов должен
быть описан тип каждого индекса. |
|
var m: array[1..10,
1..15] of real; |
|
В этом
случае мы имеем дело с прямоугольной таблицей, состоящей из 15
столбцов и 10 строк. |
|
В языке
Паскаль число размерностей неограниченно. Например, выражение |
|
var a:
array[1..1000, 1..35, 1..20, 1..70] of real; |
совершенно
правильно с точки зрения синтаксиса языка, хотя можно сомневаться,
хватит ли у компьютера памяти для такого количества переменных.
|
Размерность
массивов на практике ограничена размером памяти компьютера. |
|
4.
Организация работы с массивами. |
|
Для
организации работы с массивом необходимо: |
|
1)
объявить (или описать) массив, т.е. задать имя, типы
индексов и элементов; |
|
2)
сгенерировать (или сформировать) массив, т.е. задать
значения элементов массива. Среди способов генерации массивов
можно выделить следующие: с клавиатуры, из памяти, с помощью
датчика случайных чисел, по какому-либо закону (формуле) и др.;
|
|
3)
визуализировать массив, т.е. вывести на экран первоначальные
значения элементов массива; |
|
4)
обработать элементы массива в соответствии с задачей; |
|
5) вывести
на экран результат выполненных действий. |
|
Действия по
формированию и визуализации массивов удобнее оформить в виде
отдельных процедур. |
|
В
объявлении массива констант указываются значения его элементов,
заключенные в круглые скобки и отделены друг от друга запятыми.
|
|
type color = (Red,
Blue, Green); |
palette = array [color] of string[10];
const m: palette = ('Красный',
'Синий',
'Зеленый');
|
В
результате элементы массива m приобретают следующие значения: |
|
Элементы
такого массива удобно задавать не как одиночные символы, а в
виде строковой константы. Например, объявление константы |
|
const digits: array
[0..9] of char = ('0', '1', '2', '3', '4', '5', '6', '7', '8',
'9') |
можно представить в
более компактной форме:
|
const digits: array
[0..9] of char = '0123456789'; |
|
Чтобы
обратиться к элементу константы типа массив необходимо указать
ее имя и затем в квадратных скобках – требуемое число индексов,
которые могут задаваться выражениями соответствующих типов. |
 |
|