Základní stavební prvky algoritmu ˇ Podmínka. Cyklus for, while, do-while. Funkce, metody. Pˇretežování.
Tomáš Bayer |
[email protected] ˇ Katedra aplikované geoinformatiky a kartografie, Pˇrírodovedecká fakulta UK.
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
1 / 40
Obsah pˇrednášky 1
Stavební prvky algoritmu
2
Blok pˇríkazu˚
3
ˇ pˇríkaz Podmínený
4
Cykly
5
Podprogramy
6
Pˇredávání parametru˚ hodnotou a odkazem
7
Rekurze
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
2 / 40
Stavební prvky algoritmu
1. Stavební prvky programu Základní stavební prvky programu: pˇríkazy. ˇ Delení pˇríkazu: ˚ Jednoduché pˇríkazy Základní stavební jednotka programu, neobsahují další pˇríkazy. Pˇriˇrazovací pˇríkaz, prázdný pˇríkaz, pˇríkaz skoku, pˇríkaz podprogramu (procedury, funkce). Strukturované pˇríkazy Tvoˇreny jednoduchými cˇ i dalšími pˇríkazy. ˇ Složený pˇríkaz (blok), pˇríkaz pro vetvení programu (podmínka), pˇríkaz pro opakování (cyklus). ˇ realizovat operace nad datovými položkami. Umožnují Vzájemneˇ mohou být kombinovány. Implementovány prakticky ve všech programovacích jazycích. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
3 / 40
Blok pˇríkazu˚
2. Blok pˇríkazu˚ ˇ více akcí. Používají se v pˇrípadech, kdy je nutno provádet ˇ postupneˇ v zadaném poˇradí. Pˇredstavují posloupnost kroku, ˚ které jsou provádeny Jednotlivé kroky mohu/nemusí být elementární. Oznaˇcován jako složený pˇríkaz. Konstrukce bloku v C++/Javeˇ tvoˇrena složenými závorkami, uvnitˇr libovolný poˇcet pˇríkazu. ˚ V jiných jazycích napˇr. odsazením.
{ //Oteviraci zavorka double a=10, b=15; double c=a*a+b*b; }
//Uzaviraci zavorka
ˇ vyskytovat žádný pˇríkaz ⇒ prázdný pˇríkaz. Blok muže ˚ být prázdný, nemusí se v nem
; { }
//Prazdny prikaz //Prazdny prikaz
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
4 / 40
Blok pˇríkazu˚
3. Vnoˇrený blok ˇ Bloky mohou být tvoˇreny podbloky (tzv. vnoˇrené bloky) nebo nekterými výše uvedenými prvky. ˇ Definujeme -li ve vnoˇreném bloku promennou, nelze ji používat mimo vnoˇrený blok. { //Zacatek bloku, lze pouzit pouze promennou a double a=1 a++; {
//Zacatek vnoreneho bloku, lze pouzit promenne a,b double b=10; b=a++; } //Konec vnoreneho bloku
b=10; //Chyba, platnost bloku } //Konec bloku a=17;
//Chyba, platnost bloku
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
5 / 40
ˇ pˇríkaz Podmínený
ˇ 4. Pˇríkazy pro vetvení programu ˇ Pˇríkazy pro vetvení bývají cˇ asto oznaˇcovány jako tzv. rˇídící struktury. ˇ Patˇrí k nejˇcasteji používaným konstrukcím. ˇ provádet ˇ vetvení ˇ Umožnují programu a ovlivnit, které pˇríkazy budou provedeny v závislosti na vyhodnocení booleovských relací (podmínek). ˇ Bývají proto nazývány podmínenými pˇríkazy. ˇ Realizují vetvení algoritmu, reagují na situace, ke kterým dochází v ˇ prub ˚ ehu zpracování programu. ˇ se bude provádet, ˇ rozhoduje pravdivostní hodnota O tom, která z vetví podmínky. Typy podmínek: neúplná podmínka. úplná podmínka. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
6 / 40
ˇ pˇríkaz Podmínený
5. Neúplná podmínka Pokud výraz nabývá pravdivé hodnoty, provede se pˇríkaz resp. blok pˇríkazu. ˚ ˇ v pˇrípadeˇ nesplnení ˇ podmínky. Neˇreší, co se bude delat Je-li za if jednoduchý pˇríkaz, netˇreba použít bloku.
if (vyraz) prikaz;
//jednoduchy prikaz,
Z duvodu ˚ pˇrehlednosti do bloku dáváme i jednoduchý pˇríkaz. Je-li za if složený pˇríkaz, nutno použít blok.
if (vyraz) { prikaz1; prikaz2; ... } ˇ Pokud je to možné, podmínky neuvádíme v negaci, ale v “kladné” forme. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
7 / 40
ˇ pˇríkaz Podmínený
6. Ukázky neúplné podmínky Ruzné ˚ zápisy jednoduché podmínky: if (x==5) aa++; if (x==5) a++; if (x==5) //Doporucena varianta { a++; } Vnoˇrená neúplný podmínka s jednoduchým pˇríkazem:
if (x==5) //Neprehledne, vede k chybam if (y==10) a++; if (x==5) //Doporucena varianta { if (y==10) { a++; } } ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
8 / 40
ˇ pˇríkaz Podmínený
7. Úplná podmínka Úplná podmínka vznikne rozšíˇrením neúplné podmínky o konstrukci else, která bude provedena, ˇ pokud podmínka nebude splnena. ˇ ˇ podmínky. Umožnuje konstruovat složitejší ˇ podmínky: Jednoduchý pˇríkaz v tele
if (vyraz) prikaz; else prikaz;
//Jednoduchy prikaz, pouzit strednik
ˇ podmínky: Složený pˇríkaz v tele
if (vyraz){ prikaz1; prikaz2; ... } else { prikaz3; prikaz4; ... }
//Nelze pouzit strednik !!!
V praxi dáváme pˇrednost varianteˇ s blokem aneb jsou -li pochyby, používej závorky. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
9 / 40
ˇ pˇríkaz Podmínený
8. Ukázky neúplné podmínky Neúplný podmínká s vnoˇreným blokem obsahující podmínky.
if (x==5) a++; if (y==10) b++; else c++; else a--; Pak else odpovídá nejbližšímu nespárovanému if. if (x==5) { a++; if (y==10) { b++; } else { c++; } } else { a--; } ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
10 / 40
ˇ pˇríkaz Podmínený
9. Ternární operátor ? Tento operátor nazýváme ternárním, má tˇri argumenty. ˇ ˇ Umožnuje zapsat úplnou podmínku struˇcnejším, avšak méneˇ pˇrehledným, zpusobem. ˚
Vyraz? Prikaz1: Prikaz2; Je -li výraz vyhodnocen jako pravdivý, je proveden Prikaz1, v opaˇcném pˇrípadeˇ Prikaz2. Podmínku
if (a
(a
11 / 40
ˇ pˇríkaz Podmínený
10. Pˇríkaz switch ˇ ˇ Pˇríkaz switch pˇredstavuje pˇrepínaˇc, který umožní vetvení programu do více vetví. ˇ není omezen, muže Poˇcet vetví ˚ být libovolný. ˇ se muže V každé vetvi ˚ vyskytovat více pˇríkazu, ˚ pˇríkazy nemusí být uvedeny v bloku. switch(vyraz)
{ case konstanta1: Prikaz1; break; case konstanta2: Prikaz2; break; ... default PrikazX; } Za pˇríkazem switch výraz, jehož vyhodnocením musí vzniknout celoˇcíselná hodnota. ˇ pˇríkazu tvoˇrí náveští ˇ se syntaxí case konstanta, konstanta celoˇcíselná nebo Telo znaková. ˇ ˇ Za náveštím uvedeny pˇríkazy, které jsou konány v závislosti na hodnoteˇ náveští. ˇ ˇ Pokud není nalezeno odpovídající náveští, je vykonán kód nacházející se za náveštím default. ˇ default nepovinné. Náveští ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
12 / 40
ˇ pˇríkaz Podmínený
11. Pˇríkaz switch, ukázka ˇ se v pˇríkazu nesmí opakovat. Hodnota náveští ˇ ˇ pˇríkazu switch. Pˇríkaz break umožnuje pˇredˇcasné ukonˇcení vykonávání tela ˇ bez ohledu na Není -li uveden, dojde k vykonání všech následujících vetví ˇ hodnoty náveští. switch(znak) { case '1': a++; a*=; break; case '2': a--; a/=; break; default: a*=; break; } ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
13 / 40
Cykly
12. Pˇríkazy pro opakování ˇ Pˇríkazy pro opakování nazýváme iteraˇcními pˇríkazy, umožnují ˇ jeden nebo více pˇríkazu. opakovaneˇ provádet ˚ V praxi realizovány prostˇrednictvím cyklu. ˚ Patˇrí k cˇ asto používaným konstrukcím, vykytují se prakticky ve všech programovacích jazycích. ˇ ˇ cyklu na základeˇ hodnoty relaˇcního Opakování je provádeno v tele výrazu pˇredstavujícího podmínku. ˇ Podle typu vstupní podmínky delíme cykly do tˇrí kategorií: Cyklus s pˇredem neznámým poˇctem opakování: while. Cyklus s pˇredem známým poˇctem opakování: for. ˇ Cyklus s neznámým poˇctem opakování, který má probehnout alesponˇ jednou: do while. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
14 / 40
Cykly
13. Cyklus while Používán pˇrípadech, kdy poˇcet opakování není pˇredem znám. Vyhodnocení podmínky pˇred pruchodem ˚ cyklu. ˇ cyklu. Pokud je podmínka pravdivá, je provedeno telo
while (vyraz) telo cyklu; while (vyraz) { telo cyklu; } ˇ pˇríkazu nemusí probehnout ˇ Telo ani jednou, pokud je výraz napoprvé vyhodnocen jako false. ˇ Nekonecný cyklus ˇ cyklu musí být modifikována promenná ˇ ˇ V tele ovlivnující hodnotu výrazu, jinak by vznikl nekoneˇcný cyklus. ˇ pravdivostní hodnota Pozor na tautologie a kontradikce, u kterých se nemení relace. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
15 / 40
Cykly
14. Ukázka cyklu while
int cislo=10, f=1; while (cislo>1) //Opakuj, pokud je cislo >1 { f=f*cislo; cislo--;
//Vypocet faktorialu //Uprava hodnoty vstupni podminky
} System.out.println(cislo+"!="f);
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
16 / 40
Cykly
15. Cyklus for Používán v pˇrípadech kdy je známpoˇcet opakování (tj. jsou známy údaje o výchozí a koncové hodnoteˇ testovacího výrazu).
for (inicializacni_vyraz; testovaci_vyraz; zmenovy_vyraz) telo_cyklu for (inicializacni_vyraz; testovaci_vyraz; zmenovy_vyraz)
{ }
telo_cyklu
ˇ výraz: Inicializacní Je vykonán pouze jednou, a to ješteˇ pˇred vyhodnocením testovacího výrazu. Testovací výraz: ˇ cyklu. Urˇcuje, zda se má provést telo ˇ cyklu se provádí tak dlouho, dokud je testovací výraz vyhodnocen jako Telo pravdivý. ˇ Zmenový výraz: ˇ cyklu, používá se pro zmenu ˇ Vyhodnocen na konci cyklu po vykonání tela ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
17 / 40
Cykly
16. Varianty cyklu for ˇ Inicializaˇcní, testovací i zmenový výraz jsou nepovinné, nemusí být ˇ uvádeny. ˇ ˇ ˇ Hodnota promenné ve zmenovém cyklu se muže ˚ zvetšovat i zmenšovat. Deklarace s inicializací pˇrímo v hlaviˇcce cyklu for.
for (int i=0;i<10;i++) System.out.println(i); Deklarace mimo cyklus, inicializace v cyklu.
int i; for (i=0;i<10;i++) System.out.println(i); ˇ Deklarace a inicializace mimo cyklus, zmena hodnoty testovacího ˇ cyklu. výrazu v tele
int i=0; for (;i<10;i++) System.out.println(i++); //Nepouzivat ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
18 / 40
Cykly
17. Varianty cyklu for ˇ ˇ Cyklus s prázdným telem, souˇcástí zmenového výrazu i výkonný kód. int i=0; for (;i<10;System.out.println(i++); ˇ ˇ Deklarace a inicializace mimo cyklus, testovací i zmenový výraz v tele cyklu. Minimalistická variantu cyklu, ukonˇcení cyklu pˇríkaz break. int i=0; for (; ; ;) { if (i<10) System.out.println(i++); else break; } ˇ cyklu for, stˇredník na nísledující ˇrádce Prázdné telo for (int i=0;i<10;i++) ; ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.) 19 / 40
Cykly
18. Ukázka cyklu for Výpoˇcet s využitím dekrementace: int cislo=10, f=1; for (int i=cislo;i>1;f--) //Opakuj, pokud je i>1 { f=f*i; //Vypocet faktorialu } System.out.println(cislo+"!="f); Výpoˇcet s využitím inkrementace: int cislo=10, f=1; for (int i=2;i<=cislo;i++) //Opakuj, pokud je i<=cislo { f=f*i; //Vypocet faktorialu } System.out.println(cislo+"!="f); ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
20 / 40
Cykly
19. Cyklus do while ˇ kdy není známo kolikrát má cyklus probehnout ˇ Používá se v pˇrípade, ˇ by probehnout ˇ (ale mel alesponˇ jednou). ˇ cyklu. Podmínka testována až po vykonání tela
do telo_cyklu while testovaci_vyraz do { telo cyklu } while testovaci vyraz Cyklus probíhá, dokud je hodnota testovacího výrazu true. ˇ Pozor na vznik nekoneˇcného cyklu, hodnota zmenového výrazu musí ˇ ena. ˇ být uvnitˇr cyklu zmen ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
21 / 40
Cykly
20. Ukázka: výpoˇcet faktoriálu
int cislo=10, f=1; do { f=f*cislo; cislo--;
//Vypocet faktorialu //Uprava hodnoty vstupni podminky
} while (cislo>1) System.out.println(cislo+"!="f);
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
22 / 40
Cykly
21. Pˇríkaz break() ˇ ˇ tela ˇ cyklu. Umožnuje okamžiteˇ ukonˇcit provádení První varianta:
break; ˇ ˇ cyklu, v jehož tele ˇ je tento kód zapsán. Umožnuje “vyskoˇcit” z tela Pokraˇcování prvním pˇríkazem následujícím za cyklem. U vnoˇreného cyklu skok o 1 úrovenˇ výše. Druhá varianta:
break navesti; ˇ cyklu oznaˇceného náveštím. ˇ Ukonˇcení provádení ˇ U vnoˇreného cyklu opatˇreného náveštím skok o 1 úrovenˇ výše.
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
23 / 40
Cykly
22. Ukázka pˇríkazu break() ˇ End se dvema ˇ Deklarace náveští vnoˇrenými cykly for.
End: //Nazev navesti for (int i=0;i<10;i++) { for (int j=0;j<10;j++) { if (i==j+10) { System.out.println(i*j); break End; //Ukonceni cyklu v navesti End k=i+j; } } } ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
24 / 40
Cykly
23. Pˇríkaz continue() ˇ Slouží k pˇreskoˇcení zbývající cˇ ásti pˇríkazu˚ nacházejících se v tele cyklu a k pˇrechodu na další iteraci. První varianta: ˇ cyklu a skok na další iteraci. Vynechání všech pˇríkazu˚ v tele
continue; Druhá varianta: ˇ Pˇreskoˇcení cˇ ásti cyklu, která je oznaˇcena tímto náveštím. Tato konstrukce se v praxi pˇríliš cˇ asto nepoužívá.
continue navesti;
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
25 / 40
Cykly
24. Ukázka použití pˇríkazu continue for (int i=0;i<10;i++) { for (int j=0;j<10;j++) { if (i==j+10) { System.out.println(i*j); continue; k++; } } }
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
26 / 40
Cykly
25. Zásady pro práci s cykly ˇ mít pouze jednu ˇrídící promennou. ˇ Cyklus by mel ˇ ˇ být ovlivnována ˇ Hodnota ˇrídící promenné by nemela v cyklu. ˇ Rídící podmínku cyklu zapisovat v kladném tvaru. Vyvarovat se vzniku nekoneˇcných cyklu. ˚ Pˇríkaz continue nahrazovat konstrukcí if else (pˇrehlednost). Preference cyklu˚ while, for pˇred do while (pˇrehlednost). ˇ cyklu používat pouze na jednom míste. ˇ Pˇríkaz break v tele
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
27 / 40
Podprogramy
26. Procedury, funkce, metody ˇ Pˇredstavují samostatnou cˇ ást programu konající nejakou specializovanou funkci. ˇ mimo hlavní program. Umísteny ˇ z hlavního programu cˇ i jiného podprogramu. Mohou být opakovaneˇ spoušteny ˇ Tvoˇreny: procedurami, funkcemi, metodami (nekteré jazyky je nerozlišují). Výhoda použití: Zvyšují pˇrehlednost a zlepšují cˇ itelnost programu. ˇ programu. Urychlují vývoj a ladení ˇ výpoˇctu˚ (tj. nemusíme psát znovu celý kód, Možnost opakovaného provádení pouze zavoláme pˇríslušný podprogram). Volání podprogramu: ˚ Podprogram volány se seznamem parametru, ˚ kterým pˇredáváme hodnoty ˇ ˇ potˇrebné pro výpoˇcet, vetšinou vrací nejaký výsledek. Existují podprogramy, kterým nepˇredáváme žádné údaje, nebo naopak žádné výsledky nevrací. Procedura vs. funkce vs.metoda: Procedura nevrací výsledek, funkce ano. Metoda obdobou procedury/funkce v objektov eˇ orientovaném programování. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.) 28 / 40
Podprogramy
27. Funkce a její deklarace ˇ Tvoˇrena hlaviˇckou a telem. ˇ Hlavicka funkce: Obsahuje jméno funkce, typ návratové hodnoty, seznam formálních parametru. ˚ ˇ funkce: Telo Obsahuje výkonný kód funkce. ˇ by vyjadˇrovat její Jméno funkce zpravidla psáno malými písmeny, melo cˇ innost.
navratovy_typ jmeno_funkce(form_typ param1, form_typ param2,...) { //Telo funkce } ˇ V nekterých jazycích vytváˇren prototyp funkce: Popisuje rozhraní funkce, pˇredstavuje informace pro kompilátor. Tvoˇrí ji jméno funkce, návratový typ, seznam parametru˚ bez výkonného kódu. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
29 / 40
Podprogramy
28. Volání funkce ˇ funkce. Provede spuštení ˇ Volání funkce tvoˇreno zadáním jejího jména doplneného seznamem skuteˇcných parametru˚ (má -li je funkce).
jmeno_funkce(skut_param1, skut_param2,...); ˇ V nekterých jazycích musí deklarace funkce pˇredcházet jejímu volání, v jiných poˇradí nehraje roli. Forward deklarace: ˇ Tzv. pˇredbežná deklarace. ˇ jedné funkce volána jiná funkce, která ješteˇ nebyla deklarována. V tele ˇ Použití funkce ješteˇ pˇred jejím deklarací není bežným zpusobem ˚ možné (C++, Pascal), nutno použít forward deklaraci. Využití pˇri napˇr. pˇri tzv. nepˇrímé rekurzi.
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
30 / 40
Podprogramy
29. Formální a skuteˇcné parametry funkce ˇ Skutecné parametry: Jsou použity pˇri volání funkce. Jejich hodnoty resp. odkazy na neˇ pˇredávány formálním parametrum. ˚ Formální parametry: ˇ Lokální promenné, deklarovány v hlaviˇcce funkce. Vznikají v okamžiku volání funkce a zanikají pˇri ukonˇcení funkce. ˇ být stejného datového typu jako Formální parametry by mely parametry skuteˇcné. Nejsou -li stejného typu, provedena implicitní konverze. Dva zpusoby ˚ pˇredávání parametru: ˚ pˇredávání parametru˚ hodnotou, pˇredávání parametru˚ odkazem. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
31 / 40
Podprogramy
30. Návratová hodnota Pokud funkce nevrací žádnou hodnotu, je její návratový typ void. (C, Java) Má -li funkce návratovou hodnotu, musí obsahovat klíˇcové slovo return s uvedením hodnoty cˇ i výrazu, který bude navracet jako výsledek. Unreachable kód: Za klíˇcovým slovem return již nesmí následovat žádný kód. Kód byl by nedostupný =⇒ unreachable kód. double soucet (double a, double b) { return a+b; a=7; //Unreachable kod, neprovede se } Funkce v Javeˇ je schopna vrátit nejvýše jednu hodnotu. Toto omezení lze “obejít” pˇredáváním parametru˚ odkazem nebo pˇredat ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební a algoritmu kartografie, Pˇrírodov edecká fakulta UK.) 32 / 40 ˇ prvky do metod eˇ jako parametr další prom enné, kterých budou výsledky
Pˇredávání parametru˚ hodnotou a odkazem
31. Pˇredávání parametru˚ hodnotou Formální parametr pˇredstavuje kopii skuteˇcného parametru. ˇ Jakákoliv zmena hodnoty formálního parametru neovlivní hodnotu skuteˇcného parametru. Volající data nelze ve funkci “pˇrepsat”. ˇ u základních datových typu. Použití nejˇcasteji ˚ Pˇredávání hodnot skuteˇcných parametru˚ parametrum ˚ formálním je ˇ provádeno pˇri volání metody. ˇ tj. hodnoteˇ prvního formálního Hodnoty jsou pˇredávány postupne, parametru je pˇredána hodnota prvního skuteˇcného parametru, hodnoteˇ druhého formálního parametru hodnota druhého skuteˇcného parametru, atd...
form_param1=skut_param1; form_param2=skut_param2; ... ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
33 / 40
Pˇredávání parametru˚ hodnotou a odkazem
32. Ukázka pˇredávání parametru˚ hodnotou Funkce Pythagoras, formální parametry a,b
double Pythagoras (double a, double b) { return Math.sqrt(a*a+b*b); } Volání funkce:
c=Pythagoras(aa,bb); Pˇriˇrazení se pˇriˇrazení parametru: ˚
a=aa; b=bb;
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
34 / 40
Pˇredávání parametru˚ hodnotou a odkazem
33. Pˇredávání parametru˚ odkazem ˇ u odvozených datových typu. Použití nejˇcasteji ˚ Pˇri pˇredávání nevzniká kopie skuteˇcného parametru, ale kopie odkazu (pointeru) na skuteˇcný parametr. ˇ Formální i skuteˇcný parametr pak odkazují na stejnou promennou. ˇ V takovém pˇrípadeˇ zmena hodnoty formálního parametru uvnitˇr funkce ˇ hodnoty skuteˇcného parametru. zpusobí ˚ zmenu Možnost “pˇrepsání” hodnot volajících dat. Pˇredávání odkazem vs hodnotou: ˇ proces, pro kopii Pˇredávání hodnotou je technicky nároˇcnejší ˇ skuteˇcného parametru nutno alokovat pamet’. Pˇri práci s rozsáhlými datovými strukturami pˇredávání hodnotou ˇ a výpoˇcetní výklon. nevhodné, vysoké nároky na pamet’ ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
35 / 40
Pˇredávání parametru˚ hodnotou a odkazem
34. Ukázka pˇredávání odkazem, prohození slov Deklarace funkce:
void prohod (String s1, String s2) { String pom; pom=s1; //Prirazeni s1 do pom s1=s2; //Prirazeni s2 do s1 s2=pom; //Prirazeni pom do s2 } Deklarace skuteˇcných parametru: ˚
String slovo1=new String(Ahoj); String slovo2=new String(Cau); prohod(slovo1, slovo2); ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
36 / 40
Pˇredávání parametru˚ hodnotou a odkazem
ˇ 35. Pˇredávání odkazem, znázornení
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
37 / 40
Pˇredávání parametru˚ hodnotou a odkazem
ˇ 36. Pˇretežování funkcí Deklarace více funkcí stejného názvu, které se mohou lišit: (1) poˇctem argumentu, ˚ (2) typem argumentu, ˚ (3) poˇradím argumentu. ˚ ˇ Použití u funkcí provádejících stejné cˇ innosti, ale s ruznými ˚ typy dat.
double dist(double x1, double y1, double x2, double y2) { return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); } double dist(double dx, double dy) { return Math.sqrt(dx*dy+dy*dy); } Pokud zavoláme pˇretíženou funkci, kompilátor na základeˇ typu parametru, ˚ jejich poˇradí cˇ i poˇctu vybere “správnou” funkci.
dist(1.0,0.0,6.0,0.0); //Vyber funkci se 4 parametry dist(1,0,6,0); //Vyber funkci se 2 parametry ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
38 / 40
Rekurze
37. Rekurzivní funkce Rekurze je schopnost metody, datové struktury cˇ i objektu volat sebe sama nebo volat metodu, datovou strukturu cˇ i objekt podobného typu. Problémy ˇrešitelné rekurzí oznaˇceny jako dekomponovatelné, mohou být rozloženy na podproblémy stejného nebo podobného typu nad menší množinou dat. ˇ Nekonecná rekurze: Rekurzivní algoritmus musí obsahovat podmínku, pˇri které dojde k jejímu ukonˇcení (aby nepokraˇcovala do nekoneˇcna). V urˇcitém místeˇ tedy musí dojít k takovému doˇrešení problému, které nebude rekurzivní. Princip rekurze: Pˇri každém novém volání dochází k vytvoˇrení nových lokálních ˇ promenných (tato vlastnost je souˇcasneˇ nevýhodou rekurze). ˇ eˇ dopoˇcítávány hodnoty z pˇredchozích volání metod. Poté jsou zpetn Alokace na zásobníku. ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.) 39 / 40
Rekurze
38. Ukázka rekurze
Výpoˇcet faktoriálu rekurzí:
int fakt(int n) { if (n>1) return n*fakt(n-1); else return 1; } Volání funkce:
int cislo=10; int faktorial=fakt(cislo);
ˇ Tomáš Bayer |
[email protected] (Katedra aplikované Základní geoinformatiky stavební prvky a algoritmu kartografie, Pˇrírodovedecká fakulta UK.)
40 / 40