Jazyk C - polia: Rozdiel medzi revíziami
(2 medziľahlé úpravy od 2 ďalších používateľov nie sú zobrazené) | |||
Riadok 1: | Riadok 1: | ||
[[Kategória:Študijné materiály]] | [[Kategória:Študijné materiály]] | ||
[[Kategória:Informatika]] | [[Kategória:Informatika]] | ||
+ | {{Skripta_ZI}} | ||
+ | __TOC__ | ||
+ | '''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== | ==Jednorozmerné polia== | ||
Riadok 93: | Riadok 97: | ||
</source> | </source> | ||
==Dvojrozmerné polia== | ==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 [ | + | 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 [ROZMER1][ROZMER2] by ste napísali takto. |
<source> | <source> | ||
− | typ menoPola[ | + | typ menoPola[ROZMER1][ROZMER2]; |
</source> | </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 | + | 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 maticaA, ktoré obsahuje tri riadky a štyri stĺpce, je možné zobraziť takto. |
{|class="wikitable" style="text-align: center; | {|class="wikitable" style="text-align: center; | ||
|- | |- | ||
! !! Stĺpec 0 !! Stĺpec 1 !! Stĺpec 2 !! Stĺpec 3 | ! !! Stĺpec 0 !! Stĺpec 1 !! Stĺpec 2 !! Stĺpec 3 | ||
|- | |- | ||
− | | Riadok 0 || | + | | Riadok 0 || maticaA[0][0] || maticaA[0][1] || maticaA[0][2] || maticaA[0][3] |
|- | |- | ||
− | | Riadok 1 || | + | | Riadok 1 || maticaA[1][0] || maticaA[1][1] || maticaA[1][2] || maticaA[1][3] |
|- | |- | ||
− | | Riadok 2 || | + | | Riadok 2 || maticaA[2][0] || maticaA[2][1] || maticaA[2][2] || maticaA[2][3] |
|- | |- | ||
|} | |} | ||
Riadok 145: | Riadok 149: | ||
/* inicializácia dvojrozmerného pola ktoré má 5 riadkov a 2 stĺpce*/ | /* inicializácia dvojrozmerného pola ktoré má 5 riadkov a 2 stĺpce*/ | ||
− | int | + | int maticaA[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}}; |
int i, j; | int i, j; | ||
Riadok 151: | Riadok 155: | ||
for ( i = 0; i < 5; i++ ) { | for ( i = 0; i < 5; i++ ) { | ||
for ( j = 0; j < 2; j++ ) { | for ( j = 0; j < 2; j++ ) { | ||
− | printf(" | + | printf("maticaA[%d][%d] = %d\n", i,j, maticaA[i][j] ); |
} | } | ||
} | } | ||
Riadok 160: | Riadok 164: | ||
Po skompilovaní a spustení vyššie uvedeného kódu sa získa nasledujúci výsledok. | Po skompilovaní a spustení vyššie uvedeného kódu sa získa nasledujúci výsledok. | ||
<source> | <source> | ||
− | + | maticaA[0][0]: 0 | |
− | + | maticaA[0][1]: 0 | |
− | + | maticaA[1][0]: 1 | |
− | + | maticaA[1][1]: 2 | |
− | + | maticaA[2][0]: 2 | |
− | + | maticaA[2][1]: 4 | |
− | + | maticaA[3][0]: 3 | |
− | + | maticaA[3][1]: 6 | |
− | + | maticaA[4][0]: 4 | |
− | + | maticaA[4][1]: 8 | |
</source> | </source> |
Aktuálna revízia z 15:47, 26. máj 2020
Učebné texty
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 [ROZMER1][ROZMER2] by ste napísali takto.
typ menoPola[ROZMER1][ROZMER2];
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 maticaA, 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 | maticaA[0][0] | maticaA[0][1] | maticaA[0][2] | maticaA[0][3] |
Riadok 1 | maticaA[1][0] | maticaA[1][1] | maticaA[1][2] | maticaA[1][3] |
Riadok 2 | maticaA[2][0] | maticaA[2][1] | maticaA[2][2] | maticaA[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 maticaA[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("maticaA[%d][%d] = %d\n", i,j, maticaA[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.
maticaA[0][0]: 0
maticaA[0][1]: 0
maticaA[1][0]: 1
maticaA[1][1]: 2
maticaA[2][0]: 2
maticaA[2][1]: 4
maticaA[3][0]: 3
maticaA[3][1]: 6
maticaA[4][0]: 4
maticaA[4][1]: 8