Еще один способ получения многомерных массивов

 

В Паскале нет ограничений на базовый тип массива. Базовым типом одномерного массива может быть, в частности, одномерный массив. Например,

const MaxLen = 100;

type t_xyz = (x,y,z);

t_point = array[t_xyz] of real;{тип для координат точки или вектора}

t_points = array [1..MaxLen] of t_point; {тип для координат 100 точек}

var p: t_points;

С переменной р можно работать как с двумерным массивом. p[i] - одномерный массив координат i-й точки, содержащий 3 элемента: p[i][х], p[i][y], p[i][z] ( i - целое от 1 до 100). Индексы в ТР можно записывать не в отдельных скобках, а перечислить через запятую: p[i, х], p[i, y], p[i, z].

Использование многомерного массива, описанного как массив массивов меньшей размерности, удобно, если предполагается обрабатывать массивы меньшей размерности как единые целые. Например, в массиве точек p обмен i-й и j-й точек выполняет фрагмент программы

t := p[i]; p[i] := p[j]; p[j] := t; (t - переменная типа t_point).

var p : array[1..MaxLen, t_xyz] of real;
При описании аналогичный фрагмент имеет вид:

t := p[i, х]; p[i, х] := p[j, х]; p[j, х] := t;

t := p[i, y]; p[i, y] := p[j, y]; p[j, y] := t;

t := p[i, z]; p[i, z] := p[j, z]; p[j, z] := t;

 

Строковый тип в стандартном Паскале

Строкой называется последовательность символов. В стандартном Паскале нет специального типа для работы со строками переменной длины. Для работы со строками можно использовать упакованные символьные массивы с типом индекса 1..n, где n - константа. Например,

var s1 : packed array [1..10] of char; {В ТР packed не обязательно}

s2 : packed array [1..10] of char;

Использование упакованных символьных массивов дает некоторые преимущества по сравнению с обычными одномерными массивами:

1. Для совместимости по присваиванию не требуется тождественность типов, достаточно равенства размеров массивов.

2. Строковой переменной можно присвоить строковую константу такой же длины.

3. Определены операции сравнения строк одинаковой длины.

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

Таким образом, для переменных s1 и s2 допустимы присваивания

s1 := ‘студент ‘; s2 :=s1; s2[8] :=’ы’;

В первом операторе строковая константа дополнена тремя пробелами до длины 10. После выполнения этих операторов s2=‘студенты ‘ (два последних символа - пробелы), и выражение s1<s2 имеет значение true, так как первый из неравных символов строки s1 (пробел) меньше соответствующего символа (‘ы’) строки s2.