

| návštěv dnes: | 29 |
| návštěv včera: | 59 |
| návštěv za měsíc: | 515 |
| návštěv celkem: | 17819 |
| 16 procedury a funkce |
|
|
| Napsal uživatel Administrator |
| Čtvrtek, 29 Říjen 2009 13:58 |
|
Procedury a funkce, aneb jak si usnadnit práci 1) Procedury Nejprve několik přehledných zásad 1) Používejte prázdné řádky (oddělujte jimi logicky nezávislé celky) Procedury Procedura se definuje takto: procedure NázevProcedury(Parametry); procedure Něco; program StejnyNazev; procedure Tudle; begin 1) Parametry volané hodnotou Máme-li tedy procedure Naskoc(A:integer); je jedno, použijeme-li Naskoc(2), nebo třeba Naskoc(D), kde D je libovolná proměnná typu Integer. Protože nás zajímá jen hodnota, je jasné, že změníme-li obsah parametru uvnitř procedury, navenek se to neprojeví. Parametry volané odkazem se definují takto var Název : Typ Pochopitelně, že typ je znám dopředu. Na místo parametrů volaných odkazem lze dosadit pouze proměnnou. Navíc změna hodnoty uvnitř procedury bude patrná i vně, v samotném programu. Parametry konstantní se definují takto const Název : Typ Překladač se k nim chová jako ke skutečným konstantám. (Místo nich můžeme použít obou předchozích typů. Pokud nikde nebudeme měnit hodnotu parametru, je výsledek stejný. Jsou-li ale použity konstantní parametry, je výsledná procedura o něco málo rychlejší.) Parametry bez udaného typu lze volat pouze odkazem či jako konstantní. My se jim zatím vyhneme. Více o nich až v lekci o typových změnách a kouzlech s proměnnými. Můžeme mít tedy třeba takovouto proceduru: Existuje několik typů proměnných, které jdou používat pouze jako parametry - jedná se o OpenString (Řetězec bez udané délky) a array (pole bez udané délky). Použití je takovéto: Problém ovšem nastává, máme-li dvě procedury, z nichž první využívá druhou a obráceně. V Pascalu se totiž smí používat jen to, co jsme již předem nadefinovali. Jak z toho ven? Sdělíme o existenci dané procedury pomocí procedure NázevA(parametry);forward; Poté dodefinujeme proceduru NázevB (ve které používáme NázevA). A nakonec uvedeme samotné tělo procesdury s názvem NázevA (procedure NázevA; {už nemusíme vypisovat parametry...}) procedure NicNedela(A:integer);forward; Funkce Funkce se definují takto function Název(Parametry):VýslednýTyp; ... Výsledný typ nesmí být vytvořen uživatelem, lze použít pouze standardní pascalovské typy. Následují deklarace a definice a nakonec samotné tělo. O funkcích platí vše, co bylo řečeno o procedurách (typy parametrů ... direktiva forward). V těle samotné funkce se musí použít přiřazovací příkaz NázevFunkce:=NějakáHodnota; Poslední přiřazení dá výsledek funkce (Je ovšem krajně neetické použít více jak jedno takové přiřazení). Před i po mohou probíhat další příkazy, ty by měly přímo souviset s danou funkcí. Platí však, že funkce by měla skončit, jakmile známe výsledek. Velice často se používá rekurze. Napište program, který vypočte s využitím známých vzorců pomocí rekurze kombinační číslo ( (n nad k) = (n-1 nad k) + (n-1 nad k-1)...). Příslušné vzorce si vyhledejte (programátor si musí umět sám najít potřebné informace) a nezapomeňte, že rekurze musí někdy skončit. Unity Některé funkce a procedury jsou natolik obecné, že se vyskytují ve více programech. Aby nás jejich neustále vypisování neobtěžovalo, je lepší umístit je do zvláštního souboru. (Tento způsob se také využívá tehdy, jestliže máme funkcí moc a výsledný program by byl velice dlouhý a nepřehledný). Takovéto procedury a funkce se umisťují do tzv. jednotek (units), které vypadají takto: unit Název; Unit musíme uložit do stejnojmenného souboru (Název.pas), jinak nepůjde využít. V části interface definujeme to, co by mělo být zjevné i mimo naší unitu (procedury, funkce, konstanty, typy...). U procedur a funkcí uvádíme pouze hlavičky (úplné) V části implementation pak definujeme to, co potřebujeme pouze pro potřeby dané unity (pomocné funkce, typy, konstanty, proměnné,...) Dále zde pak dodefinujeme těla funkcí z interface(zde stačí psát zkrácenou hlavičku - bez parametrů a výsledného typu). Je ovšem lepší psát hlavičku úplnou (implementation je pak přehlednější), musíme ale dát pozor, abychom uvedli hlavičky přesně ve stejném tvaru jako v sekci interface. Příklad - jednotka pro práci s komplexními čísly (pro ilustraci zkrácené hlavičky) unit CPLX; implementation procedure Znasob; procedure Del; end. Jednotky mohou obsahovat v sekci uses další jednotky. Pokud by dvě jednotky odkazovaly na sebe navzájem, přesuneme v jedné z nich sekci uses až do oddílu implementation. To pro dnešek stačí. Zkuste si napsat vlastní jednotku (libovolnou) a využít ji v některém ze svých programů. Pro ty otrlejší - napište jednotku pro práci s dynamickým seznamem pracovníků. |
| Aktualizováno Čtvrtek, 29 Říjen 2009 14:07 |


Založeno na Joomla!. Designed by: Free Joomla 1.5 Template, dns. Valid XHTML and CSS.