C++ #9 – Tablice

Lis 01
2010

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.

#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;
}

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.

#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;
}

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.

#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;
}

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.

#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;
}

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.

#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;
}

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$

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *