Tablice jednowymiarowe 1 Definicja Strukturalnym typem danych (composite data type) nazywamy typ danych umożliwiający związanie zespołu danych z identyfikatorem. Definicja Typ strukturalny nazywamy typem tablicowym (array type), jeżeli wszystkie składowe struktury są tego samego typu i dostęp do składowych odbywa się przez mechanizm indeksowania. Definicja Tablica jednowymiarowa (one-dimensional array) 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 T, to zgodnie z definicją, tablica jednowymiarowa A reprezentuje odwzorowanie A : I T. Jeżeli i I, to i - ty element tej tablicy oznaczamy przez A(i) T i ten sposób zapisu przyjęto w Adzie.
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. Definicja Typ danych, który nie ma identyfikatora typu nazywamy typem anonimowym (anonymous type).
Tablice jednowymiarowe 4 Należy przypomnieć, ze Ada jest językiem o silnej typizacji danych. Z tego wynika, że 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; Przykład PP_021_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 z programu PP_022_Sprzedaz_Tygodniowa. 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
Zadania. Literatura podstawowa Ada_Zadania_07_Tablice_Jednowymiarowe.pdf Literatura podstawowa Morawski, M., Zajączkowski, A. M. (2003). Wstęp do programowania w języku Ada’95. Rozdziały 5.1, 5.2.