Jazyk C - polia

Z Kiwiki
Verzia z 12:12, 24. marec 2020, ktorú vytvoril PatrikC (diskusia | príspevky)
Skočit na navigaci Skočit na vyhledávání


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