Jazyk C - polia

Z Kiwiki
Verzia z 15:35, 26. máj 2020, ktorú vytvoril Lukas.p (diskusia | príspevky)
Skočit na navigaci Skočit na vyhledávání


Polia sa používajú na ukladanie kolekcie údajov, ale často je užitočnejšie myslieť na pole ako kolekciu premenných rovnakého typu. Namiesto deklarovania jednotlivých premenných, ako napríklad číslo 0, číslo 1, ... a číslo 99, deklarujete jednu premennú poľa, ako sú čísla a na reprezentáciu použite čísla [0], čísla [1] a ..., čísla [99]. jednotlivé premenné. Konkrétny prvok v poli je prístupný indexom.

Jednorozmerné polia

Deklarácia jednorozmerného poľa

Na deklarovanie poľa v C programátor špecifikuje typ prvkov a počet prvkov požadovaných poľom takto

typ menoPola[veľkosť];

Toto sa nazýva jednorozmerné pole. Veľkosť musí byť celočíselná konštanta väčšia ako nula a typ môže byť akýkoľvek platný typ v jazyku C. Napríklad deklarácia pola o veľkosti 10:

int pole[10];

Iniciálizácia

Prvky pola môžeme inicializovať po jednom alebo pomocou jedného príkazu nasledovne.

int pole[5] = {1000,5,70,64,1};

Počet hodnôt medzi zátvorkami {} nemôže byť väčší ako počet prvkov(veľkosť pola), ktoré uvádzame pre pole medzi hranatými zátvorkami []. Ak vynecháte veľkosť poľa, vytvorí sa pole ktoré je dostatočne veľké na to aby mohlo udržať inicializáciu.

Preto, ak napíšeme

int pole[] = {1000,5,70,64,1};

Vytvorí sa rovnaké pole ako v predchádzajúcom príkladne.

Prístup k prvkom poľa

K prvku sa pristupuje indexovaním názvu poľa. To sa dosiahne umiestnením indexu prvku do hranatých zátvoriek za názvom poľa.

Napríklad

int cislo = n[8] ;

Do premennej cislo sa priradí hodnota(číslo) z pola n ktoré sa nachádza na indexe 8.

Nasledujúci príklad ukazuje, ako používať všetky tri vyššie uvedené koncepty, viď. deklaráciu, priradenie a prístup k poliam

 1 #include <stdio.h>
 2  
 3 int main () {
 4 
 5    int n[ 10 ]; /* n je pole o veľkosti 10 prvkov  */
 6    int i,j;
 7  
 8    /* inicializácia pola n od 0 po 10 */         
 9    for ( i = 0; i < 10; i++ ) {
10       n[ i ] = i + 100; /* zapíše prvok na mieste i hodnotou i + 100 */
11    }
12    
13    /* výstup hodnoty každého prvku z pola  */
14    for (j = 0; j < 10; j++ ) {
15       printf("Prvok[%d] = %d\n", j, n[j] );
16    }
17  
18    return 0;
19 }

Výstup

Prvok[0] = 100
Prvok[1] = 101
Prvok[2] = 102
Prvok[3] = 103
Prvok[4] = 104
Prvok[5] = 105
Prvok[6] = 106
Prvok[7] = 107
Prvok[8] = 108
Prvok[9] = 109

Viacrozmerné polia

Deklarácia viacrozmerného poľa

Programovací jazyk C umožňuje vytvárať aj viacrozmerné polia. Toto je všeobecná deklarácia viacrozmerného poľa.

typ menoPola[veľkosť_1][veľkosť_2]...[veľkosť_N];

Nasledujúca deklarácia je pre inicializáciu trojrozmerného pola

typ trojrozmerne[2][5][4];

Dvojrozmerné polia

Najjednoduchšou formou viacrozmerného poľa je dvojrozmerné pole. Dvojrozmerné pole je v podstate zoznam jednorozmerných polí. Na deklarovanie dvojrozmerného celočíselného poľa veľkosti [x][y] by ste napísali takto.

typ menoPola[x][y];

Kde typ môže byť akýkoľvek platný typ údajov C a menoPolabude platný identifikátor C. Dvojrozmerné pole možno považovať za tabuľku, ktorá bude mať x počet riadkov a počet stĺpcov y. Taktiež môžme považovať dvojrozmerné pole za maticu čísel. Dvojrozmerné pole a, ktoré obsahuje tri riadky a štyri stĺpce, je možné zobraziť takto.

Stĺpec 0 Stĺpec 1 Stĺpec 2 Stĺpec 3
Riadok 0 a[0][0] a[0][1] a[0][2] a[0][3]
Riadok 1 a[1][0] a[1][1] a[1][2] a[1][3]
Riadok 2 a[2][0] a[2][1] a[2][2] a[2][3]

Každý prvok v poli a je teda identifikovaný názvom prvku vo forme a[i][j], kde „a“ je názov poľa a „i“ a „j“ sú indfexy „bunky“ kde sa daný prvok nachádza.

Inicializácia dvojrozmerných polí

Viacrozmerné polia sa môžu inicializovať zadaním hodnôt v zátvorkách pre každý riadok. Nasleduje pole s 3 riadkami a každý riadok má 4 stĺpce.

1 int a[3][4] = {  
2    {0, 1, 2, 3} ,   /*  inicializácia pre riadok 0 */
3    {4, 5, 6, 7} ,   /*  inicializácia pre riadok 1 */
4    {8, 9, 10, 11}   /*  inicializácia pre riadok 2 */
5 };

Alebo môžme napísať inicializáciu aj do jedného riadka. Nasledujúca inicializácia je ekvivalentná s predchádzajúcim príkladom.

1 int a[3][4] = {  
2    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
3 };

Prístup k prvkom dvojrozmerného poľa

K prvku v dvojrozmernom poli sa pristupuje pomocou indexu riadka a indexu stĺpca poľa. Napríklad

int val = a[2][3];

Práca z dvojrozmerným polom

Ukážme si príklad pre vypísanie dvojrozmerného pola.

 1 #include <stdio.h>
 2  
 3 int main () {
 4 
 5    /* inicializácia dvojrozmerného pola ktoré má 5 riadkov a 2 stĺpce*/
 6    int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
 7    int i, j;
 8  
 9    /* výstup každého prvku pola, najprv sa vypíšu všetky stĺpce daného riadku až potom sa prejde na ďalší riadok */
10    for ( i = 0; i < 5; i++ ) {
11       for ( j = 0; j < 2; j++ ) {
12          printf("a[%d][%d] = %d\n", i,j, a[i][j] );
13       }
14    }
15    return 0;
16 }

Po skompilovaní a spustení vyššie uvedeného kódu sa získa nasledujúci výsledok.

a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8