TABLICE


CO trzeba umieć:




//////////////////////////////////////////////////////////////////


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.

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)

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] !!!
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 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.

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 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];



3 komentarze:

  1. "Zapisanie elementów do tablicy:

    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

    OdpowiedzUsuń
    Odpowiedzi
    1. nie tablica będzie zapisywana cała

      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 :)

      Usuń
    2. jeśli :
      'for(i=0;i dzieki

      Usuń