1 / 18

6. Algoritmy a programovanie v jazyku Pascal Procedúry a funkcie

6. Algoritmy a programovanie v jazyku Pascal Procedúry a funkcie. Inštitút manažmentu a cestovného ruchu. Jednotky. Rekurzia. Procedúry. Procedúry a funkcie.

grant
Download Presentation

6. Algoritmy a programovanie v jazyku Pascal Procedúry a funkcie

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 6.Algoritmy a programovanie v jazyku PascalProcedúry a funkcie Inštitút manažmentu a cestovného ruchu Jednotky Rekurzia Procedúry

  2. Procedúry a funkcie Je pravdou, že ak by sme niektoré programy nerozčlenili, tak by sme sa v nich nijako nevyznali. Pozrieme sa na to, ako zvýšiť prehľadnosť a zrozumiteľnosť programu. Najprv niekoľko zásad, ako zvýšiť prehľadnosť programu: • Používajte prázdne riadky (oddeľujte nimi logicky nezávislé celky) • Používajte komentáre na začiatku programu (ako sa program ovláda a čo bymal robiť) • Používajte komentáre (Prečo je tu to a to funguje tamto…) • Aspoň zhruba si rozmyslite, ako má program vyzerať, skôr než sadnete k počítaču • Využívajteprocedúry a funkcie

  3. Procedúry Najprv sa pozrieme na procedúry. Definujú sa nasledovne: procedure NázovProcedúry(Parametre); Definícia a deklarácia; begin Zložený príkaz; end; Definície a deklarácie sú rovnaké ako v bežnom programe, s výnimkou, že nesmieme používať uses. A nemali by sme definovať ani ďalšie procedúry (stráca sa prehľadnosť, kvôli ktorej práve procedúry zavádzame). V programe potom používame nasledovné premenné: – miestna deklarácia (v procedúre) – Ak potrebuje určitý dátový typ iba určitá procedúra, je lepšie ho definovať priamo v nej. Premenné sa potom vyskytujú iba v tele (medzi beginom a endom) procedúry a sú prístupné iba v nej samotnej. – globálna deklarácia (v programe) – Premenná je potom dostupná aj v procedúre aj v programe.

  4. Procedúry – Vzor Najprv sa pozrieme na procedúry. Definujú sa nasledovne: Program Ukazka; var z1,z2 :char; {Globálna deklarácia} Procedure PrehodZnaky; var pom : char; {Lokálna deklarácia} begin pom := z1;z1:= z2;z2 := pom; end; begin Write('Zadaj dva znaky'); readln(z1,z2); Writeln(z1,' ',z2); Prehodznaky; Writeln(z1,' ',z2); end.

  5. Funkcie Funkcie sa definujú nasledovne: function Názov(Parametre):VýslednýTyp; Deklarácie a definície begin Zložený príkaz; end. O funkciách platí všetko, čo bolo povedané o procedúrach. V tele samotnej funkcie sa ale musí použiť priradzovací príkaz NázovFunkcie:=NejakáHodnota; Pretože to je výsledok funkcie. Jeho hodnota sa už ďalej nesmie meniť. Pred i po priradení ale môžu prebiehať akékoľvek príkazy, ktoré s výsledkom funkcie nemajú nič spoločné.

  6. Formálne a skutočné parametre – Vzory Program, ktorý využíva procedúry alebo funkcie, môže byť napísaný dvojako. Ukážeme si to na príklade: program Objem1; var polomer,v : real; function ObjemV: real; begin ObjemV:= pi*sqr(polomer)*v; end; begin Writeln('Zadaj polomer a vysku'); readln(polomer,v); Writeln(ObjemV); end. program Objem2; var polomer, vyska : real; function ObjemV (Polomer,v: real) : real; begin objemV := pi*sqr(polomer)*v; end; begin Writeln('Zadaj polomer a vysku valca'); readln(polomer, v); Writeln(objemV(polomer,vyska)); Writeln(ObjemV(polomer*2,vyska));end.

  7. Formálne a skutočné parametre Druhý spôsob zápisu sa ukazuje ako jednoduchší, keď je potrebné použiť rovnakú procedúru pre rôzne polomery valca. V tomto prípade sa neprepisuje procedúra, prípadne sa nemusí prepočítavať premenná vopred, ale stačí uviesť správnu hodnotu premennej pri volaní procedúry. Parametre v mieste deklarácie funkcie označujeme ako predpísané (formálne) a v mieste volania funkcie ako skutočnéparametre. Ich názvy a nemusia absolútne zhodovať.

  8. Parametre nahradené hodnotou a odkazom Ak rozlišujeme predpísané a skutočné parametre, musíme tiež rozlišovať medzi parametrami nahradenými hodnotou a nahradenými odkazom. Rozdiel si ukážeme na dvoch programoch, vrátime sa k prvému ukážkovému programu. Pri prvom programe budú hodnoty prehodené vo vnútri procedúry, ale nebudú späť „exportované“ do nadradeného programu. Parameter, ktorý je nahradzovaný hodnotou sa chová ako miestny. Takže vo výpise hodnôt z1, z2 sa neukáže prehodenie poradia. Problém odstránime jednoducho, pri deklarácii procedúry napíšeme vyhradené slovo var:

  9. Parametre nahradené hodnotou a odkazom Program Ukazka3; var z1,z2 :char; Procedure PrehodZnak(x1,x2 : char); var pom : char; begin pom := x1; x1:= x2; x2 := pom; end; begin Write('Zadaj dva znaky'); readln(z1,z2); Writeln(z1,' ',z2); Prehodznaky; Writeln(z1,' ',z2); end. Program Ukazka4; var z1,z2 :char; Procedure PrehodZnak(var x1,x2: char); var pom : char; begin pom := z1; z1:= z2; z2 := pom; end; begin Write('Zadaj dva znaky'); readln(z1,z2); Writeln(z1,' ',z2); Prehodznaky; Writeln(z1,' ',z2); end.

  10. Parametre nahradené hodnotou a odkazom Takýto parameter nahradzovaný odkazom sa bude chovať inak. Parametre procedúry už predstavujú konkrétnu hodnotu, tú, ktorú sme uviedli v zozname skutočných parametrov. Zmena hodnoty uvedená vo vnútri procedúry bude platiť aj po návrate do hlavného programu. Pre tento typ nahradenia sa rozhodujeme vždy v týchto prípadoch: 1.Parameter nahradzovaný odkazom použijeme vždy pre každú výstupnú hodnotu. Aby výsledok výpočtu v procedúre bol „importovaný“ aj do nadriadeného programu. 2. Premenné dátového typu súbor musia byť vždy deklarované ako parametre nahradzované odkazom. 3. Pri práci s veľkými datovými štruktúrami využívame parametre nahradzované odkazom, pretože sú menej náročnejšie na pamäť.

  11. Procedúry a funkcie – príklady Príklad 51. Zostavte jednoduchý program na prehodenie dvoch znakov, ktorý bude obsahovať procedúru (z prednášky). Príklad 52A,B. Zostavte program na výpočet objemu s použitím formálnych a skutočných parametrov, ktorý bude obsahovať procedúru (z prednášky). Príklad 53A,B. Zostavte dva programy na výmenu znakov, v ktorých porovnáte nahradenie hodnotou a odkazom (z prednášky) Príklad 54. Zostavte program na sčítanie matíc, pomocou procedúr.

  12. Rekurzia a rekurzívne programy Pri procedúrach a funkciách sa veľmi často sa používa rekurzia. Ide prípady, kedy funkcia alebo procedúra sa priamo alebo nepriamo (ak ide o cyklický odkaz viacerých podrogramov) odkazuje sama na seba. Najprv ukážka funkcie, typickým príkladompriamej rekurzie sú faktorály: function Factorial(N:byte):longint; begin if N >0 then Factorial:= N * Factorial(N-1) else Factorial:=1; end; Najdôležitejšie pri využívaní tohto algoritmu je nezabudnúť ukončiť cyklus!

  13. Rekurzia a rekurzívne programy Problém ale nastáva, ak máme dve procedúry, z ktorých prvá využíva druhú a naopak, teda keď ide o nepriamu rekurziu. V Pascale sa totiž môže používať iba to, čo sme si dopredu zadefinovali. Ako to vyriešiť? Oznámime existenciu danej procedúry pomocou  procedure NázovA(parametre); forward; Potom dodefinujeme procedúru procedure NázovB (v ktorej používame NázovA). A nakoniec uvedieme samotné telo NázvuB (procedure NázovA; (tu už nemusíme vypisovať parametre...)

  14. Rekurzia a rekurzívne programy nepriama rekurzia

  15. Rekurzia a rekurzívne programy – príklady Príklad 55. Zostavte príklad na výpočet faktoriálu tak, aby ste použili priamu rekurziu (z prednášky) Príklad 56. Zostavte príklad na nepriamu rekurziu.

  16. Jednotky Niektoré funkcie a procedúry sú natoľko časté, že sa vyskytujú vo viacerých programoch. Aby nás neustále vypisovanie neobťažovalo, je lepšie ich umiestniť do zvláštneho súboru (Tento spôsob sa využíva vtedy, ak je funkcií veľa a výsledný program by bol neprehľadný). Takéto procedúry sa umiestňujú do tzv. jednotiek (units). Jednotky potom majú nasledovnú štruktúru: unit Názov; interface  Definície a Deklarácie; implementation  Definície a Deklarácie; begin  Inicializačná Časť; end.

  17. Jednotky 1. Unit musíme uložiť do rovnomenného súboru (Názov.pas), inak by sme ju nemohli využiť. Ak používame unit-u v inom program, je potrebne uložiť ich do jedného adresára a nastaviť cestu ChangeDirectory. 2. V časti interface definujeme to, čo by malo byť prístupné i mimo unitu (procedúry, funkcie, konštanty, typy...). U procedúr a funkcií uvádzame iba hlavičku (úplné). 3. V časti implementation potom definujeme to, čo potrebujeme iba pre potreby danej unity (pomocné typy, konštanty, premenné,...) Ďalej potom dodefinujeme telo funkcie alebo procedúry (tu stačí písať skrátenú hlavičku - bez parametrov a výsledného typu);

  18. Jednotky 4. V Inicializačnej časti potom uložíme príkazy, ktoré sa vykonajú, keď jednotku načítame do pamäte (ak pracujeme s jednotkou, ktorá využíva grafiku, bolo by dobré zmazať obrazovku a nastaviť grafický režim....). Ak program neobsahuje inicializačnú časť, môžeme begin vynechať (ale end. zostane) Príklad 47. Vytvorte jednotku v ktorej zadefinujete procedúry pre prácu s komplexnými číslami

More Related