Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Tłumaczenie: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
Tablice łańcuchowe i liczbowe
DIM
SPIS TREŚCI |
|
Tablice (sposób obsługi łańcuchów w
ZX Spectrum jest trochę niestandardowy).
DIM
...
Załóżmy, że posiadasz listę liczb, np. oceny dla dziesięciu osób w klasie. Aby umieścić je w komputerze, mógłbyś przeznaczyć po jednej zmiennej dla każdej osoby, lecz byłoby to bardzo niezgrabne. Mógłbyś nazwać te zmienne Kolega 1. Kolega 2, itd. aż do Kolega 10, lecz program ustawiający te dziesięć liczb byłby raczej długi i nudny do wpisania.
O ile milej byłoby, gdybyś mógł wpisać coś takiego:
5 REM ten program nie bedzie dzialal 10 FOR n=1 TO 10 20 READ Kolega n 30 NEXT n 40 DATA 1,2,4,3,5,6,4,5,3,1 |
No więc tak nie możesz.
Jednakże istnieje pewne rozwiązanie, dzięki któremu możesz zastosować ten pomysł, a wykorzystuje ono tablice. Tablica jest zbiorem zmiennych, które nazywamy jej elementami, a wszystkie posiadają taką samą nazwę i są rozróżniane jedynie wg numeru (indeksu) zapisywanego w nawiasach po nazwie. W naszym przykładzie nazwa może brzmieć b (podobnie jak przy zmiennych sterujących pętlami FOR - NEXT, nazwa tablicy musi składać się z jednej litery), a te dziesięć zmiennych będzie wtedy miało nazwy b(1), b(2) ... b(10).
Elementy tablicy nazywane są zmiennymi indeksowanymi, w przeciwieństwie do prostych zmiennych, z którymi już się zapoznałeś.
Zanim będziesz mógł wykorzystać jakąś tablicę, najpierw musisz zarezerwować dla niej nieco miejsca w komputerze, a zrobisz to używając polecenia DIM (ang. dimension - rozmiar, wymiar).
DIM b(10) |
tworzy tablicę nazywającą się b o rozmiarze 10 (tj. znajduje się w niej 10 indeksowanych zmiennych b(1), b(2) ... b(10)) i inicjuje te 10 wartości na 0. Kasuje również jakąkolwiek inną tablicę o nazwie b, która istniała poprzednio. (Ale nie prostą zmienną. Mogą współistnieć ze sobą dwie zmienne o tej samej nazwie, z których jedna jest tablicą, a druga zwykłą zmienną, a pomiędzy nimi nie powinno dojść do żadnego zamieszania, ponieważ zmienna tablicy zawsze posiada indeks.)
Indeks może być dowolnym wyrażeniem liczbowym, zatem możesz zapisać:
10 FOR n=1 TO 10 20 READ b(n) 30 NEXT n 40 DATA 10,2,5,19,16,3,11,1,0,6 |
Możesz również tworzyć tablice posiadające więcej niż jeden wymiar. W dwuwymiarowej tablicy potrzebne będą dwie liczby do określenia jednego z elementów — raczej jak numery wiersza i kolumny określające pozycję znaku na ekranie telewizyjnym. Zastępczo możesz sobie wyobrazić te numery wiersza i kolumny (dwa wymiary) jako wskazujące położenie na drukowanej stronie, gdzie mógłbyś posiadać dodatkowy wymiar na numery stron. Oczywiście, mówimy o tablicach liczbowych, zatem ich elementami nie byłyby znaki drukowane, jak w książce, lecz liczby. Wyobrażaj sobie elementy trójwymiarowej tablicy v jako określone przez:
v(numer strony, numer wiersza, numer kolumny). |
Na przykład, aby utworzyć dwuwymiarową tablicę c o wymiarach 3 i 6, używasz polecenia:
DIM c(3,6) |
Daje ci ono 3*6=18 zmiennych indeksowanych:
c(1,1),c(1,2),...,c(1,6) c(2,1),c(2,2),...,c(2,6) c(3,1),c(3,2),...,c(3,6) |
Ta sama zasada obowiązuje dla dowolnej liczby wymiarów.
Chociaż mogą istnieć obok siebie zmienna prosta i tablica o tej samej nazwie, to nie można mieć w programie dwóch tablic o takiej samej nazwie, nawet jeśli różnią się one liczbą wymiarów.
Istnieją również tablice łańcuchowe. Łańcuchy w tablicy różnią się od prostych łańcuchów tym, że posiadają ustaloną długość, a przypisywanie im wartości zawsze odbywa się wg zasady Prokrusta - obcinanie lub dopełnianie spacjami. Również można je traktować jak dwuwymiarowe tablice pojedynczych znaków. Nazwa tablicy składa się z pojedynczej litery i znaku $, a tablica łańcuchowa i zwykła zmienna łańcuchowa nie mogą posiadać wspólnej nazwy (w przeciwieństwie do zmiennych liczbowych).
Załóżmy zatem, że chcesz mieć tablicę a$ z pięcioma łańcuchami. Musisz się zdecydować, jak długie mają być te łańcuchy — załóżmy, że wystarczy dla każdego 10 znaków. Wpisujesz więc
DIM a$(5,10) |
Utworzy to tablicę 5*10 znaków, lecz możesz również traktować każdy jej wiersz jako łańcuch:
a$(1)=a$(1,1) a$(1,2) ... a$(1,10) a$(2)=a$(2,1) a$(2,2) ... a$(2,10) . . . . . . . . . . . . . . . . . . a$(5)=a$(5,1) a$(5,2) ... a$(5,10) |
Jeśli podasz tę samą liczbę indeksów (w tym przypadku dwa) co liczba wymiarów w poleceniu DIM, to otrzymasz pojedynczy znak; lecz jeśli opuścisz ostatni indeks, to otrzymasz łańcuch o ustalonej długości. Zatem, na przykład, A$(2,7) jest 7-mym znakiem łańcucha A$(2); używając notacji slicing, można to również zapisać jako A$(2)(7). Teraz wpisz
LET a$(2)="1234567890" |
i
PRINT a$(2),a$(2,7) |
Otrzymasz:
1234567890 7 |
Przy ostatnim indeksie (tym, który możesz pominąć) możesz również stosować slicing, zatem przykładowo:
a$(2,4 TO 8)=a$(2)(4 TO 8)="45678" |
Zapamiętaj:
W tablicy łańcuchowej wszystkie łańcuchy mają tę samą, ustaloną długość.
Polecenie DIM posiada dodatkową liczbę (ostatnią) w celu określenia tej długości.
Gdy używasz zmiennej indeksowanej jako elementu tablicy łańcuchowej, możesz umieścić dodatkowy numer lub slicing, aby odpowiadał tej dodatkowej liczbie w poleceniu DIM. Możesz stworzyć tablicę łańcuchową bez wymiarów. Wpisz:
DIM a$(10) |
a przekonasz się, że a$ zachowuje się tak samo jak zmienna łańcuchowa za wyjątkiem tego, iż zawsze ma długość 10, a przypisania do niej zawsze wykonywane są wg zasady Prokrusta.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.