Tablice c++.doc

(35 KB) Pobierz

Tablice

Ten artykuł ma na celu przybliżenie pojęcia tablic w języku C++, ukazanie ich przydatności oraz różnorakich zastosowań. Jest to artykuł, który mam nadzieję pomoże osobom które chcą zgłebiać wiedzę o języku C++.

Tablice to de facto grupa zmiennych. Jeśli mamy grupę obiektów, możemy utworzyć z nich tablicę. Dzięki temu nie będziemy musieli nazywać każdemu elementu osobno, zamiast tego będziemy się odnosili do wybranego elementu tablicy. Tablicę oczywiście tak samo jak zmienne przed jej użyciem musimy zadeklarować.

int tab[100];


Oczywiście to co znajduje się w nawiasie kwadratowym, jest rozmiarem tablicy.
Musimy pamiętać, że nie można zrobić niczego w tym stylu:

int tab[n],n; cin>>n;


Ponieważ kompilator w chwili uruchomienia musi znać wielkość tablicy (ilość jej elementów), aby móc zarezerwować dla niej miejsce w pamięci. Aby tworzyć tablice których rozmiar jest zmienny musimy użyć tablic dynamicznych.
W tablicy możemy umieścić, różne typy danych, int, char itd.
Bardzo ważne jest zapamiętanie, że numeracja elementów tablicy nie zaczyna się od 1 lecz od zera.
tab[0],tab[1],tab[2], i tak dalej aż do rozmiaru podanego w nawiasie - 1.
Dzięki pętli for możemy bez problemu wpisać wartości do komórek tablicy, jak i wypisać.

for(int i=0;i<100;i++) cin>>tab [i];


Teraz bardzo ważna rzecz. Należy pamiętać, że numeracja elementów zaczyna się od zera więc w tablicy tab[100], ostatni element nie ma numeru setnego lecz 99.
Jeśli chcemy, możemy oczywiście zapisać w ten sposób:

for(int i=0;i<=99;i++) cin>>tab [i];


Wpisywać wartości do tablicy możemy w każdym momencie. Oczywiście trzeba pamiętać, iż może to spowodować nadpisanie danych (utratę poprzednich w danej komórce). Możemy oczywiście przy tworzeniu tablicy :

int tab[8]={2,5,7,8,9,1,1,2};

Można również robić coś takiego:

int tab[]={2,5,7,8,9,1,1,2};

Jeśli zaś zrobimy coś takiego:

int tab[8]={2,5,7,8,9};

To kompilator uzna, że pozostałe trzy wartości mają zostać wyzerowane.

Tablice znakowe

Do tablic możemy wpisywać również ciągi znaków czyli stringi. Gdy string zostanie wpisany do tablicy, to ostatnim znakiem jest NULL.
Znaki możemy wpisywać podobnie jak liczby całkowite do tablicy, za pomocą funkcji cin, jeśli znaki są od siebie oddzielone. Scanf("%s",tab) jest bardzo przydatne, ponieważ wpisuje nam string (bez potrzeby użycia pętli) aż do białego znaku. String możemy spisywać również znak po znaku:

tab[0]="s"; tab[1]="t"; tab[2]="r"; tab[3]="i"; tab[4]="n"; tab[5]="g";

Opanowanie operacji wejścia-wyjścia jak najbardziej mile widziane. Im lepiej je umiesz, tym łatwiej Ci będzie operować stringami w tablicach.

Tablice wielowymiarowe


Tablice, których elementami są inne tablice nazywamy tablicami wielowymiarowymi. Przykład:

int tab[4][2];

Elementy tablicy wyglądają tak:
tab[0][0] tab[0][1] tab[1][0] tab[1][1]
tab[2][0] tab[2][1] tab[3][0] tab[3][1]
I w takiej kolejności są wpisywane wartości to tablicy wielowymiarowej. Oczywiście nie ma żadnych przeszkód w tym ,aby tworzyć które mają więcej wymiarów.

Przesyłanie tablic do funkcji


Pierwsza i najważniejsza sprawa. Tytuł jest pewnie mylący, ponieważ właściwie powinien brzmieć - "Przekazywanie adresu początku tablicy do funkcji". Tablice nie są przekazywanie do funkcji w całości, bo w przypadku, gdy na przykład tablica ma elementów [100] [100] to musielibyśmy przesłać 100*100 liczb (a każda liczba w zależności od typu zajmuje więcej lub mniej miejsca w pamięci). Adres początku tablicy to jednocześnie nazwa tablicy, i to jest bardzo ważna rzecz do zapamiętania.
Tablicę do funkcji przesyłamy tak samo jak jakąkolwiek inną zmienną.

funkcja(tab);

Funkcja musi znać typ elementów tablicy (int, char...) , oraz liczbę kolumn ( a więc w przypadku tablicy [100] [100] podajemy tylko druga wartość. Oczywiście możemy wpisać również pierwszą, ale funkcja i tak z niej nie skorzysta.) Deklaracja więc wygląda tak:

void funkcja(int t[][100]);


Idąc dalej, taka deklaracja jest również poprawna:

void funkcja(int t[]);


W przypadku, gdy tablica jest jednowymiarowa.
Za ewentualne błędy przepraszam.

Źródła:
-J.Liberty - "C++ dla każdego"
-J.Grebosz - "Symfonia C++"

...
Zgłoś jeśli naruszono regulamin