10-маъруза: Процедура-функцияни эълон =илиш. Функцияга мурожаат =илиш ва ундан фойдаланиш.
Щажми катта ва мураккаб дастурларни ишлаб чи=ишда, табиийки катта =ийинчиликларга дуч келинади. Катта, комплекс дастурларни зарур муддатда яратишга битта дастурчининг ва=ти етмайди. Бундай щолларда, яъни мущим ащамиятга эга былган ва =ис=а муддатларда яратилиш керак былган дастурларни ишлаб чи=иш учун дастурчиларнинг катта гурущини жалб этишга ты\ри келади. Бундай, ягона дастурни яратишдаги параллел иш олиб боришда процедура ва функцияларнинг роли жуда катта былади. Бажарилиши керак былган ишни муста=ил былимларга ажратилиб, щар бир муста=ил иш алощида дастурланиб, кейинчалик улар ягона - асосий дастурга бирлаштирилади.
Асосий дастурда ишлатилувчи ызгарувчилар ва процедура параметрларини =андай танлаб олиш керак деган муаммо, бажариладиган ишнинг энг о\ир =исмларидан бири былиб =олади. Агар уларни бир-бирларига бо\лаб юборилса, у щолда асосий дастурдаги бирор ызгарувчига киритилган ызгартириш, процедурада ишлатилган ва шу ызгарувчига бо\ли= барча ишларни =айтадан тащлил =илиб, текшириб чи=ишга олиб келади. Бундай чалкаш ва о\ир ишни бажаришнинг =ийинлиги дастур тузишда параллел, бир нечта дастурчининг иш олиб боришига щала=ит беради.
Шунинг учун, процедура ва функцияларни ёзишда щар бир дастурга ызи ечаётган масалага мувофи= щолда, турли хил ички ызгарувчилар, дастурли объектлар ызгарувчиларининг турли =ийматларини танлаб олиш щу=у=и берилади. Хаттоки, битта ызгарувчини турли хил вазифаларда ишлатса щам былади. Visual Basic тилида бундай масалани щал =илиш учун локаллаштириш принципи ишлаб чи=илган, яъни процедура ёки функцияда ишлатилган ызгарувчи шу процедура ёки функциянинг таъсир доирасида (ичида) гина ыз =ийматини са=лаб =олади. Процедура ва функцияларнинг ичида ани=ланиб, =ийматланган ызгарувчиларни локал (ички) ызгарувчилар деб аталади. Таш=арида, яъни асосий дастурда киритилган ызгарувчилар эса умуман олганда дастурнинг ихтиёрий жойида ыз =ийматини са=лаб =ола олади. Бу ызгарувчиларни глобал (таш=и) ызгарувчилар деб аталади.
+уйидаги мисолда локаллаштириш принципи я==ол кызга ташланади:
Const n = 1
Dim t, x As String
Private Sub p(x, y As Double)
Dim n As Double
n = x + t
t = y
MsgBox (Str(n) + " " + Str(t) + " " + Str(x))
End Sub
Private Sub Command1_Click()
t = n / 2
x = "+"
Call p(n, 0.8)
MsgBox (Str(n) + " " + Str(t) + " " + x)
End Sub
бу ерда t – асосий дастурнинг глобал ызгарувчиси;
x, y – Р процедурасининг формал параметрлар;
n – P процедурадаги локал ызгарувчи.
Математика курсидан функция тушунчаси бизга яхши таниш былиб, унинг ёрдамида функция ва аргумент ыртасидаги бо\ли=лик ани=ланади. Visual Basic тилида щам функция тушунчаси киритилган былиб, уни шартли равишда икки турга ажратсак былади: стандарт функциялар ва дастурчи томонидан ани=ланган процедура - функциялар. Стандарт функциялар щар бир алгоритмик тил учун ани=ланиб, амалда кып учраб турувчи функцияларнинг =ийматларини щисоблаб беришга мылжалланган. Масалан, Sin(х), Cos(х), Exp(х), Abs(х), sqr(х) ва щ.к.
Худди cтандарт функциялар каби дастурчи щам ызи учун зарур, муста=ил дастур объектларини функциялар кыринишида ани=лаб, ундан керакли пайтда фойдаланиши мумкин.
Функция Visual Basic тилида =уйидаги структура быйича ани=ланади:
[Private][Public][Static] Function процНоми (Параметрлар) [as type]
операторлар
End Function
Ю=орида эслатиб ытганимиздек, функциялар щам процедуралар каби муста=ил дастурлар щисобланиб, асосий дастур ор=али бош=арилади ва худди асосий дастур ва процедурага ыхшаш cтруктурада ёзилади.
Процедура учун айтилган гапларнинг деярли барчаси функция учун щам ыринлидир. Функциянинг процедурадан асосий фар=и =уйидагилардир:
функция cарлавщаси бош=ача ани=ланади;
функциянинг иши давомида олинадиган натижа функциянинг исмига ызлаштирилади, яъни функциянинг тана =исмида албатта, функция исмига мос типли =иймат ызлаштирилган былиши керак;
функциядан асосий дастурга унинг исми ор=али биттагина =иймат берилади.
Функцияга мурожат щам худди процедурадаги каби амалга оширилади, лекин функциянинг мос типли ифодада =атнашиши каби =ышимча имконияти мавжуд.
Энди функцияни ани=лаш ва унга мурожат =илишни тыли=ро= ырганиш учун =уйидаги мисолни кыриб чи=амиз:
Мисол: f(n) n! (n! 1 * 2 * 3 * ...* n - факториал) функциядан фойдаланиб,
- ифодани щисоблашни ташкил =илинг:
Dim k, i As Integer
Dim m As Integer
Dim y As Double
Function Fact(n As Integer) As Integer
Dim p As Integer
Dim j As Integer
j = 1
For p = 1 To n
j = j * p
Next p
Fact = j
End Function
Private Sub Command1_Click()
k = Val(Text1.Text)
m = Val(Text2.Text)
y = (Fact(2) + Fact(3)) / (Fact(5) + Fact(3)) * Fact(k + 1) / Fact(m)
MsgBox (Str(y))
End Sub
Функцияларни ани=лашда доим шундай щаракат =илиш лозимки, унинг тана =исмида формал параметрлар ва функцияни ани=лаш учун зарур былган локал ызгарувчиларгина =атнашсин. Дастурнинг глобал ызгарувчисига иложи борича процедура ёки функция ичидан туриб =иймат бермаслик керак, акс щолда дастур хато натижа бериши мумкин.
Рекурсив функциялар
Visual Basic тилида процедура – функциялар билан ишлашда, функцияларнинг рекурсивлик щоссасидан фойдаланиш имконияти яратилган.
Рекурсия тушунчасига мисол =илиб оддий факториал щисоблашни келтириш мумкин:
бу ерда кыриниб турибдики n! =иймати (n-1)! ор=али ани=ланаяпти, яъни рекурсия дегани ызи ор=али ызини ани=лаш маъносини англатади.
Visual Basic тили щам функцияларни рекурсив ани=лаш имкониятини беради. Функцияни рекурсив ани=лаш унинг тана =исмида ызига - ызи мурожат =илиш ор=али амалга оширилади.
Ю=оридаги факториал щисоблашни рекурсив функциялар ор=али амалга оширайлик:
Dim n As Integer
Dim y As Integer
Function Fact(m As Integer) As Integer
Dim k As Integer
If m = 0 Then Fact = 1 Else Fact = Fact(m - 1) * m
End Function
Private Sub Command1_Click()
n = Val(Text1.Text)
y = Fact(n)
MsgBox (Str(y))
End Sub
Функцияларни рекурсив ани=лаш =ис=а ва тушунарли тилда былади, рекурсив эмас ани=лаш эса узо= ва функцияни кыриниш эффектини бузади, лекин биринчи щолда сарфланган ЭЩМ ва=ти ва хотира нисбатан анча ю=оридир.
|