Статья: Интервальные типы данных. Оператор TYPE. Массивы

FOR i:=1 TO N DO READ(a[i]);

{ Сортируем элементы массива по неубыванию. Используем очень простой, но

неэффективный алгоритм сортировки - сравниваем каждый элемент с каждым

и, если первый больше второго, меняем их местами }

FOR i:=1 TO N-1 DO FOR j:=i+1 TO N DO

IF a[i]>a[j] THEN BEGIN t:=a[i]; a[i]:=a[j]; a[j]:=t; END;

{ Выводим отсортированный массив поэлементно }

WRITELN('Результат сортировки :');

FOR i:=1 TO N DO WRITE(a[i]:8);

END.

Обратите внимание на алгоритм перестановки двух элементов! Запись a[i]:=a[j]; a[j]:=a[i]; , очевидно, привела бы к неверному результату. Использованный нами алгоритм сортировки вполне надежен, но не очень хорош, так как выполняет много лишних операций. Не составляет труда усовершенствовать его - для каждого i от 1 до N-1 найдем наименьший из элементов ai, ai+1, ... , aN и поместим его на i-е место; такой алгоритм выполняет столько же сравнений, сколько и первоначальный, но требует существенно меньшего количества перестановок.

FOR i:=1 TO N-1 DO BEGIN

a_max:=a[i]; n_max:=i;

FOR j:=i+1 TO N DO

IF a[j]<a_max THEN BEGIN a_max:=a[j]; n_max:=j; END;

IF n_max<>i THEN BEGIN a[n_max]:=a[i]; a[i]:=a_max; END;

END;

Как видите, запись алгоритма несколько длиннее, и потребовалось две новых переменных a_max - типа Integer и n_max - типа IndexType. Это действие универсального закона сохранения - из двух верных алгоритмов лучший, как правило, сложнее.

Теперь перейдем к рассмотрению многомерных массивов. Размерностью, или количеством измерений массива, называется количество индексов у элемента массива, но не количество элементов в массиве. Мы уже знаем, что элемент массива может быть массивом, поэтому двумерный массив можно описать, например, так :

VAR a : ARRAY[1..10] OF ARRAY[1..20] OF Real;

Переменную a можно рассматривать как одномерный массив одномерных массивов и использовать в программе запись вида a[i] ; но можно рассматривать и как двумерный массив вещественных чисел. Элемент этого массива записывается в программе в виде a[ индексное выражение , индексное выражение ] и является переменной типа Real, например, a[i+1,3]. Впрочем, можно записать и так: a[i+1][3], обе эти записи эквивалентны. Описание многомерных массивов также можно записывать компактно: вместо

ARRAY[ t1 ] OF ARRAY[ t2 ] OF ARRAY ... OF t ;

можно записать

ARRAY[ t1 , t2 , ... ] OF t ;

Впрочем, бывают случаи, когда первое описание предпочтительней. Теперь, умея работать с многомерными массивами, напишем программу, перемножающую две квадратные вещественные матрицы:

CONST Nmax=20; {максимальный размер матрицы}

TYPE IndexType=1..Nmax;

Matrix =ARRAY[IndexType,IndexType] OF Real;

VAR a,b,c : Matrix; n,i,j,k : IndexType;

К-во Просмотров: 213
Бесплатно скачать Статья: Интервальные типы данных. Оператор TYPE. Массивы