Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné – matice (tabulka) Dvourozměrné pole je realizováno jako jedno-rozměrné pole, jehož prvky jsou opět jedno-rozměrná pole Definice dvourozměrného pole: datový_typ idPole[vel1][vel2]; 15/02/2018
Vícerozměrná pole (2) datový_typ: idPole: vel1: vel2: specifikuje datový typ jednotlivých prvků pole idPole: identifikátor proměnné typu dvourozměrné pole vel1: určuje počet řádků dvourozměrného pole (matice) jednotlivé řádky jsou zpřístupnitelné pomocí indexů v rozmezí 0 až vel1–1 vel2: určuje počet sloupců dvourozměrného pole (matice) prvky v jednotlivých řádcích jsou zpřístupnitelné pomocí indexů v rozmezí 0 až vel2–1 15/02/2018
Vícerozměrná pole (3) Příklad: double a[4][5]; definuje dvourozměrné pole (matici) a se 4 řád-ky a 5 sloupci, jehož prvky jsou typu double 15/02/2018
Vícerozměrná pole (4) Zpřístupnění jednoho prvku ve dvourozměr-ném poli: idPole[výraz1][výraz2] idPole: identifikátor proměnné typu pole výraz1: výraz, jehož vyhodnocením je dán index řádku, na němž se nachází zpřístupňovaný prvek výraz2: výraz, jehož vyhodnocením je dán index sloupce, v němž se nachází zpřístupňovaný prvek 15/02/2018
Vícerozměrná pole (5) Příklad: a[2][3] zpřístupní prvek, který se nachází na řádku s indexem 2 a ve sloupci s indexem 3 Poznámka: dvourozměrné (vícerozměrné) pole se do operač-ní paměti ukládá po řádcích (poslední index se mění nejrychleji) Definice dvourozměrného pole může být spo-jena i s inicializací jeho prvků 15/02/2018
Vícerozměrná pole (6) Příklad: int matice[3][4]= { {10, 12, 1, 0}, {-5, 8, 20, 1}, {-6, -8, 15, 9} }; Definuje dvourozměrné pole matice, které má: 3 řádky (indexované v rozmezí 0 až 2) 4 sloupce (indexované v rozmezí 0 až 3) 15/02/2018
Vícerozměrná pole (7) [0] [1] [2] [3] index sloupce [0] 10 12 1 matice: [1] -5 8 20 1 [2] -6 -8 15 9 index řádku Zápis matice[1][2] zpřístupní prvek s hodnotou 20 15/02/2018
Vícerozměrná pole (8) Pro přístup k prvkům dvourozměrného (více-rozměrného) pole je možné použít i ukazatelů Nechť je dána definice: int a[2][3]; pak zápis a[1][2] je ekvivalentní zápisu *(*(a+1)+2) Výraz *(*(a+1)+2) se vyhodnocuje v ná-sledujících krocích: a označení pole a se převede na ukazatel na první čtyř-prvkové pole (první řádek, tj. řádek s indexem 0) 15/02/2018
Vícerozměrná pole (9) a+1 *(a+1) *(a+1)+2 *(*(a+1)+2) označuje ukazatel na druhé čtyřprvkové pole (druhý řádek, tj. řádek s indexem 1) *(a+1) označení druhého čtyřprvkového pole, které se převede na ukazatel na první prvek (s indexem 0) tohoto pole *(a+1)+2 označuje ukazatel na třetí prvek (prvek s indexem 2) ve druhém čtyřprvkovém poli *(*(a+1)+2) označuje třetí prvek ve druhém čtyřprvkovém poli, tj. prvek a[1][2] 15/02/2018
Vícerozměrná pole (10) Poznámka: definice polí, která mají více než dva rozměry se provádí přidáním dalších rozměrů uvedených v hranatých závorkách např. třírozměrné pole lze definovat jako: int pole[5][6][4]; pro zpřístupnění jednoho prvku (hodnoty typu int) v poli pole je zapotřebí uvést tři indexy např.: pole[2][5][1] 15/02/2018
Funkce – podprogramy (1) Podprogram je posloupnost příkazů opatřená jménem, které je možné později používat ja-ko reprezentanta celé posloupnosti Jako podprogram je vhodné označit algorit-micky ucelenou programovou jednotku řešící vhodně vyčleněný problém Jazyk C umožňuje zápis podprogramů pomo-cí funkcí Funkce představuje vhodný způsob zapou-zdření nějakého výpočtu 15/02/2018
Funkce – podprogramy (2) Opakování – funkce je tvořena: hlavičkou, která specifikuje: viditelnost funkce vně souboru, ve kterém je defino-vána návratový typ – typ hodnoty, kterou funkce vrací jméno funkce seznam (typ a počet) formálních parametrů, pomocí nichž funkce může komunikovat se svým okolím tělem funkce, které obsahuje: lokální deklarace a definice posloupnost příkazů, která bude po vyvolání funkce provedena 15/02/2018
Funkce – podprogramy (3) Definice funkce: návratový_typ jmFunkce(seznam formálních parametrů) { /* Tělo funkce jmFunkce */ /* Lokální deklarace a definice */ /* Posloupnost příkazů */ } Poznámka: při definici funkce není za její hlavičkou uveden středník Hlavička funkce 15/02/2018
Funkce – podprogramy (4) návratový_typ: udává typ hodnoty, kterou funkce vrací vrácenou hodnotu je možné použít kdekoliv na pozici výrazu odpovídajícího typu vrácená hodnota může být také ignorována jestliže funkce nevrací žádnou hodnotu, pak by návratovým typem měl být typ void jmFunkce: identifikátor specifikující jednoznačné jméno funkce následně se používá pro její vyvolání 15/02/2018
Funkce – podprogramy (5) seznam formálních parametrů: slouží k předání vstupních hodnot funkci je-li prázdný, měl by být použitý typ void formální parametry: se zapisují včetně svého datového typu jsou od sebe odděleny symbolem čárka (,) příklad: int a, int b, double x identifikátory použité pro formální parametry funkce jsou lokální a z jiných funkcí nejsou viditelné (dostupné) 15/02/2018
Funkce – podprogramy (6) ostatní části programu mohou používat stejné identifikátory, aniž by docházelo ke konfliktům Jestliže má funkce vracet hodnotu, pak by v jejím těle měl být obsažen příkaz return následovaný výrazem, který je typově kom-patibilní s typem návratový_typ Příkaz return způsobí ukončení provádění funkce Vrácená hodnota je dána hodnotou výrazu, který je uvedený za příkazem return 15/02/2018
Funkce – podprogramy (7) Příklad: long int mocnina(int zaklad, unsigned int n) { long int m; for (m=1; n>0; n--) m*=zaklad; return m; } Funkce počítající hodnotu mocniny zakladn pro zaklad Z a n N 15/02/2018