Lekce 1.16
Deklarace a pou₧φvßnφ podprogram∙


p°edchozφ lekce (1.15) obsah kurzu nßsledujφcφ lekce (1.17)

Doposud jsme v naÜich programech pou₧φvali pouze p°φkazy zabudovanΘ v systΘmu. Nynφ si ale p°edvedeme, jak si m∙₧eme naprogramovat vlastnφ p°φkazy. UrΦit∞ jste se ji₧ setkali s tφm, ₧e pokud byste seskupili n∞kolik °ßdk∙ programu, kterΘ se v uvedenΘ sestav∞ v programu n∞kolikrßt opakujφ do jednoho, byl by program p°ehledn∞jÜφ a kratÜφ. Na to m∙₧ete pou₧φt procedury, kter²m se takΘ n∞kdy °φkß podprogramy.

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)

OZOGAN, 1 Mßje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz