Dynamiczne tablice

Tytuł tej części kursu może wprowadzać w błąd, ponieważ w REXXie nie ma tablic jakie znamy z innych języków programowania, tylko zmienne, których cechy są bardzo do nich zbliżone. Ze względu na to podobieństwo oraz brak konieczności podawania liczby elementów zdecydowałem się na stosowanie nazwy „dynamiczne tablice”.

 <<Następna część artykułu | Poprzednia część artykułu>>

1.Wstęp

„Tablice” składają się z dwóch części: rdzenia oraz indeksu. Rdzeń składa się z nazwy zmiennej oraz kropki. Indeks może składać się z kilku elementów, które oddzielamy kropką np.:

tab. „Elementy”;

tab.1 „Element 1”;

tab.1.1 „Element 1×1”;

tab.indeks „Element indeks”;


Jak widać indeksem może być liczba lub dowolny ciąg znaków.

 

2.Właściwości

„Tablice” mają kilka bardzo ciekawych właściwości, pierwszą z nich jest deklaracja wszystkich elementów za jednym razem:

subject. „Nie ma takiego przedmiotu”;

subject.1 „Matematyka”;

subject.2 „Algorytmy”;

subject.3 „Grafika komputerowa”;

subject.4 „Kryptografia”;

Say subject.1; /* Wyświetli: Matematyka */

Say subject.2; /* Wyświetli: Algorytmy */

Say subject.3; /* Wyświetli: Grafika komputerowa */

Say subject.9; /* Wyświetli: Nie ma takiego przedmiotu */

Say subject.sub; /* Wyświetli: Nie ma takiego przedmiotu */

 

Drugą jest to, że indeksem może być zmienna:

5;

6;

month. „Nie ma takiego miesiąca”;

month.5 =„Maj”;

month.6 „Czerwiec”;

month.11 „Listopad”;

Say month.x; /* Wyświetli: Maj */

Say month.y; /* Wyświetli: Czerwiec */

Say month.x+y; /* ????????? */

 

Podczas próby uruchomienia tego przykładu interpreter zgłosi błąd, który wystąpił w ostatniej linii kodu, ponieważ najpierw następuje rozwiązanie zmiennej month.xa dopiero potem dodanie do niej wartości zmiennej y. W efekcie otrzymujemy wyrażenie Maj + 6, czyli próbujemy dodać ciąg znaków do liczby.

3. Pętle

Dzięki pętlom możemy w bardzo szybki sposób uzyskać dostęp do zawartości wszystkich elementów „tablicy”:

day.1 „Poniedziałek”;

day.2 „Wtorek”;

day.3 „Środa”;

day.4 „Czwartek”;

day.5 „Piątek”;

day.6 „Sobota”;

day.7 „Niedziela”;

Do to 7

Say day.i;

End /* i = 1 to day.0 */

4. Dynamiczna ilość elementów „tablicy”

Jak widać na przykładach w żadnym z naszych skryptów nie deklarowaliśmy ile elementów będzie mieć nasza „tablica”. Jest to bardzo ciekawa właściwość, którą wykorzystamy w następnym przykładzie:

 

Do 1

Say „Podaj przedmiot oraz ocenę: „;

Parse Pull przedmiot.i ocena.i

If przedmiot.i ” Then Leave

End /* Do i = 1 */

counter i1;

Say „Podano: „

Do j=To counter

Say przedmiot.j;

Say ocena.j;

End /* Do j=1 To counter */

 

5. Ciąg znaków jako indeks

Poniższy przykład prezentuje jak przydatne okazuje się wykorzystanie ciągu znaków jako indeksu:

dsn „HLQ.DATA.IN”;

„ALLOC DD (INPUT) DSN („dsn„) SHR”;

„EXECIO * DISKR INPUT (STEM line. FINIS”;

Do To line.0

Parse Var line.i marka model.marka rok.marka cena.marka

End /* Do i = 2 To line.0 */

Say „Która marka Cię interesuje?”;

Parse Pull marka;

Say „Dostępny model to: „model.marka;

Say „Rok produkcji: „rok.marka;

Say „Cena: „cena.marka;


„FREE DD(INPUT)”
;

 

Ten prosty skrypt do zmiennej line. wczytuje za pomocą komendy TSO zawartość zbioru HLQ.DATA.IN:

Do elementu 0 tablicy line. automatycznie zapisywana jest ilość linii zbioru wejściowego, i tą właściwość wykorzystujemy w pętli. Pętla odczytuje zawartość tablicy line. od drugiego elementu (pomija nagłówek tabeli), następnie parsuje ją na poszczególne elementy w wyniku czego otrzymujemy:

model.Bugatti = „Veyron”

rok.Bugatti = „2013”

cena.Bugatti = „$2400000”

itd.

 

Następnie pobieramy z konsoli nazwę modelu która jest jednocześnie indeksem i tą właściwość wykorzystujemy do wyświetlenia wyników.

 

Autor: Dawid Morawiec

 

Komentarze

Brak komentarzy

The comments are closed.

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.

Subskrybuj RSS