Nauczyliśmy się, że do przechowywania danych w programie służą zmienne, ale nie tylko one mogą pełnić rolę „kontenerów”. Tablice także służą do zapisywania informacji w pamięci komputera. Charakteryzują się one nawiasami kwadratowymi, które występują po ich identyfikatorze. Odpowiadają one za indeks, czyli miejsce do, którego chcemy się odwołać.
Tablice
Przed deklaracją tablicy do pamięci zarówno jak przy zmiennych i funkcjach należy podać typ zmiennej.
char – typ przechowujący jeden znak
int – typ przechowujący liczbę rzeczywistą
string – typ przechowujący ciągi znaków
typ_tablicy nazwa_tablicy[] = „wartość tablicy”
Zadeklarujmy tablice typu char o wartości „Jestem Hardkorem :-)”, a następnie wyświetlmy wszystkie znaki przy pomocy pętli for.
[codesyntax lang=”cpp”]
#include <iostream> using namespace std; int main() { char tablica[] = "Jestem Hardkorem :-)"; for(int i=0; i <= sizeof(tablica)-2; ++i) { cout<<i<<" => "<<tablica[i]<<endl; } return 0; }
[/codesyntax]
komeniusz@cyber-jadro:~/Pulpit$ g++ pierwszy.cpp -o program
komeniusz@cyber-jadro:~/Pulpit$ ./program
0 => J
1 => e
2 => s
3 => t
4 => e
5 => m
6 =>
7 => H
8 => a
9 => r
10 => d
11 => k
12 => o
13 => r
14 => e
15 => m
16 =>
17 => :
18 => –
19 => )
komeniusz@cyber-jadro:~/Pulpit$
Jak widać program podzieli nam zdanie na litery i zapisze każdą z nich (wraz z spacjami) w innym indeksie. Warto zauważyć, iż indeksowanie rozpoczyna się zawsze od zera. Aby odwołać się przykładowo do dużej litery H (siódmego indeksu) należy użyć indeksu 7.
cout<<tablica[7]<<endl;
Stwórzmy 4-elementową tablice liczbową. Indeksowania dokonajmy osobno dla każdej wartości.
[codesyntax lang=”cpp”]
#include <iostream> using namespace std; int main() { int tablica[4]; tablica[0] = 15; tablica[1] = 64; tablica[2] = 100; tablica[3] = 5; cout<<"0 => "<<tablica[0]<<endl; cout<<"1 => "<<tablica[1]<<endl; cout<<"2 => "<<tablica[2]<<endl; cout<<"3 => "<<tablica[3]<<endl; return 0; }
[/codesyntax]
komeniusz@cyber-jadro:~/Pulpit$ g++ pierwszy.cpp -o program
komeniusz@cyber-jadro:~/Pulpit$ ./program
0 => 15
1 => 64
2 => 100
3 => 5
komeniusz@cyber-jadro:~/Pulpit$
To co teraz przedstawiliśmy to tablice statyczne, jednowymiarowe (mają jeden nawias kwadratowy). Stwórzmy tablicę wielowymiarową składającą się z dwóch indeksów na przykładzie tabliczki mnożenia 5×5 z obsługą błędów.
[codesyntax lang=”cpp”]
#include <iostream> using namespace std; int main() { //deklracja zmiennych przechowujących wartość indeksów int pierwsza; int druga; //deklaracja 6-cio elementowej tablicy. Od indeksu 0 do 5. int tabliczka[6][6]; tabliczka[0][0] = 0; tabliczka[0][1] = 0; tabliczka[0][2] = 0; tabliczka[0][3] = 0; tabliczka[0][4] = 0; tabliczka[0][5] = 0; tabliczka[1][0] = 0; tabliczka[1][1] = 1; tabliczka[1][2] = 2; tabliczka[1][3] = 3; tabliczka[1][4] = 4; tabliczka[1][5] = 5; tabliczka[2][0] = 0; tabliczka[2][1] = 2; tabliczka[2][2] = 4; tabliczka[2][3] = 6; tabliczka[2][4] = 8; tabliczka[2][5] = 10; tabliczka[3][0] = 0; tabliczka[3][1] = 1; tabliczka[3][2] = 6; tabliczka[3][3] = 9; tabliczka[3][4] = 12; tabliczka[3][5] = 15; tabliczka[4][0] = 0; tabliczka[4][1] = 4; tabliczka[4][2] = 8; tabliczka[4][3] = 14; tabliczka[4][4] = 16; tabliczka[4][5] = 20; tabliczka[5][0] = 0; tabliczka[5][1] = 5; tabliczka[5][2] = 10; tabliczka[5][3] = 15; tabliczka[5][4] = 20; tabliczka[5][5] = 25; //pobieramy dane cout<<"Podaj pierwszą liczbę: "; cin>>pierwsza; if(pierwsza > 5 || pierwsza < 0) { //jeśli wprowadzone dane są za duże, bądź za małe kończymy działanie programu cout<<"Podana wartość jest nieprawidłowa"<<endl; return 0; } //pobieramy dane cout<<"Podaj drugą liczbę: "; cin>>druga; if(druga > 5 || druga < 0) { //jeśli wprowadzone dane są za duże, bądź za małe kończymy działanie programu cout<<"Podana wartość jest nieprawidłowa"<<endl; return 0; } //wyświetlamy wynik cout<<tabliczka[pierwsza][druga]<<endl; return 0; }
[/codesyntax]
Myślę, że program jest dosyć zrozumiały i nie wymaga głębszego omówienia.
Innym rodzajem tablicy jest tablica dynamiczna, której wartości przypisujemy w trakcie działania naszego programu. Zademonstrujmy to na przykładzie, modyfikując pierwszy kod dotyczący tablicy tak, aby to użytkownik wprowadzał wartość do wyświetlenia indeks po indeksie.
[codesyntax lang=”cpp”]
#include <iostream> using namespace std; int main() { string tablica; cout<<"Wpisz słowo: "; cin>>tablica; for(int i=0; i <= tablica.length()-1; ++i) { cout<<i<<" => "<<tablica[i]<<endl; } return 0; }
[/codesyntax]
komeniusz@cyber-jadro:~/Pulpit$ g++ pierwszy.cpp -o program
komeniusz@cyber-jadro:~/Pulpit$ ./program
Wpisz słowo: jestem hardkorem
0 => j
1 => e
2 => s
3 => t
4 => e
5 => m
komeniusz@cyber-jadro:~/Pulpit$
Wszystko byłoby w najlepszym porządku, gdyby nie fakt, iż program ucina nam wszystko, co znajduje się po znaku spacji. Ale i na to jest rada. Mianowicie funkcja getline(cin,zmienna) – użyta zamiast zwykłego cin wczyta wprowadzony tekst przez użytkownika wraz z znakami spacji.
[codesyntax lang=”cpp”]
#include <iostream> using namespace std; int main() { string tablica; cout<<"Wpisz słowo: "; getline(cin,tablica); for(int i=0; i <= tablica.length()-1; ++i) { cout<<i<<" => "<<tablica[i]<<endl; } return 0; }
[/codesyntax]
komeniusz@cyber-jadro:~/Pulpit$ g++ pierwszy.cpp -o program
komeniusz@cyber-jadro:~/Pulpit$ ./program
Wpisz słowo: jestem hardkorem
0 => j
1 => e
2 => s
3 => t
4 => e
5 => m
6 =>
7 => h
8 => a
9 => r
10 => d
11 => k
12 => o
13 => r
14 => e
15 => m
komeniusz@cyber-jadro:~/Pulpit$