220 likes | 387 Views
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
E N D
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];
Vícerozměrná pole (2) • datový_typ: • 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řístupnitlné 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
Vícerozměrná pole (3) • Příklad:doublea[4][5];definuje dvourozměrné pole (matici) a se 4 řád-ky a 5 sloupci, jehož prvky jsou typu double
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
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 sindexem 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ů
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)
Vícerozměrná pole (7) [0] [1] [2] [3] index sloupce • Zápis matice[1][2]zpřístupní prvek s hodnotou 20 [0] 10 12 1 0 matice: [1] -5 8 20 1 [2] -6 -8 15 9 index řádku
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í tří-prvkové pole (první řádek, tj. řádek s indexem 0)
Vícerozměrná pole (9) • a+1 • označuje ukazatel na druhé tříprvkové pole (druhý řádek, tj. řádek s indexem 1) • *(a+1) • označení druhého tří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 tříprvkovém poli • *(*(a+1)+2) • označuje třetí prvek ve druhém tříprvkovém poli, tj. prvek a[1][2]
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]
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
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
Funkce – podprogramy (3) • Definice funkce:návratový_typjmFunkce(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
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í
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é)
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
Funkce – podprogramy (7) • Příklad:longint mocnina(int zaklad,unsignedint n){ longintm;for (m=1; n>0; n--)m*=zaklad; return m;} • Funkce počítající hodnotu mocniny zakladn pro zaklad Z a n N
Funkce – podprogramy (8) • Volání (použití) funkce: • způsobí předání řízení volané funkci, tj. začnou se postupně vykonávat její jednotlivé příkazy • prováděno jménem funkce, za nímž v kulatých zá-vorkách následuje seznam skutečných parametrů (argumentů) reprezentovaných výrazy, tj.jmFunkce(seznam skutečných parametrů) • v době volání funkce dochází k substituci skuteč-ných parametrů za parametry formální • vzájemná korespondence skutečných a formálních parametrů je dána pořadím v těchto seznamech
Funkce – podprogramy (9) • odpovídající si parametry musí být typově kompa-tibilní • provádění funkce je ukončeno: • provedením příkazu return • dosažením konce (provedením posledního příkazu) funkce • po ukončení funkce je řízení předáno na příkaz, který se nachází bezprostředně za voláním funkce • příklad:x=mocnina(2+3,4);vypočítá hodnotu 54 avýsledek vloží do proměn-né x
Funkce – podprogramy (10) • Poznámky: • je-li seznam skutečných parametrů prázdný, pak je nutné v době volání funkce uvést prázdné kulaté závorky • funkce může ve svém těle libovolně volat funkce jiné nebo i sama sebe – tzv. rekurze • funkce není možné do sebe vnořovat • V jazyku C jsou všechny skutečné parametry předávány (volány) hodnotou: • při volání hodnotou substituce skutečného para-metru za formální probíhá takto: • výraz (skutečný parametr) se vyhodnotí
Funkce – podprogramy (11) • formální parametr se stane lokální proměnnou, které je při volání funkce vyhrazeno paměťové místo, do něhož je zkopírována hodnota skutečného parametru • po ukončení funkce se toto místo opět uvolní • funkce může hodnotu této své lokální proměnnéměnit, aniž by se tím měnila hodnota skutečného parametru • Volající funkce může vytvořit podmínky pro změny své proměnné tím, že poskytne její adresu (ukazatel) – pomocí operátoru &
Funkce – podprogramy (12) • Volaná funkce musí definovat parametr jako ukazatel a prostřednictvím něj může nepřímo přistupovat k proměnné volající funkce • Jestliže je jako skutečný (formální) parametr použito jméno pole, pak funkce obdrží adresu začátku pole ke kopírování prvků pole nedojde • Funkce tedy může přistupovat k libovolnému prvku pole a měnit jej