Informatyka dla klas II – tablice

Tablica (ang. array) lub wektor (ang. vector) jest złożoną strukturą danych (ang. compound data structure) zbudowaną z ciągu elementów tego samego typu. W pamięci komputera elementy tablicy są ułożone kolejno jeden obok drugiego. Dostęp do elementu odbywa się poprzez numer zwany indeksem. Na podstawie indeksu, rozmiaru elementu oraz adresu początku tablicy komputer oblicza adres elementu i w ten sposób uzyskujemy do niego dostęp.

We współczesnych językach programowania tablice są stosowane powszechnie do przechowywania danych podobnego rodzaju. Przy ich pomocy można zapisywać ciągi liczbowe, wyniki pomiarów różnych wielkości oraz tworzyć złożone bazy danych. Liczba zastosowań tablic jest w zasadzie ograniczona jedynie naszą wyobraźnią. Podstawową zaletą tablic jest prostota przetwarzania ich elementów. Dzięki dostępowi poprzez indeksy, elementy tablic daje się łatwo przetwarzać w pętlach iteracyjnych.

 

Deklarowanie tablic

Przed pierwszym użyciem każda tablica musi być zadeklarowana tak jak wszystkie zmienne używane w programie – tablica jest zmienną złożoną.

Deklarację tablicy umieszczamy w języku C++ na liście deklaracji zmiennych. Składnia jest następująca:

 

typ_danych nazwa_tablicy[liczba_elementów];
typ_danych  –  określa rodzaj informacji przechowywanych przez deklarowane zmienne
nazwa_tablicy  – tworzona jest wg zwykłych reguł tworzenia nazw zmiennych w języku C++
Liczba_elementów  – określa, ile elementów danego typu przechowuje tablica

 

Poniżej podajemy kilka przykładów deklaracji tablic w C++:

 

...
int    a[3];  // tablica zawierająca 3 elementy typu int
double x[10]; // tablica przechowująca 10 liczb typu double
char   c[6];  // tablica przechowująca 6 wartości znakowych
...
 

W języku C++ indeksy tablic rozpoczynają się od 0. Ma to sens, ponieważ nazwa tablicy jest traktowana zawsze jak adres początku obszaru pamięci, w którym tablica przechowuje swoje elementy. Naturalne zatem jest, iż pierwszy element leży właśnie pod adresem tablicy. Stąd jego indeks wynosi 0, czyli nic nie musimy dodawać do adresu początku tablicy, aby uzyskać dostęp do jej pierwszego elementu.

W powyższym przykładzie zadeklarowano trzy tablice a, x  oraz c. Posiadają one elementy o następujących indeksach:

 

Tablica a  : a[0] a[1] a[2] – 3 elementy typu integer
Tablica x  : x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8] x[9] – 10 elementów typu double
Tablica c  : c[0] c[1] c[2] c[3] c[4] c[5] – 6 elementów typu char

 

Zwróć uwagę, iż tablica nie posiada elementu o indeksie równym ilości elementów. Zatem jeśli zadeklarujemy np. tablicę:

 
double Tlk[168];

 

to jej ostatnim elementem jest Tlk[167], a nie Tlk[168]. Odwołanie się w programie do Tlk[168] jest błędem, którego kompilator zwykle nie zgłosi, zakładając, iż programista wie co robi. Niestety, język C++ nie był tworzony z myślą o amatorach.

 

Inicjalizacja tablic

Często zdarza się, iż chcemy utworzyć tablicę z zadaną z góry zawartością (np. tablica zawierająca początkowe liczby pierwsze).

 

Składnia inicjalizacji tablicy w języku C++ jest następująca:

 

typ_elementów nazwa_tablicy  = {lista_wartości_dla_kolejnych_elementów};

 

Zwróć uwagę, iż nie musimy podawać liczby elementów. Kompilator utworzy tyle elementów, ile podamy dla nich wartości na liście inicjalizacyjnej.  Poniższy przykład tworzy tablicę 10 liczb całkowitych i wypełnia ją kolejnymi liczbami Fibonacciego.

 
...
int fib[] = (0,1,1,2,3,5,8,13,21,33);
...
 

Operacje tablicowe – ćwiczenia w programowaniu

Podstawowe operacje na tablicach (poniższe ćwiczenia zakładają, że tablica T zawiera n  komórek):

Wypełnianie stałą zawartością x i wyświetlenie zawartości tablicy:

for(i = 0; i < n; i++) T[i] = x;

for(i = 0; i < n; i++)
  cout << "T[" << i << "] = " << T[i] << endl;

 

Wypełnienie tablicy kolejnymi liczbami naturalnymi:

for(i = 0; i < n; i++) T[i] = i;

 

Wypełnienie tablicy kolejnymi liczbami parzystymi:

for(i = 0; i < n; i++) T[i] = i << 1;

 

Odczyt zawartości tablicy ze standardowego wejścia:

for(i = 0; i < n; i++) cin >> T[i];

 

Przesunięcie elementów tablicy o 1 pozycję w kierunku końca:

for(i = n - 1; i > 0; i--) T[i] = T[i - 1];
T[0] = 0;

 

Przesunięcie elementów tablicy o 1 pozycję w kierunku początku:

for(i = 0; i < n - 1; i++) T[i] = T[i + 1];
T[n - 1] = 0;

 

Obrót elementów tablicy w kierunku końca (ostatni element staje się pierwszym):

x = T[n - 1];
for(i = n - 1; i > 0; i--) T[i] = T[i - 1];
T[0] = x;

 

Obrót elementów tablicy w kierunku początku (pierwszy element staje się ostatnim):

x = T[0];
for(i = 0; i < n - 1; i++) T[i] = T[i + 1];
T[n - 1] = x;

 

Odwracanie kolejności elementów w tablicy:

for(i = 0; i < (n >> 1); i++)
{
  x = T[i};
  T[i] = T[n - i - 1];
  T[n - i - 1] = x
}

 

Wstawienie nowego elementu na wybranej pozycji:

for(i = n - 1; i > poz; i--) T[i] = T[i - 1];
T[poz] = x;

 

Usunięcie wybranego elementu z tablicy:

for(i = poz; i < n - 1; i++) T[i] = T[i + 1];
T[n - 1] = 0;  

 

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe