Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor: Steven Vickers
Tłumaczył: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

ROZDZIAŁ 22 – Tablice

Rozkaz: DIM

SPIS TREŚCI
ROZDZIAŁ 1 Przygotowanie ZX81
ROZDZIAŁ 2 Wydawanie komputerowi poleceń
ROZDZIAŁ 3 Lekcja historii
ROZDZIAŁ 4 Sinclair ZX81 jako kalkulator kieszonkowy
ROZDZIAŁ 5 Funkcje
ROZDZIAŁ 6 Zmienne
ROZDZIAŁ 7 Łańcuchy tekstowe
ROZDZIAŁ 8 Programowanie komputera
ROZDZIAŁ 9 Dalsze programowanie komputera
ROZDZIAŁ 10 Jeśli ...
ROZDZIAŁ 11 Zestaw znaków
ROZDZIAŁ 12 Pętle
ROZDZIAŁ 13 Wolno i Szybko
ROZDZIAŁ 14 Podprogramy
ROZDZIAŁ 15 Uruchamianie programów
ROZDZIAŁ 16 Pamięć taśmowa
ROZDZIAŁ 17 Wyświetlanie z bajerami
ROZDZIAŁ 18 Grafika
ROZDZIAŁ 19 Czas i ruch
ROZDZIAŁ 20 Drukarka dla ZX81
ROZDZIAŁ 21 Podłańcuchy
ROZDZIAŁ 22 Tablice
ROZDZIAŁ 23 Gdy zaczyna brakować pamięci
ROZDZIAŁ 24 Liczenie na palcach
ROZDZIAŁ 25 Jak pracuje komputer
ROZDZIAŁ 26 Stosowanie kodu maszynowego
ROZDZIAŁ 27 Organizacja pamięci
ROZDZIAŁ 28 Zmienne systemowe
DODATKI
A Zestaw znaków
B Numery komunikatów
C ZX81 dla znających język BASIC

ROZDZIAŁ 22 – Tablice

Załóżmy, iż posiadasz listę liczb, np. liczbę zgonów poborców podatku dochodowego w każdym miesiącu bieżącego roku obrachunkowego. Aby zapisać je w komputerze, mógłbyś utworzyć pojedynczą zmienną dla każdego miesiąca, lecz byłoby to bardzo pokraczne. Mógłbyś się zdecydować na nazwanie tych zmiennych JUZ ICH NIE MA 1, JUZ ICH NIE MA 2, itd. aż do JUZ ICH NIE MA 12, lecz program drukujący te dwanaście liczb byłby raczej długi i nudny do wpisania.

Jak miło byłoby, gdybyś mógł wpisać:

  5 REM TEN PROGRAM NIE BEDZIE DZIALAL
10 FOR N=1 TO 12
20 PRINT JUZ ICH NIE MA N
30 NEXT N

Cóż, tak nie możesz.

Jednakże istnieje mechanizm, dzięki któremu możesz urzeczywistnić ten pomysł, i który wykorzystuje tablice. Tablica jest zbiorem zmiennych lub elementów, wszystkich o tej samej nazwie, a rozróżnialnych tylko przez numer (lub indeks) zapisany w nawiasach za nazwą. W naszym przykładzie nazwą byłoby A (podobnie jak zmienne sterujące pętli FOR-NEXT, nazwa tablicy musi być pojedynczą literą), a te dwanaście zmiennych byłoby A(1), A(2) itd. aż do A(12).

Elementy tablicy nazywamy indeksowanymi zmiennymi, w przeciwieństwie do prostych zmiennych, z którymi się już oswoiłeś.

Zanim będziesz mógł korzystać z tablicy, musisz dla niej zarezerwować nieco miejsca wewnątrz komputera, a robisz to za pomocą polecenia DIM,

DIM A(12)

