Strona główna » Kursy » Kurs C# » Tablica Dwuwymiarowa
 

Tablica Dwuwymiarowa

Wstęp

Wraz z rozwojem komputerów pojawiło się zapotrzebowanie na wygodne zarządzanie tablicami. W języku C# tworzenie oraz zarządzanie tablicami wielowymiarowymi jest intuicyjne i bardzo przydatne. W tym artykule zostanie między innymi przedstawione jak je tworzyć, zmieniać wartości.

Deklaracja

Tablicę dwuwymiarową deklaruje się bardzo podobnie jak w przypadku tablicy jednowymiarowej. Wystarczy zmienić liczbę podaną jako rozmiar na dwie liczby i rozdzielić je przecinkiem. Jest to sygnał dla kompilatora, że jest to deklaracja tablicy dwuwymiarowej o pewnych zadanych rozmiarach. Oto ogólna definicja deklaracji:

  1. typ[,] nazwa = new typ[rozmiar1, rozmiar2];

Oto przykładowa deklaracja tablicy 2D o rozmiarach w×h i przechowujące liczby całkowite.

  1. int[,] tablica = new typ[w, h];

W celu odwołania się do konkretnego elementu należy podać dwie wartości w nawiasach kwadratowych zamiast jednej. Poniższa linijka odwołuje się do tablicy nazwanej tablica i pobiera elementy zapisany na pozycji (x, y).

  1. tablica[x, y]

Oczywiście należy pamiętać, aby nie wyjść poza zakres tablicy, ani dla jednej, ani dla drugiej współrzędnej. Obydwie możliwości spowodują zgłoszenie wyjątku i przerwanie działania programu (chyba, że wyjątek zostanie obsłużony).

Przykład

Napisz program, który zadeklaruje tablicę dwuwymiarową wielkości 5×5, a następnie każdemu elementowi przypisze wartość liczbową, która powstaje poprzez złożenie numeru wiersza oraz kolumny tj. pole (3, 4) ma wartość 34. Na koniec tablica ma zostać wypisana na ekran.

Rozwiązanie

Rozwiązanie zadania należy rozpocząć od zadeklarowania tablicy. Jedną z możliwości jest wpisanie jej wielkości na stałe, ale tutaj zostaną wykorzystane dodatkowe zmienne, aby później można je było wykorzystać do przechodzenia po tablicy.

  1. int w = 5;
  2. int h = 5;
  3. int[,] tablica = new int[w, h];

Wszystkie elementy tablicy mają teraz domyślną wartość 0. Do przejścia po każdym elemencie tablicy najwygodniej jest użyć podwójnej pętli - indeks x będzie przechodził po kolejnych kolumnach, a y - po kolejnych wierszach. Każdemu elementowi zostaje przypisane złożonie cyfr określone w zadaniu.

  1. for (int y = 0; y < h; y++)
  2.   for (int x = 0; x < w; x++)
  3.     tablica[x, y] = x * 10 + y;

Wypisanie tablicy ma już podobny schemat kodu jak zapisywanie danych do tablicy. Należy jednak pamiętać o zachowaniu odstępu pomiędzy elementami, aby zachować czytelność.

  1. for (int y = 0; y < h; y++) {
  2.   for (int x = 0; x < w; x++) {
  3.     Console.Write("{0}\t", tablica[x, y]);
  4.   }
  5.   Console.WriteLine();
  6. }

Napisany kod można teraz uruchomić, aby sprawdzić poprawność jego działania. Oto wynik, który zostanie wypisany:

  1. 0    10   20   30   40
  2. 1    11   21   31   41
  3. 2    12   22   32   42
  4. 3    13   23   33   43
  5. 4    14   24   34   44

Wymiary tablicy

W języku C# istnieje możliwość odczytania wymiarów bezpośrednio z tablicy. Jednak, aby odczytać szerokość lub wysokość tablicy należy użyć specjalnej metody GetLength() i jako argument podać rozmiar, którego wymiaru ma być zwrócony. Wymiary są indeksowane od 0.

  1. tablica.GetLength(n)

W powyższym przykładzie jest pobierany n-ty rozmiar tablicy nazwanej tablica.

Przykład

Poniżej została przedstawiona metoda WypiszTablice(), która wypisuje na ekran przekazaną tablicę jako argument.

  1. static void WypiszTablice(int[,] tablica) {
  2.   for (int y = 0; y < tablica.GetLength(1); y++) {
  3.     for (int x = 0; x < tablica.GetLength(0); x++)
  4.       Console.Write("{0}\t", tablica[x, y]);
  5.     Console.WriteLine();
  6.   }
  7. }

W celu wypisania danych metoda korzysta (2., 3.) ze wspomnianej wcześniej metody GetLength() w celu pobrania rozmiarów tablicy. (4.) Elementy są rozdzielone znakiem tabulacji, a (5.) kolejne wiersze tablicy znajdują się w oddzielnych wierszach.

Zadania

Zadanie 1

Napisz program, który wypełni tablicę w następujący sposób:

  1. 1    2   3   4   5
  2. 2    3   4   5   6
  3. 3    4   5   6   7
  4. 4    5   6   7   8
  5. 5    6   7   8   9

Zadanie 2

Napisz funkcję SumujElementyTablicy(), która zsumuje wszystkie elementy, które znajdują się w tablicy i zwróci tę sumą. Przetestuj działanie napisanej funkcji.

Przykładowo dla tablicy:

  1. 1   2   3
  2. 4   5   6
  3. 7   8   9

funkcja powinna zwrócić:

  1. 45