Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Pole je dátová štruktúra, v ktorej sú dáta v pamäti uchovávané za sebou. Pritom všetky prvky jedného poľa, sú rovnakého údajového typu (napr. int, char, float ...). 


Deklarácia poľa

Deklarácia poľa vyzerá nasledovne:

<typ> <názov>[<veľkosť>];

int pole[10];

Pri deklarácií poľa dochádza k rezervovaniu miesta v pamäti RAM. Nedochádza však k odstráneniu údajov, ktoré tam zanechali iné programy. Preto je pole vhodné inicializovať.

  • Ak chceme, aby prvky poľa boli definované už pri deklarácii 

int pole1[5] = {1, 2, 3, 4, 5};

  • Ak inicializujeme, nie je potrebé zadávať veľkosť poľa, tá je známa z inicializácie

int pole2[] = {1, 2, 3, 4, 5};

  • Pole
je v pamäti uchované nasledovne:
  • môžeme inicializovať aj  čiastočne

int pole3[5] = {1, 2};

int pole4[5] = {0};

Inicializáciu je možné vykonať len raz a to pri deklarácii poľa neskôr hodnotu prvkov možno meniť len ich prepísaním!



Image Added


Indexovanie prvkov poľa

Majme nasledovne pole:

int pole[5] = {1, 2, 3, 4, 5};


Pole v jazyku C indexujeme od nuly. Teda prvý prvok je na nultej pozícii.

  • Deklarácia poľa vyzerá nasledovne:
  •  <typ> <názov>[<veľkosť>];

    int pole[10];

     

    int a = pole[0]; // v a bude 1. bunka poľa 

    int b = pole[1]; // v b bude 2. bunka poľa

    int c = pole[5]; // POZOR!! Pole má veľkosť 5 prvkov. Tatko sa ale snažíme pristúpiť k šiestemu prvkuJazyk C nemá kontrolu rozsahu poľa!

    Zápis do bunky poľa:

    pole[4] = 10;

    pole[3] = a; // premenná a bola niekde predtým deklarovaná a inicializovaná

    Načítanie zo štandardného vstupu:

    scanf("%d", &pole[1]);

    Príklad zlej indexácie - prekročenie veľkosti poľa

    Code Block
    languagecpp
    #include <stdio.h>
    int main()
    {
            int i;
            int pole[5] = {1,2,3,4};
          
            for(i=0;i<6;i++)
                    printf("%d ",pole[i]);
    }
    
    

    Image Added


    Zistenie veľkosti poľa

    Veľkosť poľa v jazyku C môžeme zistiť pomocou operátora sizeof(). Návratová hodnota sizeof() predstavuje počet bajtov premennej, ktorej veľkosť je zisťovaná. Preto pre zistenie počtu prvkov poľa, je potrebné túto veľkosť deliť veľkosťou takého údajového typu, ako je samotné pole. 

    Code Block
    languagecpp
    	int pole[] = { 1, 5, 2, 3, 6, 8, 9, 7, 10, 18, 16, 14, 13, 15, 12, 11, 4, 17};
        int size = sizeof(pole)/sizeof(int);
    	




    Úvod do dynamickej alokácie pamäte 

    Dynamická alokácia pamäte je pokročilá forma práce s pamäťou. Budeme sa o nej učiť neskôr. Teraz si však ukážeme, ako je možné racionalizovať prácu s veľkosťou poľa. Zatiaľ sme vždy veľkosť poľa vedeli. Poznali sme ju preto, lebo sme ju zadávali pri deklarácii poľa. Teda alokovali sme pamäť staticky. Niekedy programátor nevie koľko pamäte bude potrebovať a preto je potrebné, aby sa alokovala dynamicky, teda za behu programu. Je veľmi nesprávne alokovať priveľké množstvo pamäte, len tak "do rezervy". 

    Predstavme si prípad, kedy program od používateľa najprv zistí koľko hodnôt zamýšľa zadať a až následne sa v  pamäti alokuje potrebná pamäť. Až potom používateľ zadá požadovaný počet hodnôt.



    Code Block
    languagecpp
    #include<stdio.h>
    int main()
    {
            int pocet;
            printf("Zadaj pocet prvkov pola \n>> ");
            scanf("%d", &pocet);			            // Nacitanie poctu prvkov
            int pole[pocet]; 			                // dynamicky alokovane 
            for(int i=0; i<pocet; i++)
            {
                    printf("Zadaj %d. prvok poľa \n>> ",i);
                    scanf("%d",&pole[i]);               //Nacitanie i-teho prvku
            }
    		printf("\n POLE: ");
            for(int i=0; i<pocet; i++)
            {
                   printf("%d ",pole[i]);
            }
            printf("\n");
    	return 0;
    }
    
    



    Code Block
    languagebash
    ab123cd@zapfei$ gcc -std=c11 -Werror -Wall -lm  dynamic.c -o DYNAMIC
    ab123cd@zapfei$ ./DYNAMIC
    Zadaj pocet prvkov pola
    >> 4
    Zadaj 0. prvok poľa
    >> 1
    Zadaj 1. prvok poľa
    >> 2
    Zadaj 2. prvok poľa
    >> 3
    Zadaj 3. prvok poľa
    >> 4
    
     POLE: 1 2 3 4