Strona główna » Kursy » Kurs C# » Tablice
 

Tablice

Opis

Tablica to sposób przechowywania większej ilości danych. Jest ona bardzo przydatna kiedy jest bardzo dużo danych do zapamiętania. Dzięki temu większość operacji na danych wykonuje się zdecydowanie łatwiej i efektywniej.

Definicja

W celu zadeklarowanie tablicy dowolnego typu należy: na początku podać deklarowany typ (jak w przypadku zmiennej). Następnie należy postawić zamknięte nawiasy kwadratowe, nazwę tablicy, znak równa się, słowo kluczowe new, a potem powtórzyć typ zmiennej oraz nawiasy w których należy zapisać ile elementów może tablica pomieścić tak jak to zostało przedstawione poniżej:

  1. typ[] nazwa = new typ[ile];

Powyższy fragment kodu można przeczytać jako: zadeklaruj tablicę typu typ o nazwie nazwa. Należy pamiętać, że w tablicy elementy są indeksowane od zera, więc pierwszy element ma indeks 0, a ostatni długość tablicy pomniejszona o jeden.

Znane elementy

Jeśli deklarowana tablica ma przechowywać z góry określoną liczbę elementów to można zastosować skrócony zapis deklaracji:

  1. typ[] nazwa = {el1, el2, el3, .., eln}

Powyższy zapis symbolizuje, że deklarowana jest tablica o nazwie nazwa o typie typ, która będzie miała n elementów: el1, el2, .., eln - jest to symboliczny zapis konkretnej wartości, którą należałoby tu wstawić.

Odczytanie i Przypisanie

W celu przypisania wartości pod konkretnym indeksem to należy odwołać się do tablicy poprzez jej nazwę, a następnie w nawiasach kwadratowych podać indeks do elementu, który ma zostać zmieniony. W celu odczytania wartości zapis odwołania jest identyczny.

  1. tablica[0] = 5;

Powyższa komenda przypisuje elementowi o indeksie 0 w tablicy tablica wartość 5.

Przykład

Przedstawiony poniżej program deklaruje, modyfikuje i wyświetla elementy tablicy:

  1. int[] tablica = new int[10];
  2. for (int i = 0; i < tablica.Length; i++)
  3.   tablica[i] = i + 1;
  4. for (int i = 0; i < tablica.Length; i++)
  5.   Console.Write("{0} ", tablica[i]);
  6. Console.ReadKey();

(1.) Na początku deklarowana jest tablica o nazwie tablica przechowująca dziesięc zmiennych typu int. Następnie (2. - 3.) każdemu elementowi tablicy jest przypisywana kolejna liczba naturalna: 1, 2, 3, .., 10. Ostatni etap działania programu (4. - 5.) polega na wyświetleniu tablicy.

W celu przeprowadzenia iteracji po każdym elemencie tablicy z tablicy została odczytana jej długość poprzez właściwość tablica.Length. Jak można zauważyć w powyższym przykładzie do sprawnego operowania na tablicach znajomość pętli jest bardzo ważna.

Klasa Array

Tablica ma bardzo dużo właściwości oraz metod, które można na niej wykonać. Ich uzupełnieniem jest klasa Array, która pozwala na wykonanie różnych operacji. Poniżej zostały przedstawione niektóre z nich. Na początku zadeklarujmy następującą tablice:

  1. int[] tab = { 5, 4, 1, 6, 3 };

Sortowanie

Do posortowania danych w dowolnej tablicy służy metoda Sort w klasie Array. Jej najprostsze użycie polega na podaniu jako argument odwołanie do tablicy ( jej nazwe ). Oto przykładowe wywołanie:

  1. Array.Sort(tab);

Wtedy po wypisaniu otrzymamy następujący wynik:

  1. 1 3 4 5 6

Resetowanie elementów

Tablica służy nie tylko do przechowywania liczb, ale również słów oraz innych, własnych obiektów. W trakcie działania programu może zaistnieć potrzeba, aby część takiej tablicy (albo całość) "wyzerować". W przypadku liczb oznacza to wpisania na konkretne pozycję zer, a w przypadku słów zamiany na słowa puste. Klasa Array umożliwia to poprzez metodę Clear(). W metodzie należy podać kolejno: tablicę, od którego elementu rozpocząć zerowanie oraz ile kolejnych elementów ma zostać wyzerowanych.

  1. Array.Clear(tab, 0, 2);

Wtedy modyfikując posortowaną tablicę L:={1, 3, 4, 5, 6} otrzymamy:

  1. 0 0 4 5 6

Wyszukiwanie elementów

Wczytana tablica może przechowywać wiele różnych wartości, a działanie programu może zależeć od tego czy dana wartość występuje w tablicy. W celu wyszukania gdzie znajduje się dany element w tablicy można skorzystać z metody IndexOf(). Metoda ta zawarta w klasie Array wymaga podania dwóch argumentów: odwołania do tablicy oraz element, który ma zostać znaleziony.

Posiadamy tablice L:={0, 0, 4, 5, 6}. Chcemy w niej wyszukać wszystkie liczby całkowite z przedziału [0, 6] i wypisać, o ile taki element istnieje, gdzie on się znajduje. Oto przykładowy kod:

  1. for (int i = 0; i <= 6; i++) {
  2.   int poz = Array.IndexOf(tab, i);
  3.   if(poz < 0) {
  4.     Console.WriteLine("Element {0} nie występuje", i);
  5.   } else {
  6.     Console.WriteLine("Element {0} występuje na pozycji {1}", i, poz);
  7.   }
  8. }

(1.) Dla każdej liczby z zakresu: (2.) wywoływana jest metoda, która zwraca numer pozycji liczby na tablicy. Następnie (3. - 7.) na podstawie wyniku wyświetlany jest odpowiedni komunikat.

  1. Element 0 występuje na pozycji 0
  2. Element 1 nie występuje
  3. Element 2 nie występuje
  4. Element 3 nie występuje
  5. Element 4 występuje na pozycji 2
  6. Element 5 występuje na pozycji 3
  7. Element 6 występuje na pozycji 4

Warto tutaj zauważyć, że metoda IndexOf() zwróci pozycje pierwszego wystąpienia danego elementu w tablicy.

Zadania

Zadanie 1

Napisz program, który wyczyta od użytkownika liczbę n, a następnie wczyta n liczb całkowitych od użytkownika. Zakładamy, że wprowadzona wartość n jest większa od 0.

a)

Program powinien wypisać wprowadzone dane w kolejności rosnącej, które zostały zapisane w tablicy.

Przykładowo dla tablicy o n = 5 elementach, którymi są {5, 1, 4, 2, 3} program powinien wypisać:

  1. 1, 2, 3, 4, 5

b)

Program powinien wypisać wprowadzone dane w kolejności malejącej, które zostały zapisane w tablicy.

Przykładowo dla tablicy o n = 5 elementach, którymi są {5, 1, 4, 2, 3} program powinien wypisać:

  1. 5, 4, 3, 2, 1

c)

Program powinien wypisać w pierwszej linijce liczby nieparzyste, a w drugiej parzyste na podstawie danych zgromadzonych w tablicy:

Przykładowo dla tablicy o n = 5 elementach, którymi są {5, 1, 4, 2, 3} program powinien wypisać:

  1. 5 1 3
  2. 4 2