Tablice jednowymiarowe 1
Definicja.
Strukturalnym typem danych nazywamy
typ danych umożliwiający związanie zespołu danych
z identyfikatorem.
Definicja.
Typ strukturalny nazywamy typem
tablicowym, jeżeli wszystkie składowe struktury są
tego samego typu i dostęp do składowych odbywa
się przez mechanizm indeksowania.
Definicja.
Tablica jednowymiarowa jest skończonym
ciągiem danych tego samego typu.
Jeżeli zbiór indeksów oznaczymy przez I, a zbiór
wartości typu elementów tablicy przez A, to zgodnie
z definicją tablica jednowymiarowa A jest
odwzorowaniem A : IA.
Jeżeli i I, to i - ty element tej tablicy oznaczamy
przez A(i) i ten sposób zapisu przyjęto w Adzie.
i
Tablice jednowymiarowe 2
W notacji EBNF mamy:
array_type_definition ::= array index_constraint of
component_subtype_indication
index_constraint ::= (discrete_subtype_indication |
range)
discrete_subtype_indication ::= type_name |
subtype_name
range ::= simple_expression..simple_expression |
range_attribute
Typ indeksu może więc być typem dyskretnym,
podtypem dyskretnym, albo zakresem typu
dyskretnego.
Tablice jednowymiarowe 3
Przykład.
Niech będzie dana deklaracja
M : array (Positive range 1..10) of Float;
Zmienna M jest typu tablicowego, którego zbiorem
wartości są dziesięcioelementowe tablice liczb
rzeczywistych reprezentowanych przez typ
standardowy Float.
W tym przypadku I
= {1,2,..,10}, A = {Float}, przy
czym {Float} oznacza zbiór wartości typu Float.
Tablica M jest typu opisanego w deklaracji tej zmiennej.
Typ ten jest anonimowy (
anonymous type
).
Definicja.
Typ danych, który nie ma identyfikatora
typu nazywamy typem anonimowym.
Tablice jednowymiarowe 4
Należy przypomnieć, ze Ada jest językiem o silnej
typizacji danych. Z tego wynika, ze jeżeli mamy
deklaracje
Min : constant Integer := 1;
Max : constant Integer := 10;
M : array (Integer range Min..Max) of Float;
T : array (Integer range Min..Max) of Float;
to tablice M i T są różnych typów, mimo że
zdefiniowanych identycznie.
W wyniku tego nielegalna jest relacja równości M =
T i instrukcja podstawienia M := T;
Możemy jednak definiować typy tablicowe, które nie
są anonimowe, czyli mają nazwę.
Tablice jednowymiarowe 5
Przykład.
Niech będą dane deklaracje
Min : constant Integer := 1;
Max : constant Integer := 10;
subtype Index is Positive range Min..Max;
type List is array (Index) of Float;
:
M, L : List;
W tym przypadku zdefiniowano typ indeksów Index,
następnie typ tablicowy List oraz zmienną M tego
typu. Rozwiązanie to jest lepsze od tego z
poprzedniego przykładu, ponieważ możemy
deklarować inne zmienne typu List w obszarze
deklaracji tego typu. Legalne są teraz relacja M =
L i instrukcja podstawienia T := M;
Program.
Deklaracja_Tablicy_Jednowymiarowej
Tablice jednowymiarowe 6
W notacji EBNF dostęp do elementu zapisujemy w
postaci
indexed_component ::= name (expression),
przy czym name jest identyfikatorem zmiennej
tablicowej, a wyrażenie w nawiasie może być
literałem, stałą, zmienną, albo kombinacją tych
obiektów, operatorów i ewentualnie wywołań
funkcji.
Wartość wyrażenia musi być typu zgodnego z typem
indeksów tablicy.
Element tablicy traktowany jest jak zmienna, co
oznacza, że można przypisać mu wartość, wczytać
lub wypisać wartość, użyć jako parametru aktualnego
podprogramu, lub użyć jako argumentu wyrażenia.
Tablice jednowymiarowe 7
Przykład.
Przypuśćmy, że chcemy
przechowywać dzienne wyniki sprzedaży
całego tygodnia. W tym celu możemy
stosować deklaracje:
Program.
Week_Sales.
Atrybuty tablic jednowymiarowych
Niech będzie dana deklaracja
A : array (Index_Type range
First..Last) of Component_Type;
Z tablicą tą związane są następujące
atrybuty:
Tablice jednowymiarowe 8
A'First – pierwsza wartość indeksu
A‘Last – ostatnia wartość indeksu
A‘Length – liczba wartości indeksu
A‘Range = A'First.. A‘Last
Tablice jednowymiarowe 9
Literatura podstawowa
Morawski, M., A. M. Zajączkowski.
(2003).
Wstęp do programowania w języku
Ada’95. Rozdziały 5.1, 5.2.