Umíte pascalsky - 11.lekce ... |
Umíte pascalsky? 11.lekce |
Vytisknout |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Procedury s parametry Používáme tehdy, když potřebujeme několikrát provádět týž algoritmus, ale pokaždé pro jiné proměnné, jiné objekty. Údajům, které se mají při různých provedeních procedury měnit, říkáme parametry procedury. Parametry, s kterými se má procedure skutečně provádět, se používají až při volání procedury a nazývají se skutečné parametry. V okamžiku deklarace procedury skutečné parametry neznáme a tělo procedury tedy píšeme s použitím tzv. formálních parametrů. Je třeba znát jejich počet a některé jejich vlastnosti, které uvedeme do specifikace parametrů a způsob náhrady formálních parametrů skutečnými. Tato náhrada může být hodnotou nebo odkazem ( existují další možnosti jako schéma konformního pole, procedurální a funkční parametry - snad někdy příště). Náhrada hodnotou - formání parametr představuje v těle procedury lokální proměnnou, které se na začátku provádění procedury přiřadí hodnota skutečného parametru. Hodnoty takto do procedury vnášíme, ale nelze vyvážet, hodnota skutečného parametru se vně procedury nezmění. Používáme tedy pro vstupní hodnoty procedur. Náhrada odkazem (referencí) - formální parametr je nahražen v těle procedury globální proměnnou, která je udána skutečným parametrem. Tuto proměnnou můžeme aktivně využívat a její změny jsou platné nejen v proceduře, ale i mimo ni. Takto hodnoty z procedury vyvážíme - používáme pro výstupní hodnoty procedur. Lze použít i pro vstupní hodnoty, ale změna hodnoty v těle procedury se přenaší i mimo tuto proceduru. Deklarace procedury s parametry se liší od deklarace procedury bez parametrů pouze hlavičkou: procedure Jméno_procedury ( specifikace_form_parametru1 ; specifikace_form_parametru2 ; specifikace_form_parametru3 ); Specifikaci formálního parametru se liší podle způsobu náhrady. Specifikace formálního parametru nahrazovaného hodnotou má tvar: jmeno_parametru : typ parametru; Specifikace formálního parametru nahrazovaného odkazem (referencí) má tvar: var jmeno_parametru : typ parametru; Příklad: Pocitej ( cislo:integer ; koeficient:real ); procedura Pocitej má dva vstupní parametry cislo a koeficient Ukaz ( co:char ; var kde:integer ): procedura Ukaz má vstupní parametr co a výstupní kde Volání procedury - příkaz procedury - se skládá ze jména procedury a seznamu skutečných parametrů: Jméno_procedury ( skutečný_parametr1 ; skutečný_parametr2 ; skutečný_parametr3 ); Příklad: Ukážeme si deklaraci procedury (formální parametr nahrazovaný hodnotou - vstupní parametr) pro nakreslení čáry (z písmen x) zadané délky a její použití pro nakreslení šipky složené ze tří čar dvou zadaných délek. xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxx
V 8.lekci jsme si ukazovali proceduru Vymena bez parametrů. Ta měla velkou nevýhodu v tom, že dokázala vyměnit pouze proměnné prvni a druha. Ukážeme si deklaraci a vyvolání procedury Lepsi_vymena, která umí opakovaně vyměnit různé proměnné - s využitím parametru nahrazovaného odkazem. Příklad: Sestavte program Nejvetsi_na_konec, který po zadání tří celých čísel největší z nich pomocí dvou porovnání a eventuálních výměn přemístí na konec. Myšlenka (hrubý algoritmus): Načteme tři čísla Je-li první větší než druhé, vyměníme je Je-li druhé větší než třetí, vyměníme je Vytiskneme
Příklad1: Máme k disposici pětikoruny, dvoukoruny a koruny. Sestavte program, který opakovaně podle volby uživatele umožňuje zadat částku (v celých korunách), zjistit počet pětikorun, dvoukorun a korun na její vyplacení a celkový počet mincí. Řešte užitím procedur s parametry nahrazovanými odkazem. Myšlenka (hrubý algoritmus): Úlohu můžeme rozložit na tři podúlohy: Nacteni; (načtení částky) Na_drobne; (zjištění počtu mincí) Celkem_minci; (zjištění celkového počtu mincí) které nadeklarujeme formou procedur a pak se budou opakovaně vyvolávat podle volby uživatele v hlavním programu: opakuj nabídka činnpostí výběr činnosti provedení zvolené činností (Nacteni , Na_drobne , Celkem_minci) Výsledný program může vypadat takto:
Domácí úkol: Sestavte program Delitele, který opakovaně podle volby uživatele umožňuje zadat přirozené číslo (procedura s parametrem Nacti), určit dolní a horní mez (od - do) pro hledání dělitelů zadaného čísla (procedura Zadej_meze s parametry) a napsat všechny dělitele zadaného čísla v určených mezích (procedura Delitele_cisla s parametry). On-line účast na řešení úkolu
Pomocí volby Řešit můžete (po přihlášení) odeslat vaše řešení domácího úkolu (každý úkol smíte řešit jen jednou). Volbou Hodnocení si přečtete hodnocení a komentář od vyučujícího. Dotaz nebo připomínku můžete opakovaně zasílat pomocí tlačítka Dotazy, Komunikace (na levém okraji) zobrazuje příklad možné komunikace s vyučujícím. |