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) |