CSL-CROOK - Instrukcja SPLIT

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania

Instrukcja SPLIT na podstawie, której dokonuje się podziału elementów między zbiory w/g różnych kryteriów, ma kilka postaci. Używa się jej w formie zasadniczej (pełnej) i skróconej, z towarzyszącym zespołem warunków lub bez a nawet w bardziej złożonej konfiguracji. W połączeniu z innymi instrukcjami. Cechą charakterystyczną wszystkich form wykorzystania tej instrukcji jest brak instrukcji postaci adresowej. Program jest kontynuowany zawsze od następnej instrukcji po SPLIT.

Zasadnicza postać instrukcji jest następująca:

SPLIT i z1 INTO z2 ELSE z3
:
: (łańcuchy badań)

Gdzie:

  • i - zmienna typy INTEGER
  • z1, z2, z3 - nazwy zbiorów, które zadeklarowano jako należące do tej samej klasy.

Działanie instrukcji rozpoczyna się opróżnieniem (zerowaniem) zbiorów z1 i z2. Następnie kontrolowany jest zespół warunków dotyczący każdego elementu zbioru z1. Zmienna i przybiera przy każdej kontroli zespołu warunków wartość indeksu kolejnego elementu zbioru a1. Jeżeli zbiór warunków jest spełniony, element zostaje umieszczony w zbiorze Z2, jeżeli zaś, którykolwiek z warunków nie jest spełniony, element umieszczony zostaje w Z3. W ciągu całego procesu wykonywania instrukcji zawartość zbioru z1 nie ulega zmianie. Instrukcja ta wymaga zawsze podania co najmniej jednego warunku, który zawiera również zmienna <i>, bowiem w przeciwnym przypadku instrukcja ta traci sens.

W skróconej formie instrukcja SPLIT może występować w dwóch postaciach:

SPLIT i Z1 INTO Z2
:
: (łańcuchy badań)

lub

SPLIT i Z1 ELSE Z2
:
: (łańcuchy badań)

W rezultacie działania pierwszej wersji instrukcji SPLIT, do zbioru Z2 zostaną przeniesione te elementy zbioru Z1, dla których zespół warunków jest spełniony.

Druga wersja skróconej instrukcji SPLIT działa w sposób odwrotny tj., powoduje umieszczenie w zbiorze Z2 tych elementów zbioru Z1, dla których łańcuchy badań nie są spełnione.

Instrukcję SPLIT można również używać w połączeniu z zastrzeżonymi słowami HEAD lub TAIL.

Ogólna postać instrukcji jest w tym układzie następująca:

SPLIT i Z1 INTO HEAD Z2 ELSE HEAD Z3
TAIL TAIL
:
: (łańcuchy badań)

W tej postaci zbiory Z1, Z2 nie są zerowane, jak to ma miejsce w innych wersjach wykorzystania instrukcji. Jeżeli łańcuchy badań są spełnione, wówczas dany element klasy należący do zbioru Z1 zostaje dołączony na początek zbioru Z2. Dzieje się tak w przypadku użycia słowa HEAD. Natomiast dany element zostaje dodany za elementami znajdującymi się już w zbiorze Z2, jeśli użyjemy słowa TAIL.

Słowo ELSE oznacza alternatywne działanie instrukcji, która powoduje umieszczenie danego elementu w zbiorze Z3 (na początku zbioru jeżeli użyjemy słowa HEAD lub na końcu zbioru jeżeli użyjemy słowa TAIL), jeżeli łańcuch badań nie jest spełniony.

Słowa INTO i ELSE mogą być w instrukcji SPLIT dodatkowo uzupełnione słowami HEAD lub TAIL. Dopuszczalne są więc następujące formy użycia instrukcji:

SPLIT .... INTO HEAD .... ELSE TAIL ...
SPLIT .... INTO HEAD .... ELSE
SPLIT .... INTO ......... ELSE HEAD ....
SPLIT .... INTO HEAD ....
SPLIT .... ELSE TAIL ....

Specjalne możliwości w symulacji daje instrukcja SPLIT połączona ze słowem strukturalnym języka QUALIFY. Słowa tego używa się w instrukcji SPLIT w celu zignorowania przy badaniu łańcuchów badań określonych elementów klasy. Słowo QUALITY może występować wyłącznie w zespole warunków instrukcji SPLIT i musi być umieszczone bezpośrednio po SPLIT.

Ogólna postać tej wersji instrukcji SPLIT jest następująca:

SPLIT .... Z1 .... Z2 .... Z3
QUALIFY
.... (łańcuchy badań dla QUALIFY)
....
.... (łańcuchy badań dla SPLIT)
....

Każdy element zbioru Z1 zostaje sprawdzony na podstawie łańcuchów badań objętych słowem QUALIFY zanim zostanie umieszczony w zbiorze Z2 lub Z3, zgodnie z kryteriami instrukcji SPLIT.

Instrukcja RANK

Instrukcja ta ma następującą postać:

RANK i <zbiór> (<wyrażenie>)

Dla każdego elementu zbioru zmienna przyjmuje wartość indeksu obiektu i następuje obliczenie obliczenie wyrażenia. Obiekty należące do zbioru zostaną ustawione w taki sposób, że odpowiadające im wartości wyrażenia zostają uporządkowane w porządku malejącym. Ten obiekt, dla którego wartość wyrażenia przyjmuje największą wartość, staje się pierwszym elementem zbioru. Instrukcja RANK występuje łańcucha badań. Dla zbiorów boolowskich instrukcja ta jest ignorowana.

Źródło: Translator języka CSL-CROOK dla minikomputera MERA-400 w systemie operacyjnym CROOK-4, Instrukcja Programisty (wersja-17/2), Janusz Gocałek, Jacek Klauziński, Poznań, 1985