Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОМП. НАУКИ_1сем.doc
Скачиваний:
6
Добавлен:
05.11.2018
Размер:
902.14 Кб
Скачать
    1. Трехмерные массивы

Описание трехмерного массива:

var A : array[1..p,1..m,1..n] of integer;

Для доступа к каждому элементу массива (например, для ввода) используется тройной вложенный цикл:

for i:=1 to p do {Цикл по плоскостям массива}

for j:=1 to m do {Цикл по строкам выбранной плоскости}

for k:=1 to n do {Цикл по элементам строки}

read(M[i,j,k])

    1. Типизированные константы-массивы

  1. Пример для одномерного целочисленного массива: const IntVector : array[1..10] of integer = (3,8,1,4,9,15,0,6,-2,7);

  2. Пример для двумерного вещественного массива: const RMatrix : array[1..3,1..4] of real = ((1.1,1.2,1.3,1.4),(2.1,2.2,2.3,2.4),(3.1,3.2,3.3,3.4)); После запуска программы переменная-матрица RMatrix будет заполнена следующим образом:

1

2

3

4

1

1.1

1.2

1.3

1,4

2

2.1

2.2

2.3

2.4

3

3.1

3.2

3.3

3.4

    1. Операции над массивами

В языке Pascal все действия над массивами надо выполнять поэлементно, за исключением присваивания одного массива другому массиву, если типы массивов эквивалентны, например:

var M1,M2:array[1..10] of integer;

. . . M1:=M2 (элементы массива M2 присваиваются соответствующим элементам массива M1).

Однако, при описании

var M1:array[1..10] of integer;

M2:array[1..10] of integer;

присваивание M1:=M2 вызовет ошибку несоответствия типов. Хотя массивы имеют одинаковую структуру, их типы различны.

    1. Именная эквивалентность типов

Существует несколько схем для определения того, являются ли типы двух объектов эквивалентными. Наиболее часто используется структурная эквивалентность типов и именная эквивалентность типов:

  1. в соответствии со структурной эквивалентности типов два объекта относятся к одному и тому же типу только в том случае, если их компоненты имеют одинаковые типы;

  2. в соответствии с именной эквивалентности типов два объекта имеют один и тот же тип только в случае их определения с использованием имени того же типа; два типа T1 и T2 являются эквивалентными, если выполняется одно из двух условий:

  1. T1 и T2 представляют собой один и тот же идентификатор типа;

  2. Тип T2 описан с использованием типа T1 через непосредственное равенство вида type T2=T1 или посредством цепочки таких равенств.

В языке Pascal принята именная эквивалентность типов. Например:

Type T1 : array[1..10] of integer;

T2 : array[1..10] of integer;

T3 = T1;

Var M1:T1; V1:T1; M3:T3;

M2:T2;

Типы T1, T3 эквивалентны, поэтому массивы M1, V1, M3 имеют эквивалентные типы. Тип T2 не эквивалентен типам T1, T3, поэтому тип массива M2 отличается от типа массивов M1, V1 M3.

    1. Передача массива в качестве параметра

Для передачи массива в качестве параметра необходимо предварительно описать тип массива, например:

const N=50; type vector=array[1..N] of integer; var M:vector;

  1. Передача массива по значению: procedure P(V: vector); При вызове процедуры P(M) в процедуру будет передана копия массива M, что крайне неэффективно. Кроме того, действия процедуры над этой копией не отразятся на массиве M.

  2. Передача массива по адресу как переменной: procedure P(var V: vector); При вызове процедуры P(M) в процедуру будет передан адрес массива M, причем процедура может изменять этот массив.

  3. Передача массива по адресу как константы: procedure P(const V: vector); При вызове процедуры P(M) в процедуру будет передан адрес массива M, процедура может только брать элементы из массива M, но изменять массив M процедура не сможет.

Замечание: при вызове подпрограммы в рассмотренном примере в качестве фактического параметров можно задавать только массивы типа vector. Снять это ограничение позволяют открытые массивы.