Jazyk C - polia: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
(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==
+
'''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==
+
'''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==
+
 
 +
'''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


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