nextupprevious

Next:5.17 Простое выражение
Up:5 Выбор представления данных
Previous:5.15 Логическая формула


5.16 Логический фрагмент

В н е ш н е е представление логического фрагмента можно задавать аналогично внешнему представлению графов.

логический-фрагмент::= колисчество-вершин {вершина}*
вершина::= запятая от пробел {висячая пробел цифра-пометка |невисячая пробел услов пробел куда}
куда::= плюс-преемник пробел минус-преемник
плюс-преемник::= минус-преемник::= натуральное-число
от::= количество-вершин::= натуральное-число
висячая::= Т
невисячая::= F
услов::= буква
цифра-пометка::= цифра
запятая::= ,

Например, внешним представлением изображенного на рис. 8.25 логического фрагмента будет: 4,1 F X 2 3,2 F Y 4 3,3 T 1,4 F Z 4 4 Абстрактный тип:ВЕРШИНА. Набор функций:

Висячая (ВЕРШИНА):Boolean;
Плюс(ВЕРШИНА):ВЕРШИНА;  // для невисячей вершины
Минус(ВЕРШИНА):ВЕРШИНА;  // для невисячей вершины
Начальная (ФРАГМЕНТ):ВЕРШИНА;
Пометка (ВЕРШИНА):Char;

Последняя из операций должна вычислять либо букву -- логическую переменную (для невисячих вершин), либо цифру (для висячих вершин). Возможны следующие два варианта (разумеется, они не исчерпывают всех возможностей) для реализации этого абстрактного типа на языке Паскаль.

В а р и а н т 1.

object { public, ref } ФРАГМЕНТ;
var { public } МЕТКА:Char;
                        ВИСЯЧ:Boolean;
                        ПлюсПреем,МинусПреем: ФРАГМЕНТ;
end ФРАГМЕНТ;

В а р и а н т 2.

const N=20; {Количество вершин}
type ВЕРШИНА=integer;
object { public, value }УЗЕЛ;
var { public } МЕТКА: Char;
        ВИСЯЧ:Boolea;
        ПлюсПреем,МинусПреем:ВЕРШИНА;
end УЗЕЛ;
object { public, value } ФРАГМЕНТ;
var { public } ВЕРШИНЫ: array N of УЗЕЛ;
      НАЧАЛО: ВЕРШИНА
end ФРАГМЕНТ;

Если в варианте 1 вершины представляются ссылками на записи Паскаля, то в варианте 2 вершины -- это целые номера соответствующих записей в массиве.

Next:5.17 Простое выражение
Up:5 Выбор представления данных
Previous:5.15 Логическая формула


© В.Н. Касьянов, Е.В.Касьянова, 2004