Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Определение массива



ОПРЕДЕЛЕНИЕ-МАССИВА::=

ОПРЕДЕЛЕНИЕ-ИНДЕКСОВ ОПРЕДЕЛЕНИЕ-ЭЛЕМЕНТА-МАССИВА |

АГРЕГАТ-МАССИВ |

ОПРЕДЕЛЕНИЕ-МАССИВА-ПО-ЧАСТЯМ

ОПРЕДЕЛЕНИЕ-МАССИВА-ПО-ЧАСТЯМ::=

ОПРЕДЕЛЕНИЕ-ИНДЕКСОВ ОПРЕДЕЛЕНИЕ-ЧАСТЕЙ-МАССИВА

Результатом вычисления ОПРЕДЕЛЕНИЯ-МАССИВА является значение массива. Вычисление реализуется итерацией по всевозможным значениям набора индексов массива. Для каждого набора индексов вычисляется соответствующий элемент массива. Вычисление значений разных элементов может проводиться параллельно.

ОПРЕДЕЛЕНИЕ-ЭЛЕМЕНТА-МАССИВА::= ВЫРАЖЕНИЕ

ВЫРАЖЕНИЕ для элемента массива зависит от индексов, указанных в ОПРЕДЕЛЕНИИ-ИНДЕКСОВ.

ОПРЕДЕЛЕНИЕ-ИНДЕКСОВ::= for ( ЗАДАНИЕ-ИНДЕКСОВ )

ЗАДАНИЕ-ИНДЕКСОВ::= ОПРЕДЕЛЕНИЕ-ИНДЕКСА [, ЗАДАНИЕ-ИНДЕКСОВ]

ОПРЕДЕЛЕНИЕ-ИНДЕКСА::= [ИЗОБРАЖЕНИЕ-ТИПА-ПЕРЕМЕННОЙ] ИНДЕКС

ИНДЕКС::= ИДЕНТИФИКАТОР

Переменные, обозначающие индексы, локальны в ОПРЕДЕЛЕНИИ-МАССИВА. При определении индекса обычно используется описатель var (см. разд. 6.4). Указание типа индекса требуется в редких случаях, когда тип масива (в том числе и типы индексов массива) трудно определить из позиции, в которой находится ОПРЕДЕЛЕНИЕ-МАССИВА. Отметим, что в ОПРЕДЕЛЕНИИ-ИНДЕКСА тип индекса, если он задан явно, должен точно покрывать множество значений индекса; обычно это диапазон типа int.


type ar1_5 = array (int, 1..5);

ar1_5 squ;

squ = for (var i) i*i;

ar1_5 r = for (var i) 100 - i;

Пример 15. Конструкторы массивов

ОПРЕДЕЛЕНИЕ-ЧАСТЕЙ-МАССИВА::=

{ (ОПРЕДЕЛЕНИЕ-ЧАСТИ-МАССИВА)+

[ default: ОПРЕДЕЛЕНИЕ-ЭЛЕМЕНТА-МАССИВА ]

}

ОПРЕДЕЛЕНИЕ-ЧАСТИ-МАССИВА::=

case ИНДЕКСЫ-ЧАСТИ: ОПРЕДЕЛЕНИЕ-ЭЛЕМЕНТА-МАССИВА

ИНДЕКСЫ-ЧАСТИ::= ЭЛЕМЕНТ-НАБОРА-ИНДЕКСОВ |

( НАБОР-ИНДЕКСОВ ) |

( ЭЛЕМЕНТ-НАБОРА-ИНДЕКСОВ [, ИНДЕКСЫ-ЧАСТИ] ) |

(( НАБОР-ИНДЕКСОВ ) [, ИНДЕКСЫ-ЧАСТИ] )

ИНДЕКСЫ-ЧАСТИ определяют некоторое подмножество на произведении типов индексов. Эти подмножества не должны пересекаться для разных ОПРЕДЕЛЕНИЙ-ЧАСТИ-МАССИВА. Определение элементов массива для наборов индексов, не принадлежащих ни одной из указанных частей массива, реализуется частью default. При отсутствии части default объединение подмножеств наборов индексов для разных частей должно совпадать с полным множеством наборов индексов. Вычисление элементов массива по каждой из частей массива проводится независимо, возможно параллельно.

Если ОПРЕДЕЛЕНИЕ-ЧАСТЕЙ-МАССИВА используется в операции модификации массива (см. разд. 6.6), то часть default отсутствует.

type Ar(nat k) = array (real, 1..k);

F (nat n, Ar(n) x: Ar(n+1) x')

{ x' = for (var j) { case 1..n: x[j] + 1 case n + 1: 0 } }

Пример 16. Определение массива по частям

type MATR(nat k) = array(real, 1..k, 1..k);

perm_lines(nat n, MATR(n) a, nat k, m: MATR(n) a')

pre 1 <= k < m <= n

{ a' = a with for (var i, j) {

case (k, 1..n): a[m, j]

case (m, 1..n): a[k, j]

}

}

Пример 17. Перестановка двух строк матрицы

В матрице a переставляются местами строки с номерами k и m. Перестановка реализуется применением операции модификации (см. разд. 6.6) двух строк в массиве a; остальные строки остаются неизменными. Задание нового значения двух строк матрицы реализуется конструкцией ОПРЕДЕЛЕНИЕ-ЧАСТЕЙ-МАССИВА.





Дата публикования: 2014-11-18; Прочитано: 175 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...