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

Tablice Wielowymiarowe

Wstęp

Tablice wielowymiarowe mogą mieć dowolną ilość wymiarów. Choć zazwyczaj korzysta się z tablic dwuwymiarowych to możliwe jest korzystanie np. trójwymiarowej. Można je deklarować w postaci tablic regularnych oraz nieregularnych. Oba sposoby różnią się tworzeniem oraz odwołaniem do elementów.

Tablice regularne

Definicja

Metoda tworzenia tablic regularnych to uogólnienie sposobu tworzenia tablic jedno i dwuwymiarowych. W celu utworzenia tablicy n wymiarowej należy podać n rozmiarów:

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

Oczywiście trudno sobie wyobrazić wyższy wymiar od trzeciego, ale można spojrzeć na tablicę jako sposób zapisu danych, gdzie można coś umieścić, a potem odczytać. W celu odczytania danych z tablicy regularnej należy wpisać:

  1. tablica[x1, .. , xn]

Przykład

W poniższym przykładzie zostanie utworzona tablica 5×5, które ma wartość px, y = xy.

  1. static void Main(string[] args) {
  2.   int[,] tablica = new int[5, 5];
  3.   for (int y = 0; y < tablica.GetLength(0); y++)
  4.     for (int x = 0; x < tablica.GetLength(1); x++)
  5.       tablica[y, x] = x * y;
  6.   for (int y = 0; y < tablica.GetLength(0); y++) {
  7.     for (int x = 0; x < tablica.GetLength(1); x++)
  8.       Console.Write("{0}\t", tablica[y, x]);
  9.     Console.WriteLine();
  10.   }
  11.   Console.ReadKey();
  12. }

(2.) Utworzenie tablicy i (4. - 6.) przypisanie wartości. W celu pobrania wielkości tablicy i-tego wymiaru potrzebna jest funkcja GetLength(). Na koniec (8. - 12.) tablica zostaje wypisana.

Tablice nieregularne

Definicja

Tablice nieregularne najprościej opisać jako tablice tablic. W przeciwieństwie do tablic regularnych każda tablica i-tego poziomu nie musi mieć dokładnie tyle samo elementów. Elementy takiej tablicy inicjalizuje się oddzielnie.

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

Podczas deklaracji podaje się jedynie rozmiar pierwsze, podstawowej tablicy. Dopiero później każdy z elementów należy zainicjalizować poprzez utworzenie nowej tablicy i jej przypisanie.

W celu odwołania się do konkretnego elementu należy podać każdą współrzędną w nawiasach kwadratowych. To podkreśla fakt, że jest to tablica tablic, ponieważ po wybraniu i-tego elementu, gdzie i < n otrzymujemy tablicę z której wybieramy kolejny element.

  1. tablica[x1]..[xn]

Przykład

W tabliczce mnożenia jaka została utworzona w poprzednim przykładzie nie ma potrzeby przechowywania zduplikowanych informacji. Z tego powodu zostanie zadeklarowana dwuwymiarowa tablica w kształcie trójkąta.

  1. static void Main(string[] args) {
  2.   int[][] tablica = new int[5][];
  3.   for (int i = 0; i < 5; i++)
  4.     tablica[i] = new int[i + 1];
  5.   for (int y = 0; y < tablica.Length; y++)
  6.     for (int x = 0; x < tablica[y].Length; x++)
  7.       tablica[y][x] = x * y;
  8.   for (int y = 0; y < tablica.Length; y++) {
  9.     for (int x = 0; x < tablica[y].Length; x++)
  10.       Console.Write("{0}\t", tablica[y][x]);
  11.     Console.WriteLine();
  12.   }
  13.   Console.ReadKey();
  14. }

(2.) Utworzenie tablicy, (3. - 4.) ustalenie wymiaru każdej z podtablic oraz (6. - 8.) przypisanie wartości. W celu pobrania wielkości tablicy korzystamy z właściwości Length odpowiedniej podtablicy. Nie można wykorzystać polecenia GetLength(), ponieważ tablica w rzeczywistości jest Na koniec (10. - 14.) tablica zostaje wypisana.

Zadania

Zadanie 1

Zadeklaruj tablicę n×n, a następnie wypełnij pola tak, aby na pozycji (x, y) była większa wartość z a = x2 i b = y2. Wartość n powinna zostać wczytana od użytkownika.

Przykładowo dla n = 3 program powinien wypisać:

  1. 0     1     4
  2. 1     1     4
  3. 4     4     4

Zadanie 2

Napisz, który zadeklaruje tablicę nieregularną. Zadaniem programu jest zapisanie k pierwszych liczb naturalnych wszystkich wielokrotności mniejszych, równych od p. Dane p i k program powinien wczytać od użytkownika.

Przykładowo dla k = 5 oraz p = 10 program powinien wypisać:

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