Tablice
Czym jest tablica?
Jeśli wiesz już czym jest zmienna, zrozumienie pojęcia tablica (ang. array) nie powinno sprawić Ci problemów. Tablica jest po prostu zbiorem określonych zmiennych w określonej ilości ułożonych (w większości implementacjach) obok siebie. Takie zmienne określa jedna wspólna nazwa po której zapisujemy indeks elementu. Tablica może być statyczna -- której rozmiar jest stały i wiadomy już podczas kompilacji (pamięć jest alokowana w obrazie aplikacji lub przy starcie programu na podstawie segmentu .data), i dynamiczna -- której pamięć (jak i rozmiar) jest alokowany podczas pracy programu.
Tablica statyczna
Tablice statyczne w C/C++ deklarujemy w następujący sposób:
pamiętając, że wartość w nawiasach kwadratowych musi być wartością stałą (którą kompilator zna już podczas kompilacji).
Tablica dynamiczna
Jednowymiarowa
W językach C i C++ operacje na wskaźnikach można dokonywać podobnie jak operacje na tablicach. Dlatego przy deklarowaniu tablicy dynamicznej postępujemy następująco:
należy zwrócić uwagę na to, iż zamiast stałej wartości (w tym wypadku 5) możemy podać zmienną (stąd tablica dynamiczna).
Zawsze należy pamiętać o zwolnieniu przydzielonej pamięci kiedy nie jest już nam potrzebna
delete [] tablica;
tablica = 0;
tablica = 0;
Dwuwymiarowa
Tak wygląda tworzenie tablicy 100x50 i korzystanie z niej;
int **tab2 = new int *[100];
for ( int i = 0; i < 100; ++i )
tab2[i] = new int [50];
tab2[64][32] = 16;
std::cout << tab2[64][32] << std::endl; // wypisze 16;
for ( int i = 0; i < 100; ++i )
tab2[i] = new int [50];
tab2[64][32] = 16;
std::cout << tab2[64][32] << std::endl; // wypisze 16;
Po zakończeniu usuwamy ją z pamięci
Zastosowanie
Tablice w c++ są bardzo przydatne, dlaczego? Wyobraź sobie, że chcesz napisać program do obliczania średniej. Załóżmy iż będzie on obliczał średnią z 15 ocen, kod więc wyglądał by mniej więcej tak:
#include <iostream>
using namespace std;
int main()
{
int ocena1, ocena2, (...) ocena15;
cout <<"Podaj oceny\n";
cin >>ocena1>>ocena2 (...) >>ocena15;
cin.ignore();
int srednia;
srednia = (ocena1 + ocena2 (...) +ocena15) / 15;
cout <<"Srednia wynosi: "<<srednia;
return 0;
}
using namespace std;
int main()
{
int ocena1, ocena2, (...) ocena15;
cout <<"Podaj oceny\n";
cin >>ocena1>>ocena2 (...) >>ocena15;
cin.ignore();
int srednia;
srednia = (ocena1 + ocena2 (...) +ocena15) / 15;
cout <<"Srednia wynosi: "<<srednia;
return 0;
}
Kod powyżej oprócz tego, że jest nie wygodny i nieprzyjemny, może doprowadzić do szału jeśli np trzeba by policzyć średnią 1000 elementów. Dlatego wymyślono tablice.
Schematyczna dekalaracja tablicy
typ_zmiennej nazwa_tablicy[liczba_elementów_tablicy]
czyli na przykład
int tablica[100] //deklaracja tablicy stu elementowej liczb całkowitych
char tablica_2[20] //20 elementowa tablica znaków
char tablica_2[20] //20 elementowa tablica znaków
gdy deklarujemy tablice musimy pamiętać, że jej romiar musi być znany w czsie deklaracji, czyli można zrobić na przykład tak:
cout <<"Podaj liczbe: ";
int jakas_liczba;
cin >>jakas_liczba;
cin.ignore();
int jakas_tablica[jakas_liczba];
int jakas_liczba;
cin >>jakas_liczba;
cin.ignore();
int jakas_tablica[jakas_liczba];
stworzona zostanie w ten sposób tablica o rozmiarze przez nas podanym ;)
podandto należy pamiętać, iż tablice są zawsze indeksowane od zera, co to znaczy? otóż jeśli mamy tablice 10 elementową to odwołuje my się do jej poszczególnych elementów w licząc od zera, czyli mamy tab[0], tab[1], (...) tab[9];
Znając już teraz tablice możemy usprawnić działanie naszego programu ;)
#include <iostream>
using namespace std;
int main()
{
int rozmiar;
cout <<"podaj ilosc liczb: ";
cin >>rozmiar;
cin.ignore();
int tablica[rozmiar];
int suma = 0;
for (unsigned int i = 0; i < rozmiar; ++i) //pobieranie liczb...
{
cout <<"Podaj liczbe nr "<<(i+1)<<" : ";
cin >>tablica[i];
cin.ignore();
suma += tablica[i]; //sumowanie elementów...
}
cout <<"\nsrednia wynosi: "<<(suma / rozmiar)<<endl;
getchar();
return 0;
}
using namespace std;
int main()
{
int rozmiar;
cout <<"podaj ilosc liczb: ";
cin >>rozmiar;
cin.ignore();
int tablica[rozmiar];
int suma = 0;
for (unsigned int i = 0; i < rozmiar; ++i) //pobieranie liczb...
{
cout <<"Podaj liczbe nr "<<(i+1)<<" : ";
cin >>tablica[i];
cin.ignore();
suma += tablica[i]; //sumowanie elementów...
}
cout <<"\nsrednia wynosi: "<<(suma / rozmiar)<<endl;
getchar();
return 0;
}
Zobacz też:



http://programmuj.blogspot.com/2009/09/dynamiczna-tablica-w-c.html
int tablica[rozmiar];
błędy w tej linii występujące :
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'tablica' : unknown size
i jedno ostrzeżenie w linii:
for (unsigned int i = 0; i < rozmiar; ++i) //pobieranie liczb...
warning C4018: '<' : signed/unsigned mismatch
z góry dziękuje za odpowiedź
int tablica[rozmiar];
Przecież to jest deklaracja niezgodna ze standardami.
A gwiazdki są ważne bo to jest deklaracja wskaźnika. dwie gwiazdki to "Wskaźnik do wskaźnika" Poczytaj sobie chociażby nawet Grębosza.
Odpowiedz na moje pytania mile widziana