+ All Categories
Home > Documents > Vícerozměrná pole (1)

Vícerozměrná pole (1)

Date post: 12-Jan-2016
Category:
Upload: penney
View: 61 times
Download: 0 times
Share this document with a friend
Description:
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 - PowerPoint PPT Presentation
22
22-03-30 1 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[vel 1 ][vel 2 ];
Transcript
Page 1: Vícerozměrná pole (1)

23-04-21 1

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];

Page 2: Vícerozměrná pole (1)

23-04-21 2

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

Page 3: Vícerozměrná pole (1)

23-04-21 3

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

3433323130

2423222120

1413121110

0403020100

aaaaa

aaaaa

aaaaa

aaaaa

Page 4: Vícerozměrná pole (1)

23-04-21 4

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

Page 5: Vícerozměrná pole (1)

23-04-21 5

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ů

Page 6: Vícerozměrná pole (1)

23-04-21 6

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)

Page 7: Vícerozměrná pole (1)

23-04-21 7

Vícerozměrná pole (7)

• Zápis matice[1][2] zpřístupní prvek s hodnotou 20

[0] 10 12 1

[1] -5 8 20

[2] -6 -8 15

0

1

9

[0] [1] [2] [3] index sloupce

index řádku

matice:

Page 8: Vícerozměrná pole (1)

23-04-21 8

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)

Page 9: Vícerozměrná pole (1)

23-04-21 9

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]

Page 10: Vícerozměrná pole (1)

23-04-21 10

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]

Page 11: Vícerozměrná pole (1)

23-04-21 11

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

Page 12: Vícerozměrná pole (1)

23-04-21 12

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

Page 13: Vícerozměrná pole (1)

23-04-21 13

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

Page 14: Vícerozměrná pole (1)

23-04-21 14

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í

Page 15: Vícerozměrná pole (1)

23-04-21 15

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é)

Page 16: Vícerozměrná pole (1)

23-04-21 16

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

Page 17: Vícerozměrná pole (1)

23-04-21 17

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

Page 18: Vícerozměrná pole (1)

23-04-21 18

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

Page 19: Vícerozměrná pole (1)

23-04-21 19

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 a výsledek vloží do proměn-né x

Page 20: Vícerozměrná pole (1)

23-04-21 20

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í

Page 21: Vícerozměrná pole (1)

23-04-21 21

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 &

Page 22: Vícerozměrná pole (1)

23-04-21 22

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


Recommended