Do While ёрдамида - Ызбекистон Республикаси

Do While ёрдамида
|
Do Until ёрдамида
|
i1
Do While I<10
ssi^2
ii1
Loop
MsgBox S
|
i1
Do Until I>10
ssi^2
ii1
Loop
MsgBox S
|
Visual Basic да яна While-Wend цикл операторидан фойдаланиш мумкин. Бунда цикл охири Wend оператори билан ани=ланади. Ишлатилиши Do While билан айнан бир хил.
Синов саволлари
Тармо=ланувчи жараён деганда нимани тушунасиз
Visual Basic да такрорланувчи жараёнларни ташкил этишнинг неча хил усули мавжуд? Уларнинг фар=и нимада?
Select Case операторининг вазифасини изохлаб беринг.
7-мавзу: Белги катталиклар. Сатрлар билан ишлаш. Тип ызгартирувчи операторлар.
Аввалги мавзуларда кыриб ытилганидек, формага ырнатилаётган объектларнинг хар бири алохида ызига хос хусусиятларга эга. Ушбу объектларнинг аксарият хусусиятлари айнан белги (сатр) катталиклар ор=али ани=ланади ва унга =иймат берилади. Масалан Text объекти ор=али дастур давомида бирор ызгарувчига =иймат бериш учун унинг text хусусиятидан фойдаланилади. Бу хусусият эса сатр катталикдаги =ийматга эга. Агар биз бирор сон киритмо=чи былсак, ушбу объектга киритилган белгини сонга айлантириб олишимизга ты\ри келади. Ёки аксинча, дастур давомида олинган натижани экранга чоп этиш учун Label объектидан фойдаланилади. Бу объектда натижани чоп этиш Caption хусусияти билан ани=ланади ва у белги катталикка эга. Демак хосил =илинган сонли =ийматни чоп этишдан олдин уни белги (сатр) катталикка айлантириб олишга ты\ри келади.
Ушбу муаммолардан чи=иш учун барча дастурлаш тиллари каби Visual Basic да хам бир =атор белги катталиклар билан ишлаш функциялари мавжуд. Ушбу функциялар билан =уйида мисоллар ёрдамида танишиб чи=амиз.
Белги катталикни сонли катталикка ытказиш учун Val() функциясидан фойдаланамиз. Функциянинг ёзилиш формати:
<с_ызгарувчи>:Val(<а_ызгарувчи>)
бу ерда <а_ызгарувчи> даги белги катталикни Val функцияси сонли катталикка ыгиради ва натижани <с_ызгарувчи>га узатади. Val функциясига тескари функция хам мавжуд былиб, у Str(). Ёзилиш формати =уйидагича:
<а_ызгарувчи>:Str(<с_ызгарувчи>)
бу ерда <с_ызгарувчи> даги сонли =ийматни Str функцияси белги катталикка ытказади ва натижани <а_ызгарувчи> га ызлаштиради.
Масалан, а ва с ызгарувчиларга =уйидагича =иймат берсак: а «10», с «15». Агар ва а ва с ызгарувчиларнинг йи\индисини вас кыринишда берсак, у холда натижа «1015» га тенг былади. Чунки бу ерда а ва с лар белги катталикдаги =ийматларга эга. Уларнинг сонли =ийматдаги йи\индисини олмо=чи былсак, у холда =уйидаги амални бажаришимизга ты\ри келади:
вval(a)val(c)
энди эса в ызгарувчининг =иймати 25 га тенг былади. Яъни Val функцияси ёрдамида а ва с ызгарувчилар сонли катталикка айлантирилди ва уларнинг йи\индиси хисобланиб, в ызгарувчига узатилди.
Сатр катталиклар билан ишлаш учун бир нечта функциялар мавжуд. Улардан бири сатр бошида ёки охирида мавжуд былган пробел (быш жой)ларни олиб ташлаш функцияси. Бу функциялар =уйидагилар:
LТrim – сатрнинг бошланишида жойлашган пробелларни олиб ташлайди;
RTrim – сатр охирида жойлашган пробелларни олиб ташлайди;
Trim – сатр бошида ва охирида жойлашган пробелларни олиб ташлайди.
Мисол учун:
st” Пробелларни ычириш ”
print Ltrim(st) ‘ натижа “Пробелларни ычириш ”
print Rtrim(st) ‘ натижа “ Пробелларни ычириш”
print trim(st) ‘ натижа “Пробелларни ычириш”
берилган сатр ичидан керакли =исмини =ир=иб олиш учун =уйидаги функциялардан фойдаланамиз:
Left (st,i) – st сатрининг чап томонидан i та белгини =ир=иб олади;
Right (st,i) – st сатрининг ынг томонидан i та белгини =ир=иб олади;
Mid (st,i,j) – st сатрининг i-белгисидан бошлаб j та белгини =ир=иб олади.
st”Салом менинг дыстим”
Print Left(st,5) ‘натижа “Салом”
Print Right(st,6) ‘натижа “дыстим”
Print Mid(st,7,6) ‘натижа “менинг”
Эслатма! Хар бир пробел (быш жой) хам битта белги сифатида =абул =илинади.
Баъзан клавиатурада мавжуд былмаган белгиларни хосил =илишга ты\ри келиб =олади. Бундай холатларда ушбу белгиларнинг кодларидан фойдаланишга ты\ри келади. Коддан белгига айлантиришни Chr() функцияси амалга оширади. Масалан Enter тугмасининг ASCII коди 13 га тенг. Enter нинг вазифасидан дастурлашда фойдаланиш учун Chr(13) деб ёзиш кифоя.
Масалан, 1 дан 5 гача былган сонларни маълумот ойнасида устун шаклида хосил =илиш учун =уйидаги дастур =исмини ёзиш кифоя:
For i1 to 5
ss chr(13) str(i)
next i
Msg s
Ю=оридаги операторлардан таш=ари яна =ышимча равишда =уйидаги функциялардан хам фойдаланиш мумкин:
Ucase(st) – st сатридаги барча кичик харфларни бош харфларга ытказиш;
Lcase(st) – st сатридаги барча бош харфларни кичик харфларга ытказиш.
Масалан,
st”салом”: se”ЯНГИ”
Print Ucase(st) ‘ натижа “САЛОМ”
Print Lcase(se) ‘ натижа “янги”
StrConv(st) функцияси эса st сатридаги хар бир сызнинг биринчи харфини бош харфга =олганларини эса кичик харфларга ытказиш имконини беради:
st”алиев атхам солиевич”
Print StrConv(st) ‘натижа “Алиев Атхам Солиевич”
Ёки
st”алиев атхам солиевич”
Print StrConv(st) ‘натижа “Алиев Атхам Солиевич”
InStr(st,s) функцияси s сатрни st сатр ичидан излаб топади ва s сатр st сатрининг нечани белгисидан бошланишини ани=лайди:
st “Салом олам”
s “олам”
Print InStr(st,s) ‘натижа 7
Чунки «олам» сызи «Салом олам» сызининг 7-белгисидан бошланади.
Сатр катталикларга мисол кыриб ытайлик.
берилган s сатрдаги барча белгиларни ASCII кодини чоп этувчи дастур тузиш талаб этилсин.
Ечиш: аввал берилган сатрдаги хар бир белги =ир=иб олинади ва уларнинг хар бирини ASCII коди чоп этилади. Дастур матнини ёзишдан аввал унинг форма кыринишини яратиб олиш керак. Формага матн киритиш учун битта Text, натижа чи=иши учун битта Label ва дастурдан натижа олиш учун битта Command объектларини ырнатамиз (9-расм). Properties ойнасидан Label нинг AutoSize хусусиятига True, Caption хусусиятига эса быш жой ырнатилади. Command объектининг caption хусусияти эса Ok га ызгартирилади.
9-расм. Дастур формасининг кыриниши.
Энди дастур матнини ёзиш учун Ок тугмаси устида сич=онча икки марта тез босилади ва хосил былган кодлар ойнасида =уйидаги ызгартириш киритилади:
Private Sub Command1_Click()
s = Text1.Text ‘матн s узгарувчига олинади
l = Len(s) ‘матн узунлиги аникланади
For i = 1 To l ‘цикл матн узунлигигача очилади
s1 = Mid(s, i, 1) ‘битта белги киркиб олинади
Label1.Caption = Label1.Caption + Chr(13) + s1 + " - " + Str(Asc(s1)) ‘киркиб олинган белгининг коди чоп этилади
Next I ‘циклнинг навбатдаги киймати
End Sub
8-маъруза: Массивларни элон =илиш. Бир ва кып ылчовли массивлар.
Оддий ызгарувчилардан бош=а ми=дорларни са=лаш учун массивлардан фойдаланилади. Массив бир номдаги, лекин турли индексли ызгарувчилар тыпламидан иборатдир. Хар бир шундай ызгарувчилар массив элементлари дейилади. Массив элементларининг ми=дори массив ылчами дейилади. Массивнинг ылчами ЭХМнинг оператив хотираси ва массив элементларининг типи билан чегараланган.
Массивнинг барча элементлари бир хил типга тегишли былади. Биро=, агар массив Variant типига тегишли былса, у холда массивнинг алохида элементлари алохида типдаги маълумотларни са=лаши мумкин. Яъни, бир элемент сонли, бош=аси сатрли былиши мумкин.
Одатда массивнинг ёзилиш формати =уйидагича былади:
<массив номи>(<массив ылчами>) As <массив элементлари типи>
масалан, А(10) As Integer
бу ерда А-массив номи, 10-массив ылчами, яъни массив элементлари А(0), А(1),…,А(10) лардан иборат, Integer – массивнинг хар бир элементининг типи.
Ю=орида айтиб ытилганидек хар бир массивнинг элементи ызида бир хил типдаги алохида-алохида =ийматларни са=лайди.
Visual Basic да массивлар икки тури мавжуд:
Фиксирланган
Динамик
Фиксирланган массив – ылчови ызгармайдиган массив, яъни уни эълон =илишда ылчами ани= =илиб белгиланади.
Динамик массивнинг ылчамини эса дастур ишлаши давомида ызгартириш мумкин.
Дастурлашда массивдан фойдаланиш учун аввал уни эълон =илиб олиш керак. Фиксирланган массивни эълон =илиш унинг кыриниш сохасига бо\ли= равишда =уйидагича амалга оширилиши мумкин:
глобал массив Public оператори ёрдамида модулнинг Declaration секциясида эълон =илинади;
модул даражасидаги массив Private оператори ёрдамида модулнинг Declaration секциясида эълон =илинади.
локал массив Private оператори ёрдамида эълон =илинади.
Массив эълон =илинаётган пайтда унинг номидан кейин =авс ичида массивнинг ю=ори чегараси кырсатилади. Одатда массивнинг =уйи чегараси 0 га тенг. Масалан, келтирилган мисолда, яъни модулнинг Declaration секциясида киритилувчи массив 21 та элементдан ташкил топган. Массив элементи индекси 0 дан 20 гача ызгаради:
Dim A(20) As Integer
Худди шундай ылчамдаги массивни глобал эълон =илиш учун =уйидаги коддан фойдаланилади:
Public A(20) As Integer
Массивнинг =уйи чегарасини хам ани= =илиб белгилаб =ыйиш мумкин. Бунинг учун То хизматчи сызидан фойдаланилади:
Dim A(1 То 20) As Integer
Бундай холатда массив 20 та элементдан ташкил топади ва массив элементларининг индекси 1 дан 20 гача ызгаради.
Маълумки, массивлар бир ва кып ылчовли былади. Ю=орида кыриб ытилганларнинг барчаси бир ылчовли массивларга мисол былади. Бир ылчовли массивлар устида амаллар бажаришга доир кичик бир мисол кыриб ытайлик:
Масала: Берилган А(20) бутун типдаги массив элементлари ичидан энг каттасини топиш дастурини тузинг.
Ечиш: Берилган массив элементлари ичидан энг каттасини топиш учун, аввал массив элементлари киритиб олинади. Сынг массивнинг биринчи элементини энг катта деб =абул =илинади ва шу элементга нисбатан =олган элементлар бирма-бир солиштириб чи=илади.
Дастурнинг форма кыриниши содда холда яратиб олинади, яъни формага битта Label (натижани чи=ариш учун) ва битта command (натижа олиш учун) объектларини ырнатамиз (10-расм).
10-расм. Дастурнинг форма кыриниши
Properties ойнасини мос равишда =уйидагича ызгартирилади:
Label
|
Caption
|
Max
|
Autosize
|
True
|
Command
|
Caption
|
Bajar
|
Дастур кодини ёзиш учун «Bajar» тугмаси устида сич=ончанинг ынг тугмаси икки марта босилади ва хосил былган кодлар ойнасидаги процедура ичига =уйидагилар киритилади:
Private Sub Command1_Click()
Dim a(1 To 20) As Integer
For i = 1 To 20
a(i) = Val(InputBox("A(" + Str(i) + ")="))
Next i
Max = a(1)
For i = 2 To 20
If Max < a(i) Then Max = a(i)
Next i
Label1.Caption = Label1.Caption + Str(Max)
End Sub
Икки ылчовли массивлар хам бир ылчовли массив билан ыхшаш былади. Фа=ат икки ылчовли массивда =авс ичида кырсатилувчи ылчам иккита, ызаро вергул билан ажратилувчи ми=дорлардан ташкил топади:
A(10,15) As Real
Бу ерда А-массив номи, «10,15»-массивнинг 1- ва 2- ылчовлари ми=дори, Real – массив элементлари типи.
Икки ылчовли массивни оддий устун ва сатрлардан иборат былган жадвал деб олиш мумкин. Жадвалнинг хар бир ячейкасида жойлашган =иймат массив элементи =иймати хисобланади. Масалан, В(N,M) массив =уйидагича ифодаланиши мумкин:
|
1
|
2
|
3
|
…
|
M
|
1
|
B(1,1)
|
B(1,2)
|
B(1,3)
|
…
|
B(1,M)
|
2
|
B(2,1)
|
B(2,2)
|
B(2,3)
|
…
|
B(2,M)
|
…
|
…
|
…
|
…
|
…
|
…
|
N
|
B(N,1)
|
B(N,2)
|
B(N,3)
|
…
|
B(N,M)
|
Яъни, В жадвал M та устун ва N та сатрдан иборат былиб, жами MxN та ячейкадан иборат.
Ю=оридаги масалани икки ылчовли массив учун ызгартирсак, форма ызгаришсиз са=ланади, дастур кодида =уйидагича ызгартириш =илинади:
Private Sub Command1_Click()
Dim a(1 To 20, 1 To 20) As Integer
For i = 1 To 20
For j 1 To 20
a( i , j ) = Val(InputBox("A(" + Str(i)”,” +Str(j)+ ")="))
Next j, i
Max = a(1,1)
For i = 1 To 20
For j 2 To 20
If Max < a(i,j) Then Max = a(i,j)
Next j, i
Label1.Caption = Label1.Caption + Str(Max)
End Sub
Кыриниб турибдики фиксирланган массив элементларининг ми=дори аввалдан ани= чегаралаб =ыйиляпти. Бу массив элементлари ми=дори аввалдан маълум былган масалалар учун =ыл келади. Лекин, массив элементлари ми=дори аввалдан маълум былмасдан, дастур ишлаши давомида ани=ланувчи холатларда анчагина муаммолар юзага келиши мумкин. Чунки керагидан орти= ми=дорни кырсатиш оператив хотирадан орти=ча жойни банд =илиб =ыяди.
Visual Basic да динамик массив тушунчаси мавжуд былиб, унинг элементлари ми=дори аввалдан чегараланмайди. Динамик массивларни эълон =илиш =уйидагича амалга оширилади:
1. Динамик массив хам фиксирланган массивни эълон =илиш учун фойдаланилган операторлар ёрдамида амалга оширилади, глобал массив Public ёрдамида, модул даражасидаги массив Dim ёрдамида, массивни процедурада эълон =илиш Dim ёки Static ёрдамида. Лекин массив элементлари ми=дори кырсатилмасдан, быш =авс ёзилади:
Dim C() As Integer
2. ReDim бажарувчи оператор ёрдамида массив ылчами сон ёки ифода кыринишида берилади. Массив ылчамларини бериш =уйидаги усуллардан бири кыринишида берилиши мумкин:
ReDim C(x)
ReDim C(20)
ReDim C(1 To 20)
ReDim оператори билан массив ылчами берилганда ёки ызгартирилганда жорий массивнинг олдинги =ийматлари йы=отилади. Агар массив янгитдан эълон =илиниши керак былганда бу усул =улай хисобланади. Агар массивнинг аввалги =ийматларини са=лаган холда массив ылчами ызгартирилиши керак былса, у холда ReDim оператори Preserve калит сызи билан =ылланилади. Масалан, =уйидаги код массив элементлари ми=дорини аввалги =ийматларни са=лаган холда биттага орттиради:
ReDim Preserve C(x1)
9-маъруза: Параметрли ва парметрсиз процедуралар. Процедурага мурожаат =илиш ва ундан фойдаланиш.
Дастур тузиш жараёнида, унинг турли жойларида маъносига кыра бир хил, муста=ил характерга эга былган ва ечилаётган асосий масаланинг бирор =исмини щал =илишни ыз быйнига олган мураккаб алгоритмдан бир неча маротаба фойдаланишга ты\ри келади. Масалан, матрицаларни кыпайтириш, матрицани векторга кыпайтириш, чизи=сиз тенгламани ечиш, чизи=ли алгебраик тенгламалар системасини ечиш, факториал щисоблаш, йи\инди щисоблаш ва щоказо каби масалаларни щал =илиш алгоритмлари жуда щам кып масалаларни ечишнинг бош алгоритмларида =айта-=айта, турли бошлан\ич маълумотлар билан =атнашиши мумкин. Бундай щолларда, малакали дастурчи дастур матнини ихчамлаштириш, дастурнинг ишончлилик даражасини ошириш, дастурни тащрирлашни тезлаштириш ва дастурнинг умумийлигини (универсаллигини) таъминлаш учун процедура ва функциялардан кенгро= фойдаланиб, мукаммал дастур яратишга щаракат =илади.
Процедура ва функциялар муста=ил дастурли объектлар щисобланади. Бу муста=ил дастурли объектни дастурчи ыз щохишига ва ундан олинадиган натижаларига кыра процедура ёки функция кыринишида ани=лаши мумкин. Одатда олинадиган натижа ягона =ийматли былса функциядан, олинадиган натижалар сони бир нечта былса процедурадан фойдаланиш ма=садга мувофи=дир.
Visual Basic да процедураларнинг =уйидаги кыринишлари мавжуд:
Sub процедураси.
Sub процедураси =иймат =айтармайди, бу процедура кыпинча унга бо\ланган ходисаларни =айта ишлаш учун =ылланилади. Унга фа=ат стандарт модуллар, форма ва синф модулларини ырнатиш мумкин. Sub процедурасининг ёзилиш формати =уйидагича:
[Private] [Public] [static] Sub Процедура_номи (параметрлар)
операторлар
End Sub
Sub ва End Sub калит сызлари орали\ида ушбу процедурага мурожаат =илинган ва=тда бажарилиши лозим былган жараённинг дастур коди ёзилади. Параметрлардан эса процедурага узатилувчи ызгарувчиларни эълон =илиш учун фойдаланилади.
Sub процедураси умумий процедура ва ходиса процедураларига былинади.
Умумий процедуралар ходиса процедуралар ёки бош=а бир процедура томонидан мурожаат =илинганида такрор-такрор бажарилиши мумкин былган дастурнинг =исми деб =арашимиз мумкин. Унинг ёзилиш формати =уйидагича:
[Private] [Public] [static] Sub Процедура_номи (параметрлар)
операторлар
End Sub
Ходиса процедураси эса Visual Basic формасида жойлашган бирор бир объектга бо\ли= былиб, шу объектга нисбатан юз берувчи ходиса натижасида бажарилади. Ходисалар учун Sub процедурасининг ёзилиш формати =уйидаги кыринишга эга:
Private Sub Form_ходисаНоми (параметрлар)
Операторлар
End Sub
Ёзилиш форматидан кыриниб турибдики, ушбу ходиса процедураси формага бо\ланган. Масалан, процедура форма ишга юкланганида бажарилиши учун Form_Load деб ёзиш керак былади. Агар процедура формага жойлаштирилган бош=арув элементига нисбатан бирор ходиса учун ёзилиши керак былса, у холда процедуранинг ёзилиш формати =уйидагича ызгаради:
Private Sub бош=арувЭлементиНоми_ходисаНоми (параметрлар)
Операторлар
End Sub
Ходиса процедуралари Visual Basic да автоматик хосил =илинади. Яъни кодлар ойнасининг ю=ори =исмида иккита очилувчи рыйхатга ыхшаш майдон мавжуд былиб, чап томонидагиси формага ырнатилган бош=арув элементларининг рыйхатини ызида са=ласа, ынг томонидагиси танланган бош=арув элементига хос былган ходисалар рыйхатини ызида са=лайди (11-расм).
|