Pętle zagnieżdżone i dwuwymiarowe tablice
Transkrypt
Pętle zagnieżdżone i dwuwymiarowe tablice
Dr Mirek Łątka Programowanie w C Wiosna 2011 Pętle zagnieżdżone i dwuwymiarowe tablice Pętla jest naturalnym narzędziem do przetwarzania tablic. Teraz zademonstrujemy jak pętla for zagnieżdżona w innej pętli for pozwala przetwarzać zawartość tablic dwuwymiarowych. Zastanówmy się czym właściwie jest tablica dwuwymiarowa. Używane przez nas dotąd tablice były jednowymiarowe, całą tablicę można było interpretować (pokazać) jako jeden wiersz danych. Tablice dwuwymiarowe można pokazać jako tabelki mające dane w wierszach i kolumnach. W języku C++ takie dwuwymiarowe tablice tworzy się jako zwykłe tablice, których każdym elementem jest kolejna tablica. Na przykład deklaracja: int maxtemps [4] [5]; oznacza, że maxtemps jest tablicą czteroelementową, a każdy z tych elementów jest pięcioelementową tablicą licz całkowitych typu int. O tablicy maxtemps można także pomyśleć jako zawierającej cztery wiersze, w każdym po pięć liczb. Rys.1 Tablica dwuwymiarowa zaimplementowana jako tablica tablic. Wyrażenie maxtemps[0] to pierwszy element tablicy maxtemps, zatem maxtemps[0] jest 5-elementową tablicą liczb typu int. Pierwszym elementem maxtemps[0] jest maxtemps[0][0], już typu int. Aby zatem sięgnąć po elementy typu int, potrzebujemy dwóch indeksów. O pierwszym indeksie można myśleć jako o wyborze wiersza, o drugim jako o wyborze kolumny. Rys. 2. Dostęp do elementów tablicy realizowany za pomocą indeksów. Kiedy tworzymy tablicę dwuwymiarową możemy zainicjalizować wszystkie jej elementy. Sposób inicjalizacji wynika, ze sposobu inicjalizacji tablic jednowymiarowych. Tablice jednowymiarowe inicjalizujemy podając w nawiasach klamrowych listę wartości rozdzielanych przecinkami. W przypadku tablic dwuwymiarowych każdy element sam z siebie jest tablicą, więc inicjalizujemy go w ten właśnie sposób. Wobec tego inicjalizacja będzie zawierała listę inicjalizacji tablic jednowymiarowych ujętą w nawiasy i rozdzielaną przecinkami. Umieszczenie inicjalizacji każdego wiersza w osobnej linii, tak jak w poniższym przykładzie, jest kwestią stylu, ale bardzo ułatwia czytanie kodu.