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 12: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] = 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