předchozí lekce (1.15) | obsah kurzu | následující lekce (1.17) |
Podprogramy jsou volány z hlavního programu, vykonají příkazy zadané ve svém
těle a po jejím ukončení předají vykonávání programu zpět do hlavního programu.
Podprogramy jsou v programu označeny klíčovým slovem Sub, za kterým následuje
jméno podprogramu s případným uvedením předávaných parametrů. Konec podprogramu
je vyznačen příkazem End Sub. Každý podprogram musí být pojmenován. V programu
se přitom nesmí vyskytovat více podprogramů se stejným jménem. Není také možné
uvádět jména, která jsou použita systémem. Následuje příklad programu, ve kterém je
použit podprogram:
Sub Nadpis
Writeln("*************************")
Writeln("* počítá systém BONANZA *")
Writeln("*************************")
End Sub
Sub Main()
ConsoleShow
ConsoleClear
a = 20
b = 10
Call nadpis
Writeln("součet :"+IntToStr(a+b))
Call nadpis
Writeln("rozdíl :"+IntToStr(a-b))
Call nadpis
Writeln("násobek:"+IntToStr(a*b))
End Sub
V programu jsme definovali podprogram se jménem Nadpis, který vždy mezi výpočty
vypíše tři řádky nadpisu. V hlavní proceduře Main již potom stačí zadat volání
procedury Nadpis. Systém při každém volání procedury vypíše tři řádky nadpisu. Tím
jsme ušetřili místo a program je také přehlednější.
Jistě budete souhlasit s tím, že možnost používání podprogramů je zajímavá vlastnost
systému, že by ale byla ještě zajímavější, pokud by dokázal podprogram pracovat s
různými vstupními hodnotami. To je také možné, musíme však ve volání podprogramu i
v jeho deklaraci uvést seznam parametrů a upravit příkazy uvnitř podprogramu tak,
aby dokázal s proměnnými parametry pracovat. Pokud byste například potřebovali
nakreslit do grafického výstupního okna na zadanou pozici čtverec s délkou hrany 20
bodů, mohli byste použít následující příklad:
'procedura pro kresleni čtverce
Sub Ctverec(x, y)
ImageRectangle x, y, x+20, y+20
End Sub
'hlavní program
Sub Main()
ImageShow
ImageInit 100,100
ImageBrushColor(clYellow)
ImageRectangle 5, 5, 95, 95
ImageBrushColor(clRed)
For k = 10 to 70
If (k=10) or (k=40) or (k=70) then
Call Ctverec(10, k)
Call Ctverec(40, k)
Call Ctverec(70, k)
End If
Next
End Sub
Podprogram Ctverec je volán se dvěmi parametry uvedenými v závorce,
oddělenými čárkou. Podprogram má ve své definici deklarovány proměnné x a y, které
se dále v proceduře používají. Do uvedených proměnných se převedou hodnoty zadané
ve volání podprogramu. Podprogram potom se zadanými hodnotami pracuje. Tak je
umožněno předávat podprogramu ke zpracování vstupní hodnoty.
Pokud má podprogram pracovat s předávanými parametry, je nutné v deklaraci podprogramu uvést za jejím jménem v závorce seznam použitých proměnných. Počet deklarovaných proměnných v podprogramu musí přitom vždy odpovídat počtu předávaných parametrů ve volání podprogramu. Parametry jsou od sebe odděleny čárkou.
Zkuste nyní upravit podprogram Ctverec i její volání tak, abyste mohli zadávat ve volání podprogramu i délku strany čtverce. Musíte proto přidat do volání podprogramu další parametr. Stejně tak budete muset přidat parametr do deklarace podprogramu. Parametr potom použijete pro zadání délky hrany čtverce.
Při programování podprogramů si musíte dát pozor na to, abyste v rámci podprogramu nepožadovali provedení stejného podprogramu. Takovým procedurám se říká rekurzivní volání. Rekurze nejsou v jazyce BONANZA umožněny.
Pomocí deklarace podprogramů dosáhnete toho, že si můžete definovat své vlastní příkazy. Je přitom možné volanému podprogramu zadávat předávané parametry. Není ale možné, aby podprogram vracel zpět výsledek provedení podprogramu. To vám umožní až funkce, které budou probrány v následující lekci.
předchozí lekce (1.15) | obsah kurzu | následující lekce (1.17) |