60 likes | 219 Views
Arrays. Polia (DVOJ- a viacrozmerné). Dvojrozmerné pole = matica. Analógia tenzora vo fyzike, prípadne matice Matematický zápis: a 11 , a 12 , a 13 , a 21 , ... C++ zápis: a [0][0], a [0][1], a [0][2], a [1][0],. Deklarácia dvojrozmerného poľa. float a[10][5];
E N D
Arrays Polia(DVOJ- a viacrozmerné)
Dvojrozmerné pole = matica • Analógia tenzora vo fyzike, prípadne matice • Matematický zápis:a11, a12, a13, a21, ... • C++ zápis:a[0][0], a[0][1], a[0][2], a[1][0], ...
Deklarácia dvojrozmerného poľa float a[10][5]; • Čísla sú uložené v pamäti za sebou jedno za druhým, riadok za riadkom • Odkazovanie na prvky poľa: a[0][2],a[5][3] a podobne Názov poľa: atyp float V pamäti sa rezervuje priestor pre 10*5 = 50 čísel
Inicializácia hodnôt prvkov poľa • Už pri vytvorení dvojrozmerného poľa možno prvky naplniť hodnotami (ako vektor riadkových vektorov): float a[2][2]={{1,-2},{2,5}}; Matica 2x2 Typ: float Prvky matice: a[0][0] = 1 a[0][1] = -2 a[1][0] = 2 a[1][1] = 5
Práca s prvkami poľa • Práca s prvkami poľa je jednoduchá a analogická, ako s jednorozmernými poľami, uprednostniť referencie pred priamym posielaním matíc do funkcie. • Príklad: výpočet súčinu dvoch matíc: float a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; float b[3][3]={{9,8,7},{6,5,4},{3,2,1}}; float c[3][3]; SucinMatic(c,a,b); ... voidSucinMatic(float (&c)[3][3],constfloat (&a)[3][3],constfloat(&b)[3][3]) { for(int i=0;i<3;i++) for(int j=0;j<3;j++) { c[i][j]=0; for(int k=0;k<3;k++) c[i][j] += a[i][k]*b[k][j]; } } Výpočet prvkuc[0][1]: 7 3 1 2 9 8 5 6 4 6 5 4 8 9 3 1 7 2 a b
Viacrozmerné polia • Analogicky. float a[2][2][2]; float b[2][2][2]={ {{1,2},{3,4}}, {{5,6},{7,8}} }; • Poznámka: V skutočnosti sa vnútorné zátvorky nemusia používať, ale sú odporúčané kvôli prehľadnosti zápisu floatb[2][2][2]={1,2,3,4,5,6,7,8};