Tablica (tablica statyczna) jest to łatwa do obsługi struktura danych. Tablica w pamięci komputera zajmuje jeden jednolity blok i nie można go podzielić, co wiąże się z tym, że jak nie ma wystarczająco dużego pola wolnej pamięci, tablica albo się nie stworzy, albo nadpisze jakieś dane (nie pamiętam, ale nie jest to bardzo ważne, na pewno będzie jakiś błąd). Tak poza tym elementy tablicy możemy traktować jak zwykłe zmienne.
Adres
pola
|
...0
|
...4
|
...8
|
...12
|
...16
|
...20
|
...24
|
...28
|
...32
|
...36
|
|
…
|
10
|
12
|
34
|
32
|
5
|
36
|
17
|
86
|
93
|
54
|
…
|
Tablica
zawiera zmienne typu int. Kompilator sam przydziela adres
(różny przy każdym włączeniu programu).
1.Jedno
wymiarowe
Deklaracja:
typ_danych nazwa_tablicy [rozmiar];
typ_danych
– jest to typ zmiennych przechowywanych w tablicy, np. int,
float, struct list.
nazwa_tablicy
– jest to dowolna nazwa naszej tablicy.
rozmiar
– jest to rozmiar naszej tablicy, czyli ile elementów
w niej może się znajdować maksymalnie.
w niej może się znajdować maksymalnie.
np.:
int
tab[100];
float
t[5];
unsigned
char tablicaZnakow[255];
Gdy
tablicę mamy już zadeklarowaną w znajdują się w niej różne
losowe wartość, więc często warto ją sobie od razu zainicjować.
np.:
int
t[10]={0} // tablica zawiera same 0
int
tab[5]={1,2,3,4,5} // tablica zawiera liczby od 1 do 5
int
t[]={1,2,3,4} // jak nie podamy rozmiaru to kompilator sam go
// ustali (w tym przypadku jest to 4)
// ustali (w tym przypadku jest to 4)
Odwołanie
do elementu tablicy następuje poprzez indeks tego elementu (
t[indeks] ). Tu trzeba zwrócić uwagę na to, że przy deklaracji
tej tablicy to co było w nawiasach [] było rozmiarem tej tablicy,
dalej jest to zawsze indeks elementu, czyli:
printf(„%d”,
tab[3]) // (dla tablicy powyżej) wypisze na ekran 4
ELEMENTY
TABLCY LICZMY OD 0
!!!
CZYLI NIE MA ELEMENTU tab[n] !!!
CZYLI NIE MA ELEMENTU tab[n] !!!
ZAPAMIĘTAĆ,
WYPALIĆ NA CZOLE I NOSIĆ LUSTERKO !!!
Działania
na tablicy:
Do
„chodzenia” po tablicy najczęściej używamy pętli for,
gdyż zazwyczaj wiemy ile razy trzeba pętle wykonać, bo znamy
rozmiar tablicy, ale jeśli użyjemy while też będziemy
mogli sobie poradzić, ale trzeba sobie zadać pytanie, czy chcemy
być tandetni :D ?
Zmienne
które będę używał w każdym z algorytmów:
int n; // licznik naszych elementów
int n; // licznik naszych elementów
int
t[100]; // tablica o rozmiarze 100 elementów,( dałem 100, bo o dynamicznych tablicach będzie później)
int
i=0; // licznik pętli
Zapisanie
n elementów do tablicy:
for(i=0;i<n;i++)scanf(„%d”,
&t[i]);
Wypisanie
n-elementowej tablicy:
for(i=0;i<n;i++)scanf(„%d
”, t[i]);
Zamiana
elementów tablicy (przekręcenie):
int
temp;
for(i=0;i<(n/2);i++){
temp=t[i];
t[i]=t[n-1-i];
t[n-1-i]=t[i];
}
Znalezienie
maksymalnego elementu tablicy:
int
max=t[0];
for(i=1;i<n;i++)
if(max<t[i])
max=t[i];
Czy
umiesz znaleźć
najmniejszy ?
2.Dwuwymiarowe
Tablice
dwuwymiarowe, czyli tak zwane macierze, możemy sobie wyobrazić, że
są to po prostu takie tabelki z dwoma wymiarami (wysokość,
szerokość). Choć trzeba pamiętać, że w pamięci komputera nadal
jest to zapisywane jako jeden spójny blok. Komputer zapisuje naszą
tabelkę
w jednym długim wierszu, ale wiersz po wierszu, tak wiem, że nie wiele z tego rozumiesz, ale chodzi o to, że nie ma kolumn, one są tylko po to, aby ułatwić nam działanie, a w pamięci jest jeden długi wiersz.
w jednym długim wierszu, ale wiersz po wierszu, tak wiem, że nie wiele z tego rozumiesz, ale chodzi o to, że nie ma kolumn, one są tylko po to, aby ułatwić nam działanie, a w pamięci jest jeden długi wiersz.
Deklaracja:
typ_danych
nazwa_tablicy [wysokość][szerokość];
np.:
int
tab[10][5];
double
t[4][4];
int
t[2][2]{
{1,3},
{2,5}
};
Do
elementu tablicy odwołujemy się poprzez podanie jego współrzędnych.
printf(„%d
”,t[0][1]); // (dla tablicy wyżej) na ekran zostanie wypisane 3
Trochę
kodu:
Zmienne,
które będę używał w każdym z algorytmów:
int n; // szerokość tablicy
int n; // szerokość tablicy
int
m; // wysokość tablicy
int
t[100][100]; // tablica o rozmiarze 100 na 100
int
i=0,j=0;
// liczniki
pętli
Zapisanie
elementów do tablicy:
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf(„%d”,
&t[i][j]);
Wypisanie
całej tablicy:
for(i=0;i<m;i++)
for(j=0;j<n;j++)
printf(„%d”,
t[i][j]);
Znalezienie
najmniejszego elementu tablicy:
int
min=t[0][0];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(min>t[i][j])
min=t[i][j];
"Zapisanie elementów do tablicy:
OdpowiedzUsuńfor(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf(„%d”, &t[i][j]); "
czy przypadkiem nie bedzie zapisywac tylko do wartosci [0][0] , [1][1], [2][2] itd a do np [0][1] juz nie zapisze? czy mi sie wydaje? jestem poczatkujacy
nie tablica będzie zapisywana cała
Usuńfor(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf(„%d”, &t[i][j]);
zapis równoznaczny może lepiej będzie Ci zrozumieć
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf(„%d”, &t[i][j]);
}
}
A teraz spróbuj sobie to rozpisać najlepiej na kartce i zobaczysz.
Na początku i=0 j=0 i zapisujemy do t[0][0] następnie j jest zwiększone o jeden (j++) czyli zapisujemy do t[0][1] potem ponownie zwiększamy j o 1 i zapisujemy do t[0][2] będziemy tak zwiększać aż nasze j zrówna się z n czyli zapiszemy element w tablicy o współrzędnych t[0][n-1] następnie dopiero teraz zwiększymy i o 1 (i++). Zapisujemy teraz element pod t[1][0] ponieważ j ponownie ustalamy na 0 (druga pętla) i powtarzamy całość ponownie. Następnie znowu zwiększamy i o 1 i całość powtarzamy. robimy tak aż naszym ostatnim elementem będzie ten zapisany pod t[m-1][n-1] i kończymy całość
Mam nadzieję że teraz już jest wszystko jasne :)
jeśli :
Usuń'for(i=0;i dzieki