Każdą tabliće dwuwymiarową o znanych wymiarach można zapisać jako tablice jednowymiarową. Języki programowanie zwykle pozwalają na tworzenie dwuwymiarowych tablic, ale mogą być one przechowywane we wspomniany sposób. W tym artykule zostanie przedstawiony jak konwertować tablicę 2D na 1D.
W celu odwołania się do konkretnego obiektu w tablicy dwuwymiarowej o wymiarach w×h należy użyć pary współrzędnych (x, y). Zakładając, że indeksujemy pola od 0 oto przykładowa tablica w której zapisano w każdym polu współrzędne odwołania.
(0, 0) | (1, 0) | (2, 0) | .. | (w - 1, 0) |
(0, 1) | (1, 1) | (2, 1) | .. | (w - 1, 1) |
(0, 2) | (1, 2) | (2, 2) | .. | (w - 1, 2) |
.. | .. | .. | .. | .. |
(0, h - 1) | (1, h - 1) | (2, h - 1) | .. | (w - 1, h - 1) |
Chcąc przekształcić powyższą w tablicę należałoby przypisać każdemu polu jego pozycję (tj. unikalny numer) w taki sposób, aby można się było do niego odwołać. Najprostszy sposób polega na zapisaniu wiersza jeden za drugim czyli na koniec wiersza dopisujemy wiersz kolejny, a następnie nadajemy polom kolejne pozycje. Przyporządkowanie wyglądałoby następująco:
Współrzędne | (0, 0) | (1, 0) | .. | (w - 1, 0) | (0, 1) | .. | (w - 1, 1) | .. | (0, h - 1) | (1, h - 1) | (2, h - 1) | .. | (w - 1, h - 1) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Pozycja | 0 | 1 | .. | (w - 1, 0) | (0, 1) | .. | (w - 1, 1) | .. | (0, h - 1) | (1, h - 1) | (2, h - 1) | .. | (w - 1, h - 1) |
Do elementów tak zapisanej tablicy wciąż jest możliwe odwołanie jak do tablicy dwuwymiarowej, ale należy dla pary (x, y) wyliczyć pozycję p. Jak można zauważyć i-ty wiersz ma swój pierwszy element na pozycji i·w w tablicy 1D. W celu odwołania się do kolejnego elementu w tym wierszu należałoby dodać do pozycji pierwszego elementu wiersza dodać numer elementu w wierszu. W zapisie współrzędnych odpowiada to współrzędnej x.
Ostatecznie można wyprowadzić można wyprowadzić wzór na pozycję elementu (x, y): p = y·w + x. Oczywiście należy pamiętać, że indeksujemy od 0 oraz, że para (x, y) musi istnieć w tablicy. Inaczej można pobrać niewłaściwy element, albo spróować pobrać element spoza tablicy.
Funkcja ustawXY() służy do ustawiania elementu (x, y) w pewnej tablicy 1D, która jest przekazywana jako argument tab1D. Oczywiście potrzebna jest także szerokość tablicy w, aby wyliczyć odpowiednią pozycję.
Analogicznie działa funkcja pobierzXY(), która wymaga podania tych samych argumentów.
Napisawszy funkcje pomocnicze można przejść teraz do napisania funkcji konwertującej tablicę 2D na 1D. Taka funkcja wymaga podania trzech argumentów tab2D - tablica dwuwymiarowa do skonwertowania, oraz jej wymiary w - szerokość i h - wysokość.
Poniższa funkcja main() deklaruje nową tablicę 2D, a następnie wypełnia ją wartościami. Każde z pól otrzymuje wartość pozycji na której będzie zapisane w tablicy 1D. Tablica 2D jest wypisana, a następnie skonwertowana i ponownie wypisana.
Napisz program, który pozwoli skonwertować tablicę 1D na 2D na podstawie długości tablicy 1D n i rozmiarów tablicy 2D w×h. Przetestuj działanie programu w podobny sposób jak została sprawdzona Implementacja.