11-расм. Visual Basic да кодлар ойнаси
Ю=орида айтиб ытганимиздек, процедура щисоблаб берган натижалар унинг фактик параметрлари ор=али асосий дастурга узатилади. Лекин, айрим пайтларда процедура параметрсиз щам былиши мумкин. Бу щолда асосий дастурнинг барча параметрлари процедура параметрлари ролини бажаради. Параметрсиз процедурада щам процедуранинг барча былимлари са=ланиб =олади, фа=ат параметрлар рыйщатигина =атнашмайди.
Процедураларни ани=лаш ва улардан фойдаланишни =уйидаги мисол ёрдамида кыриб чи=айлик:
Мисол: u max (x y, x * y), v max ( 0.5, u) – берилган x ва y ща=и=ий сонлардан фойдаланиб u ва v =ийматларни ани=лаш.
бу ерда x, u - =ийматлари киритиладиган ща=и=ий типли ызгарувчилар.
1. Масалани ечиш дастурини процедурадан фойдаланмай тузилган щоли:
Dim x, y, u, v As Double
Dim a, b, s As Double
Private Sub Command1_Click()
x = Val(Text1.Text)
y = Val(Text2.Text)
a = x + y: b = x * y
If a > b Then s = a Else s = b
u = s
a = 0.5: b = u
If a > b Then s = a Else s = b
v = s
MsgBox (Str(u) + " " + Str(v))
End Sub
Ащамият берсангиз, дастурдаги шартли оператор икки марта такрорланиб, бир хил иш бажарди.
2. Масалани ечиш дастурини параметрсиз процедурадан фойдаланиб тузилган щоли (энди ю=оридаги дастурда йыл =ыйилган камчиликни процедуралар ор=али тузатишга щаракат =иламиз):
Dim x, y, u, v As Double
Dim a, b, s As Double
Private Sub max1() ‘ max1 процедураси ташкил этилди
If a > b Then s = a Else s = b
End Sub
Private Sub Command1_Click()
x = Val(Text1.Text)
y = Val(Text2.Text)
a = x + y: b = x * y
Call max1 ‘ max1 процедурасига мурожаат
u = s
a = 0.5: b = u
Call max1 ‘ max1 процедурасига мурожаат
v = s
MsgBox (Str(u) + " " + Str(v))
End Sub
Асосий дастурнинг операторлар =исмида икки марта ёзилган мах1 параметрсиз процедурасига мурожаат, эълон =илинган процедурани икки марта асосий дастурга олиб келиб ишлатишни ташкил =илади. Эътибор берган былсангиз процедурага дастурнинг ихтиёрий =исмидан мурожаат Call калит сызи ёрадмида амалги оширилмо=да. Ащамият берилса, иккинчи дастур биринчи процедурасиз тузилган дастурга кыра ихчамро= ва соддаро=дир. Биз киритган процедура щозирча фа=ат иккита ща=и=ий сон ичидан каттасини ани=лаб берди щолос, шунинг учун дастур матнининг щажмини камайтиришдан эришган юту= салмо=ли былмади. Лекин, процедуралар асосан кып щажмли матндаги амалларни, вазифаларни бажаришга мылжалланади ва бу щолда эришилган юту= салмо\и анча ю=ори былади.
Параметрсиз процедуранинг асосий камчилиги, унинг асосий дастурга ва ундаги маълум параметрларга бо\ланиб =олганлигидир.
Процедура билан асосий дастурни бо\лайдиган асосий фактор бу – процедура параметрларидир. Параметрларни иккита типга ажратилади: =ийматли параметрлар (параметр-=иймат), ызгарувчили параметрлар (параметр - ызгарувчи).
Параметр - =иймат бу процедурани ишлаш жараёнини таъминловчи параметрлар щисобланади, яъни асосий дастур =ийматларини процедурага узатадиган параметрлардир.
Энди, ю=орида кыриб чи=илган сонларни энг каттасини топиш алгоритмининг дастурини =ийматли параметр билан ёзилган процедуралар ор=али амалга оширайлик:
Dim x, y, u, v As Double
Dim s As Double
Sub max1(a, b As Double)
If a > b Then s = a Else s = b
End Sub
Private Sub Command1_Click()
x = Val(Text1.Text)
y = Val(Text2.Text)
Call max1(x + y, x * y)
u = s
Call max1(u, 0.5)
v = s
MsgBox (Str(u) + " " + Str(v))
End Sub
бу ерда a, b - процедуранинг =ийматли формал параметрлари.
Процедурага мурожат =илишда формал ва фактик параметрларнинг типлари ызаро мос келиши керак, акс щолда дастур хато тузилган щисобланади. Ю=оридаги дастурдан кыриниб турибдики, а ва b формал параметрлар ырнига натижавий =ийматлари маълум ифодалар =ыйилди. Демак, =ийматли фактик параметрлар ырнига, шу типли натижага эришувчи ифода ёзилиши мумкин. Бундан таш=ари, процедурада киритилган а ва b параметрлари фа=ат процедуранинг ичидагина маънога эга, таш=арида, мисол учун асосий дастурда улар тушунарсиз, =ийматлари ани=ланмаган ми=дорлардир. Шунинг учун, =ийматли параметрларга процедура натижаларини ызлаштириб, асосий дастурга узатиб былмайди.
Ю=орида тузилган дастурнинг асосий камчилиги, топилган катта cон доим s ызгарувчисига ызлаштирилади. Мисолимиз шартига кыра эса, натижалар u ва v ызгарувчиларига ызлаштирилиши керак эди. Шунинг учун, дастурда икки марта =ышимча us ва vs ызлаштириш операторлари ёзилди.
Бу камчиликни тузатиш учун процедурага яна бир параметрни киритамиз. Лекин, киритилган бу параметр процедурага =иймат олиб кирмайди балки, процедура натижасини асосий дастурга олиб чи=иб кетади. Бундай параметрни параметр - ызгарувчи деб аталади.
Параметр-ызгарувчини параметр-=ийматдан фар= =илиш учун процедурани ани=лашдаги параметрлар рыйщатида ызгарувчи олдидан ByRef хизматчи сызи ёзилади. Параметр - ызгарувчидан сынг албатта, унинг типи кырсатиб =ыйилади. Ю=орида айтганимиздек, формал параметр - =иймат ырнига процедурага мурожат ва=тида шу типли ифода ёзиш мумкин былса, параметр - ызгарувчи учун бу щол мутла=о мумкин эмас.
Процедурани мукаммаллаштириб бориш динамикасини щис этиш учун яна, ю=орида кырилган максимум топиш мисолининг дастурини параметр - ызгарувчи ишлатган щолда кыриб чи=амиз:
Dim x, y, u, v As Double
Dim s As Double
Sub max1(a, b As Double, ByRef s As Double)
If a > b Then s = a Else s = b
End Sub
Private Sub Command1_Click()
x = Val(Text1.Text)
y = Val(Text2.Text)
Call max1(x + y, x * y, u)
Call max1(u, 0.5, v)
MsgBox (Str(u) + " " + Str(v))
End Sub
Шундай =илиб, битта дастурни процедуранинг уч хил варианти учун тузиб чи=иб, натижада ихчам ва содда дастурга эга былдик.
|