Tablice dwuwymiarowe

tablice dwuwymiarowe c/c++

Czas na drugi wymiar tablic!

Czym są tablice i jak działają już się dowiedziałeś a więc pora abyś zobaczył tablice dwuwymiarowe. Są one bardzo użyteczne kiedy pracujemy na plikach tekstowych lub graficznych. Mają one niezliczoną ilość zastosować dlatego potraktuj ten temat poważnie. Nie są one czymś trudnym jednak aby je zrozumieć należy się skupić. Poniżej na ilustracji przedstawiona jest taka tablica. Zielony napis wskazuje jeden z elementów tak aby łatwiej było Ci zrozumieć w jaki sposób to działa.

tablice dwuwymiarowe c/c++

Tworzenie tablic dwuwymiarowych

Tablica dwuwymiarowa tak samo jak standardowa składa się z czterech elementów. Typu, nazwy, podwójnych nawiasów kwadratowych oraz dwóch rozmiarów. Dwa ostatnie elementy są podwójne ponieważ to dwuwymiarowa tablica proste i logiczne. Analogicznie jest z tablicami wielowymiarowymi na przykład czterowymiarowa miała by 4 nawiasy klamrowe i 4 rozmiary. Ale to nie jest temat na teraz. Zobaczmy więc jak się tworzy takie cacka.

#include <stdio.h>
 
int main()
{
    int tablica1[2][5] = { {0,1,2,3,4} , {5,6,7,8,9} }; 
    //zwróć uwagę na podwójne nawiasy klamrowe i przecinek
    printf("Wyswietlamy trzeci element drugiej tablicy1 %d", tablica1[1][2]); 
    
    float tablica2[2][3]; //zawsze podajemy jaki będzie rozmiar tablicy
    printf("\nPodaj wartosci dla pierwszej tablicy ");
    scanf("%f %f %f", &tablica2[0][0],&tablica2[0][1],&tablica2[0][2]); 
    //od razu uzupełniamy cała pierwzą tablice
    printf("Podaj pierwszy element drugiej tablicy2 ");
    scanf("%f", &tablica2[1][0]);
    printf("Podaj drugi element drugiej tablicy2 ");
    scanf("%f", &tablica2[1][1]);
    printf("Podaj trzeci element drugiej tablicy2 ");
    scanf("%f", &tablica2[1][2]);
    //pojedyncze uzupełnianie drugiej tablicy
    printf("Wyswietlamy drugi element pierwszej tablicy %.2f \n",tablica2[0][1]);
    printf("Wyswietlamy trzeci element drugiej tablicy %.2f",tablica2[1][2]);
    
    return 0;
}

Przykład podobny jak dla standardowych tablic ale to dlatego że bardzo dobrze widać na nim wszystkie mechanizmy. Zobacz że tablica1 której wartości są podane w kodzie ma specyficzny zapis. Nawiasy klamrowe jasno pokazują że w jednej tablicy są dwie mniejsze a w każdej z nich jest 5 wartości. Dla większej przejrzystości wszystko jest oddzielone spacją ale oczywiście nie trzeba tak robić. Następnie uzupełniamy tablice ręcznie, można to zrobić na jednym machem (chodź nijak ma się on do pętli). Ewentualnie na około. Pora to zautomatyzować i użyć pętli a dokładniej mówiąc zagnieżdżonych pętli.

Automatyczne uzupełnianie tablic dwuwymiarowych

Zagnieżdżonych pętli nigdy wcześniej nie przedstawiałem to dlatego że nie było takiej potrzeby. Jednak teraz jest na to odpowiednia pora. Spójrz na fragment kodu poniżej.

#include <stdio.h>
 
int main()
{
    int tablica[5][5];
    printf("Uzupelniamy tablice! \n");
    for(int i=0; i<5; i++) //zmienna "i"
    {
        for(int j=0; j<5; j++) //pętla w pętli, zmienna "j"
        {
            printf("%d.%d element tablicy: ",i,j);
            scanf("%d", &tablica[i][j]);
        }
        printf("\n");
    }
    printf("Wypisujemy tablice! \n");
    for(int i=4; i>=0; i--) // zmienna "i"
    {
        for(int j=4; j>=0; j--) //kolejna pętla w pętli, zmienna "j"
        {
            printf("%d.%d element tablicy %d   ",i,j, tablica[i][j]);
        }
        printf("\n");
    }
    return 0;
}

Zachęcam abyś wypróbował sobie ten kod (kompilator online) bo w jasny sposób pokazuje działanie podwójnej pętli oraz tablicy. Zwróć uwagę że zagnieżdżona pętla ma inną zmienną niż zewnętrzna. Pierwsza ma zmianą i natomiast kolejna j jest to zabieg konieczny. Bez niego nie dałoby się odwołać do konkretnej komórki tablicy a komputer gubiłby się w liczeniu. Inna sprawa jak mamy dwie pętle które następują po sobie. Wówczas w każdej z nich może być taka sama zmienna i to w niczym nie przeszkadza.

Tablice wielowymiarowe

W ramach ciekawostki pokazuje tablice trzywymiarową oczywiście każdy kolejny wymiar tworzy się analogicznie. Nie jest to nic trudnego a warto wiedzieć jak to wygląda.

#include <stdio.h>
 
int main()
{
    int potezna_tablica1[2][2][2] = { {{1,2},{3,4}} , {{5,6},{7,8}} };
    //sposób zapisu potężnej tablicy
    int potezna_tablica2[2][2][2];
    printf("Wczytywanie\n");
    for(int k=0; k<2; k++) //pierwsza petla zmienna "k"
    {
        for(int l=0; l<2; l++) //druga pętla zmienna "l"
        {
            for(int m=0; m<2; m++) //trzecia pętla zmienna "m"
            {
                printf("%d.%d.%d wartosc = ", k,l,m);
                scanf("%d", &potezna_tablica2[k][l][m]);
            }
        }
    }
    printf("Wypisanie\n");
    for(int k=0; k<2; k++)
    {
        for(int l=0; l<2; l++)
        {
            for(int m=0; m<2; m++)
            {
                printf("%d.%d.%d wartosc %d   ", k,l,m,potezna_tablica2[k][l][m]);
            }
            printf("\n"); //zabieg estetyczny
        }
    }
    return 0;
}

Podsumowanie

Jak sam widzisz tablice dwuwymiarowe c/c++ to nic trudnego a z pewnością ta wiedza zaprocentuje w przyszłości. Mając opanowane standardowe tablice korzystanie z tych bardziej rozbudowanych jest naturalnym następstwem. Temat ważny i nie wyczerpany do końca ponieważ byłoby to niemożliwe. Mając już podstawy wiedzy możesz się samodzielnie rozwiać w tym kierunku.