tworzy tablicę zwaną A z wymiarem 12 (tj. zawiera ona 12 indeksowanych zmiennych A(1),...,A(12)), i inicjuje te 12 wartości na 0. Kasuje ona również każdą tablicę o nazwie A, która istniała poprzednio (lecz nie dotyczy to prostej zmiennej. Tablica oraz zmienna prosta o tej samej nazwie mogą współistnieć i nie powinno to prowadzić do żadnego zamieszania, ponieważ dostęp do elementów tablicy zawsze odbywa się za pomocą indeksów).

Indeks może być dowolnym wyrażeniem liczbowym, zatem teraz możesz napisać:

10 FOR N=1 TO 12
20 PRINT A(N)
30 NEXT N

Można również tworzyć tablice o więcej niż jednym wymiarze. W dwuwymiarowej tablicy potrzebujesz dwóch liczb do określenia jednego z jej elementów - coś w stylu numeru wiersza i numeru kolumny do określenia pozycji znaku na ekranie telewizyjnym - zatem ma ona postać tabeli. Inne podejście, to potraktowanie wymiarów jako numerów wierszy i kolumn na wydrukowanej stronie, a dodatkowy wymiar odnosiłby się do numerów stron. Oczywiście mamy na myśli tablice liczbowe, więc ich elementami nie byłyby znaki jak w książce, lecz liczby. Myśl o elementach trójwymiarowej tablicy C jako C(numer strony, numer wiersza, numer kolumny).

Na przykład, aby utworzyć dwuwymiarową tablicę B o wymiarach 3 i 6, używasz polecenia:

DIM B(3,6)

Daje ci ono 3*6 = 18 indeksowanych zmiennych

B(1,1), B(1,2),..., B(1,6)
B(2,1), B(2,2),..., B(2,6)
B(3,1), B(3,2),..., B(3,6)

Ta sama zasada odnosi się dla dowolnej liczby wymiarów.

Chociaż jednocześnie możesz mieć liczbę i tablicę o tej samej nazwie, to dwóch tablic już nie, nawet jeśli się różnią liczba wymiarów.

Istnieją także tablice łańcuchowe. Łańcuchy w tablicy różnią się od prostych łańcuchów tym, iż posiadają one stałą długość, a przypisanie do nich zawsze podlega zasadzie dopasowania Prokrustesa - innym podejściem jest traktowanie ich jako tablic (o jednym dodatkowym wymiarze) pojedynczych znaków. Nazwa tablicy łańcuchowej składa się z pojedynczej litery i z umieszczonego bezpośrednio za nią znaku $, a tablica łańcuchowa i prosta zmienna łańcuchowa nie mogą posiadać takiej samej nazwy (w przeciwieństwie do tablic liczbowych).

Przypuśćmy zatem, iż chcesz tablicy A$ z pięcioma łańcuchami. Musisz określić długość tych łańcuchów - przypuśćmy, że wystarczy 10 znaków dla każdego z nich. Wtedy piszesz:

DIM A$(5,10)

Tworzy to tablicę 5*10 znaków, lecz możesz również traktować każdy wiersz jakby był łańcuchem:

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 taką samą liczbę indeksów jak liczba wymiarów (w tym przypadku 2) przy poleceniu DIM, to otrzymasz pojedynczy znak, ale jeśli opuścisz ostatni indeks, to otrzymasz łańcuch o stałej długości. Zatem na przykład A$(2,7) daje siódmy znak w łańcuchu A$(2); a stosując notację slicingu, moglibyśmy to zapisać jako A$(2)(7). Teraz wpisz:

LET A$(2)="1234567890"

i

PRINT A$(2),A$(2,7)

Otrzymasz

1234567890      7

W ostatnim indeksie (tym, który możesz pominąć) można również stosować slicing, zatem na przykład

A$(2,4 TO 8) = A$(2)(4 TO 8) = "45678"

Zapamiętaj:

W tablicy łańcuchowej wszystkie łańcuchy posiadają tą samą, ustaloną długość.

Polecenie DIM posiada dodatkową liczbę (ostatnią) do określenia tej długości.

