Jazyk C - polia
Učebné texty
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