Jazyk C - polia: Rozdiel medzi revíziami
 (Vytvorená stránka „Kategória:Študijné materiály Kategória:Informatika  {{Skripta_ZI}}  ==Deklarácia== Na deklarovanie poľa v C programátor špecifikuje typ prvkov a počet…“)  | 
				|||
| Riadok 3: | Riadok 3: | ||
{{Skripta_ZI}}  | {{Skripta_ZI}}  | ||
| + | ==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   | + | |
| + | Na deklarovanie poľa v C programátor špecifikuje typ prvkov a počet prvkov požadovaných poľom takto    | ||
<source>  | <source>  | ||
typ menoPola[veľkosť];  | typ menoPola[veľkosť];  | ||
| Riadok 15: | Riadok 17: | ||
</source>  | </source>  | ||
| − | + | '''Iniciálizácia'''  | |
| + | |||
Prvky pola môžeme inicializovať po jednom alebo pomocou jedného príkazu nasledovne.  | Prvky pola môžeme inicializovať po jednom alebo pomocou jedného príkazu nasledovne.  | ||
| Riadok 24: | Riadok 27: | ||
Ak vynecháte veľkosť poľa, vytvorí sa pole ktoré je dostatočne veľké na to aby mohlo udržať inicializáciu.    | 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  | + | Preto, ak napíšeme  | 
<source>  | <source>  | ||
int pole[] = {1000,5,70,64,1};  | int pole[] = {1000,5,70,64,1};  | ||
</source>  | </source>  | ||
Vytvorí sa rovnaké pole ako v predchádzajúcom príkladne.  | 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.    | 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   | + | Napríklad    | 
<source>  | <source>  | ||
int cislo = n[8] ;  | int cislo = n[8] ;  | ||
| Riadok 38: | Riadok 43: | ||
Do premennej cislo sa priradí hodnota(číslo) z pola n ktoré sa nachádza na indexe 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   | + | Nasledujúci príklad ukazuje, ako používať všetky tri vyššie uvedené koncepty, viď. deklaráciu, priradenie a prístup k poliam    | 
<source lang="c" line>  | <source lang="c" line>  | ||
| Riadok 73: | Riadok 78: | ||
Prvok[8] = 108  | Prvok[8] = 108  | ||
Prvok[9] = 109  | Prvok[9] = 109  | ||
| + | </source>  | ||
| + | |||
| + | ==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.  | ||
| + | <source>  | ||
| + | typ menoPola[veľkosť_1][veľkosť_2]...[veľkosť_N];  | ||
| + | </source>  | ||
| + | Nasledujúca deklarácia je pre inicializáciu trojrozmerného pola  | ||
| + | <source>  | ||
| + | typ trojrozmerne[2][5][4];  | ||
| + | </source>  | ||
| + | ==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.  | ||
| + | <source>  | ||
| + | typ menoPola[x][y];  | ||
| + | </source>  | ||
| + | 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.  | ||
| + | {|class="wikitable" style="text-align: center;  | ||
| + | |-  | ||
| + | !  !! 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.  | ||
| + | |||
| + | <source lang="c" line>  | ||
| + | int a[3][4] = {    | ||
| + |    {0, 1, 2, 3} ,   /*  inicializácia pre riadok 0 */  | ||
| + |    {4, 5, 6, 7} ,   /*  inicializácia pre riadok 1 */  | ||
| + |    {8, 9, 10, 11}   /*  inicializácia pre riadok 2 */  | ||
| + | };  | ||
| + | </source>  | ||
| + | Alebo môžme napísať inicializáciu aj do jedného riadka. Nasledujúca inicializácia je ekvivalentná s predchádzajúcim príkladom.  | ||
| + | <source lang="c" line>  | ||
| + | int a[3][4] = {    | ||
| + |    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}  | ||
| + | };  | ||
| + | </source>  | ||
| + | |||
| + | '''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  | ||
| + | <source>  | ||
| + | int val = a[2][3];  | ||
| + | </source>  | ||
| + | |||
| + | '''Práca z dvojrozmerným polom'''   | ||
| + | |||
| + | Ukážme si príklad pre vypísanie dvojrozmerného pola.  | ||
| + | <source lang="c" line>  | ||
| + | #include <stdio.h>  | ||
| + | |||
| + | int main () {  | ||
| + | |||
| + |    /* inicializácia dvojrozmerného pola ktoré má 5 riadkov a 2 stĺpce*/  | ||
| + |    int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};  | ||
| + |    int i, j;  | ||
| + | |||
| + |    /* 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 */  | ||
| + |    for ( i = 0; i < 5; i++ ) {  | ||
| + |       for ( j = 0; j < 2; j++ ) {  | ||
| + |          printf("a[%d][%d] = %d\n", i,j, a[i][j] );  | ||
| + |       }  | ||
| + |    }  | ||
| + |    return 0;  | ||
| + | }  | ||
| + | </source>  | ||
| + | |||
| + | Po skompilovaní a spustení vyššie uvedeného kódu sa získa nasledujúci výsledok.  | ||
| + | <source>  | ||
| + | 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  | ||
</source>  | </source>  | ||
Verzia zo dňa a času 11:12, 24. marec 2020
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] = 109Viacrozmerné 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