Gdy wypisujesz indeksowaną zmienną dla tablicy łańcuchowej, możesz wstawić dodatkową liczbę lub slicing, odpowiadającą dodatkowej liczbie w poleceniu DIM.

Podsumowanie:

Tablice (sposób przetwarzania tablic łańcuchowych w ZX81 jest nieco niestandardowy)

Polecenie: DIM

Ćwiczenia

  1. Utwórz tablicę M$ dwunastu łańcuchów, w której M$(N) jest nazwą N-tego miesiąca (wskazówka: polecenie DIM powinno brzmieć DIM M$(12,11)). Przetestuj ją wypisując wszystkie M$(N) (użyj pętli). Wpisz:

    PRINT
    "TERAZ JEST MIESIAC ";M$(5);", GDY BAWIA SIE WESOLE DZIATKI"

    Czy dałoby się coś zrobić z tymi nadmiarowymi spacjami?
  1. Możesz posiadać jednowymiarową tablicę łańcuchową. Wpisz

    DIM
    A$(10)

    a odkryjesz, że A$ zachowuje się jak zmienna łańcuchowa, tylko zawsze ma długość 10 i przypisanie do niej zawsze jest wg zasady Prokrustesa.
  1. READ, DATA i RESTORE; po co są potrzebne?

    Większość dialektów języka BASIC (nie ZX81 BASIC) posiada trzy polecenia zwane READ, DATA i RESTORE.

    Polecenie DATA jest listą wyrażeń, a zebranie wszystkich poleceń DATA w programie daje jedną długą listę wyrażeń, listę DATA.

    Polecenia READ stosuje się do przypisywania tych wyrażeń, jednego po drugim, do zmiennych:

    READ X

    przypisuje bieżące wyrażenie na liście DATA  do zmiennej X i przesuwa się do następnego wyrażenia dla kolejnego polecenia READ.

    RESTORE przewija listę DATA na początek.

    W teorii zawsze można zastąpić polecenia READ i DATA za pomocą poleceń LET; jednakże głównie stosuje się je do inicjalizacji tablic, jak w programie:

      5 REM TEN PROGRAM NIE BEDZIE DZIALAL W ZX81 BASIC
    10 DIM M$(12,3)
    20 FOR N=1 TO 12
    30 READ M$(N)
    40 NEXT N
    50 DATA "STY","LUT","MAR","KWI"
    60 DATA "MAJ","CZE","LIP","SIE"
    70 DATA "WRZ","PAZ","LIS","GRU"

    Jeśli chciałbyś tylko raz uruchomić ten program, to równie dobrze mógłbyś zastąpić wiersz 30 poleceniem INPUT:

    10 DIM M$(12,3)
    20 FOR N=1 TO 12
    30 INPUT M$(N)
    40 NEXT N

    i nie musiałbyś już nic więcej wpisywać. Jednakże, jeśli planujesz zapisać program, to na pewno nie chciałbyś wpisywać nazw miesięcy przy każdym uruchomieniu go.

    Proponujemy użycie takiej metody:

    (i) Zainicjuj tablicę przy pomocy programu jak ten powyżej.

    (ii) Usuń program inicjujący (nie stosuj polecenia NEW, ponieważ chcesz zachować tablicę).

    (iii) Wpisz resztę programu i zapisz go na taśmie. Spowoduje to również zapisanie zmiennych, łącznie z tablicami.

    (iv) Gdy załadujesz program z taśmy, również załadujesz tablicę.

    (v) Gdy uruchamiasz program, nie używaj polecenia RUN, które czyści zmienne. Zamiast tego używaj GOTO z numerem wiersza.

    Mógłbyś również zastosować technikę ładowania programu z autostartem, opisaną w rozdziale 16 przy ćwiczeniu 3. Wtedy w kroku (iii) powyżej zastosuj polecenie SAVE wewnątrz programu, a krok (v) staje się zupełnie zbędny.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.