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.