СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Лекция № 8 (кырг)

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Лекция № 8 (кырг)»

Лекция № 8. Процедуралар

План

  1. Процедуралардын түрлөрү

  2. Подпрограмманы жана функцияны чакыруу

  3. Подпрограмманы жана функцияны жарыялоо

  4. Аталган аргументтер

  5. Процедуранын ысымынын таасир тийгизүү чөйрөсү

  6. Аргументтерди шилтеме жана мааниси боюнча берүү

  7. Аргументтер катары форма аттары жана башкаруу элементтер

  1. Процедуралар

VBте процедуралардын 2 түрүн айырмаласак болот:

  • Функциялар;

  • Подпрограммалар.

Процедуралар код блогуна ысым берүү мүмкүнчүлүгүн берет. Бул кодду бир жолу жазуу менен, аны проектин бир нече бөлүгүндө иштетүүгө болот. Мындай жолду пайдалануу менен, проектин кодунун өлчөмүн кыскартууга жана анын адам кабыл алган көрүнүшүн жөнөкөйлөтүүгө болот. Подпрограмманын ысымы аны идентификациялоо үчүн гана колдонулат, ал эми функциянын ысымы идентификация үчүн гана эмес, анын тибин жана маанисин аныктайт.

  1. Процедуралар түрлөрү

VBте процедуралардын бир нече түрүн колдонууга болот:

Жалпы колдонууга арналган подпрограммалар, уникалдуу ысымга (анын жардамында чакырылган жана аткарылган) ээ болгон программалык коддун өз алдынча бөлүгү. Подпрограмманын ысымы аны чакырган процедуранын маанисин кайтарууга колдонулушу мүмкүн эмес.

Функция подпрограмма сыяктуу, бир айырмасы функциянын ысымын функциянын маанисин, ал чакырылган ордуна кайтаруу үчүн колдонулат.

Окуялуу подпрограмма – окуяны иштеткич жөнөкөй подпрограммадан айырмаланып, программа тиешелүү окуя аткарылганда, автоматтык түрдө аны чакырат.

Подпрограмма-касиет. Объектти жаңы касиет менен камсыздоо үчүн колдонулат.

VBте бир нече жолу кайталанган программа бөлүктөрдүн инструкция блокторуна, аларды кайрадан жазбастан жана текшербестен, бөлүү мүмкүнчүлүгү бар. Мындай мүмкүнчүлүктү колдонгондо, татаал программалар тыгыздалып, ал эми функционалдык блоктор, аларды туура уюштурууда, башка программаларды иштеп чыгууда колдонулушу мүмкүн.

VBте функционалдык блокторду подпрограмма (Sub) жана функция (Function) түрүндө уюштурса болот.

Подпрограммалардан жана функциялардан турган программанын схемасын төмөндөгү сүрөттөн көрсөк болот. Программанын аткарылышы көбүнчө, башка подпрограммаларга (подпрограмма А) же функцияларга кайрылуу бар, окуялуу подпрограммада башталат. Чакыруудан соң, программаны аткарууга башкарууну берген, чакырылган подпрограмма (подпрограмма А) аткарылат. Кезекте чакырылган подпрограммада функциясыяга (функции Б) кайрылуу бар.

Чакырылган подпрограмманын же функциянын аткарылуусунун токтоосу, аткарылуусу, чакыруучу инструкциядан кийин келген, инструкция менен уланса, чакыруучу подпрограммага же функцияга кайтуусун түшүндүрөт.


Коддун инструкцияларын аткаруу схемасы


  1. Подпрограммаларды жана функцияларды чакыруу

Функциянын же жалпы колдонууга арналган подпрограмманын коду аткарылышы үчүн, ал чакырылышы керек.

Подпрограмманы чакыруу, код жолчосунун башына анын ысымын коюу менен жүргүзүлөт. Ысымынан соң, подпрограмманын аргументтеринин мааниси берилген болсо, кашаанын ичинде үтүр менен бөлүнүп жайгаштырылышы керек.

Подпрограмманын ысымы ([Аргументтердин маанисинин тизмеси])

Функция маанини чакырылган чекитке кайтарат, башка жагынан подпрограмманы чакыруу сыяктуу эле болот.

X = A + Функциянын ысымы ([Аргументтердин маанисинин тизмеси])

Функция маанини кайтара алышы үчүн, функция кайтаруучу маанини колдонгон, анын ысымы кайсы бир конструкцияда берилиши керек.


  1. Подпрограмманы жана функцияны жарыялоо

Подпрограмманы жарыялоо үчүн төмөнкү синтаксис колдонулат:

[Private/Public] Sub ПодпрограмманынЫсымы ([аргументтер тизмеси])

[Инструкциялар] [Exit Sub] [Инструкциялар]

End Sub

Функцияны жарыялоо синтаксиси бир нече башкача болот:

[Private/Public] Function ФункцияЫсымы _ ([Аргументтер тизмеси]) [As Тип]

[Инструкциялар]

[ФункцияЫсымы = Туюнтма] [Exit Function] [Инструкциялар] [ФункцияЫсымы =_ Туюнтма] [Return Туюнтма]

End Function

Синтаксисти түшүндүрүү:

Public. Бул сөз менен проектин бардык формаларында жана модульдарында жеткиликтүү боло турган подпрограмманы же функцияны жарыялайт.

Private. Мындай учурда подпрограмма же функция ошол форманын же модульдун чегинде гана жеткиликтүү болот. Унчукпастык менен жүргүзүлөт.

Exit Sub / Exit Function. Бул инструкциялар подпрограммадан же функциядан алдын ала чыгууну аткарат.

Функциянын бөркүндө сөзсүз түрдө инструкция аткарылышы керек, анын аткарылуусунда функциянын ысымы жыйынтыктуу мааниге ээ болот. Көбүнчө бул үчүн ыйгаруу инструкциясы колдонулат. Бирок VB.NETте, Return(Туюнтма) инструкциясын колдонууда негизделген, туюнтманын маанисин функциянын ысымына ыйгарган, башка ыкма да эске алынган.

Аргументтер синтаксиси:

[Optional][ByVal / ByRef][ParamArray]АргументтинЫсымы [()] _

[As Тип][= УнчукпастыкМененМаани]

АргументтинЫсымы – өзгөрмөнүн, массивдин, башкаруу элементинин же форманын ысымы.

Тиби кайсы бир базалык тип болушу мүмкүн, колдонуучулук тип, ошондой эе Control жана Form.

УнчукпастыкМененМаани зарыл эмес аргумент үчүн гана жеткиликтүү. Аргументтин мааниси жок учурда, ага автоматтык түрдө ыйгарылуучу, маанини берет.

Аргументтер тизмеси берилгендер аркылуу чакыруучу процедура менен чакырылуучу процедуранын байланышын аныктайт.

Аргументтерди аныктоодо колдонуулуучу резерв сөздөрдүн дайындалышынын түшүндүрүлүшү:

Optional. Бул сөз сөзсүз эмес аргументтин алдында жайгашат. Сөзсүз эмес аргументтен кийин сөзсүз болбогон гана аргументтер бериле алат. Сөзсүз эмес аргументтер менен бирге аргументтер массивин (ParamArray) колдонууга болбойт.

ByVal. Бул сөздөн кийинки келген аргументтин мааниси, процедурага же функцияга мааниси боюнча берилет. Эгер аргумент катары, процедурага карата, тышкы өзгөрмө болсо, анда ал аргумент менен аткарылган, процедура бөркүндөгү манипуляциялар, бул тышкы өзгөрмөнүн маанисин өзгөртпөйт. Мындай ыкма кийирилүүчү берилгендер үчүн колдонулат. Подпрограммага же функцияга кайрылганда, тиешелүү аргумент туюнтма болушу мүмкүн. Бул аргументтерди мааниси боюнча берүү режими унчукпастык менен кабыл алынат жана кийирилүүчү аргументтерге колдонулуат.

ByRef. Аргументтин мааниси шилтеме бонча берилет. Бул аргумент катары процедурага берилген, тышкы өзгөрмөнүн мааниси, процедуранын операторлору менен өзгөртүлүшү мүмкүн. Процедурага же функцияга кайрылганда, тиешелүү аргумент өзгөрүлмө гана боло алат.

ParamArray. Аргументтер массиви. Мындай болуп тизмедеги акыркы аргумент гана жарыяланат, мында ал Object тибиндеги, өзүнө массивди камтыган, өзгөрмө боло алат.Бул ыкма иенен процедурага же функцияга чоң көлөмдөгү берилгендерди берүүгө болот. Аргументтер массивин колдонууда Optional, ByVal жана ByRef касиеттерин иштетүүгө болбойт.

Процедура кайсы бир подпрограмманын же функциянын ичинде аныкталышы мүмкүн эмес.

Подпрограмманы жарыялоонун мисалы. Жактарынын мааниси белгилүү болгон, тикбурчтуктун аймагын табуу:

Sub D (ByVal Туурасы As Single, _ByVal Бийиктиги As Single, ByRef Аянты As Single Аянты = Бийиктиги * Туурасы

End Sub

Подпрограммага кайрылуунун мисалы:

D (w1, h1, s1)

D (w2, h2, s2)

s = s1 + s2

Функцияны жарыялоонун мисалы. Жактарынын мааниси белгилүү болгон, тикбурчтуктун аймагын табуу:

Function Demof (ByVal Туурасы As Single, _ ByVal Бийиктиги As Single) As Single

Demof = Бийиктиги * Туурасы End Function

Функцияга кайрылуунун мисалы:

s = Demof(w1, h1) + Demof(w2, h2)

Процедура мисалы. В векторунун А матрицасынын мамычасынын элементтеринин суммасынан түзүлүшү:

Sub MatrVektor (ByVal A(,) As Single, _ ByRef B() As Single)

Dim J, I As Integer

For J = 0 To A.GetUpperBound(1) B(J) = 0

For I = 0 То A.GetUpperBound(0) B(J) = B(J) + A(I,J)

Next Next

End Sub

Бул жерде GetUpperBound ыкмасына A.GetUpperBound(0) кайрылуусу A массивинин биринчи өлчөмдөгү индексинин эң чоң маанисин кайтарат. Ал эми A.GetUpperBound(1)дин GetUpperBound ыкмасына кайрылуусу А массивинин экинчи өлчөмдөгү индексинин эң чоң манисин кайтарат.

Бул подпрограмманы түрдүү өлчөмдөгү матрицалар менен иштөөдө колдонсо болот.

Миал. Бирөлчөмдүү массивдин элементтеринин орто маанисин эсептөө үчүн функция:

Function FunSumVector (ByVal A( ) As Single) As Single Dim Sum As Single, I As Integer

For i=0 To A.GetUpperBound(0) Sum = Sum + A(I)

Next

FunSumVector = Sum/( A.GetUpperBound(0) + 1)

End Function

Кийинки мисалда Celsius функциясы Фаренгейтте берилген градусту Цельсия градусуна өзгөртөт. Функция Main подпрограммасы менен чакырылганда, аргументтин маанисин камтыган, өзгөрмө функцияга берилет. Чакыруучу подпрограммага эсептөөлөрдүн жыйыетыгы кайтарылат жана билдирүү терезесине чыгарылат.

Sub Main()

Dim temp As Single

temp = InputBox("Фаренгейта градусунда берилген температураны кийиргиле“)

MsgBox ("Температура барабар " & _Celsius(temp) & _ " Цельсия градусы")

End Sub

Function Celsius(ByVal ГрадФар As Single) As Single

Celsius = (ГрадФар - 32) * 5/9

End Function


  1. Аталган аргументтер

Sub же Function процедураларын чакырууда, аргументтердин позициялык бнрилүүсү мүмкүн, башкача айтканда процедурада берилген иретте. Андан сырткары, позициясынан көзкаранды, аргументтер ысымына карат берилет.

Ысым берилген аргумент аргументтин ысымынан аргумент маанисинен турат.

АргументЫсымы := АргументМааниси

Ысымдуу аргументтер сөзсүз эмес аргументтүү процедураларды (Optional) чакырууда пайдалуу.

Ысымдуу аргументтер колдонулганда, жок болгон позициялык аргументтерди белгилөө үчүн үтүр белгиси кереги жок. Ысымдуу аргументтердин жардамында кайсы аргументтер берилген жана кайсы аргументтер түшүрүлгөндүгүкөрүнүп турат. Optional аргументтүү процедураны чакырууда сөзсүз эмес аргументти көрсөтсө да көрсөтпөсө да болот. Эгер аргумент көрсөтүлгөн болбосо, анда унчукпастык менен берилген маани колдонулат.


  1. Процедуранын ысымынын иштөо чөйрөсү.

Подпрограмма же функция проектин бардык модулдарында жана формаларында жеткитиктүү болушу үчүн, ал модулда Public ачкычтык сөзү менен жарыяланышы керек. Формада жарыяланган подпрограмма же функция, ушул формада гана жеткиликтүү берет.

Подпрограмманын аргументтер тизмесине, тиешелүү подпрограмманын кийирилүүчү жана чыгарылуучу берилгендерин кошуу сунушталат.

Функция аргументтер тизмесине, тиешелүү функциянын кийирилүүчү жана чыгарылуучу берилгендерин кошуу сунушталат. Анын жалгыз жыйынтыгы функциянын ысымы аркылуу, чакыруучу программага кайтарат.

Жарыялоодогу аргументтердин тизмеси менен чакыруудагы аркументтердин маанисинин тизмесинин ортосунда кийинки дал келүү болушу зарыл:

Жарыялоодогу аргумент

Кайрылуудагы аргументтин мааниси

ByVal өзгөрмөсү

Туюнтма (өзүнчө учурда: константа, өзгөрмө, массив элементи, функцияга кайрылуу)

ByRef өзгөрмөсү

Өзгөрмө же массив элементи

Массив

Массив

Форма

Форма

Башкаруу элементи

Башкаруу элементи

Эгер функциянын ысымына эч кандай маани ыйгарылбаган болсо, анда функция ысымы унчукпастык менен мааниге ээ болот: сандык функция 0 маанисине ээ болот, String болуп жарыяланган функция бош болот(“”), Object болуп жарыяланган функция, Empty маанисине ээ болот.

VB.NETтеги функциялар жөнөкөй өзгөрмөлөрдү гана эмес, ошондой эле массивдерди да кайтарат:

Function Zentr(ByVal x() As Double) As Double ()

Бул мисалда функция массивди кабыл алып, массивди кайтарат. Функция ыымы аркылуу кайтарылуучу массивди берүү үчүн, кийинки инструкция колдонулат:

Return(КайтарылуучуМассивдинЫсымы)


  1. Аргументтерди шилтемеси жана мааниси боюнча берүү

Подпрограмманы же функцияны чакырууда аргументтердин маанисин шилтеме боюнча берүү, аргументтин мааниси сакталган эс кутучасынын дареги берилүүсү түшүндүрүлөт. Мындай учурларда чакырылуучу процедура, чакыруучу функция колдонгон, бир эле кутучаны же эс чөйрөсүн колдонгонду түшүндүрөт. Мында берилген аргумент менен иштөө үчүн кошумча эс бөлүнбөйт. Чакырылуучу процедурада аргументтин өзгөрүүсү, чакыруучу процедурадагы аргументтин өзгөрүүсүн түшүндүрөт.

Процедураны чакырууда мааниси боюнча аргументтердин маанисин берүү, аргумент үчүн, берилүүчү аргументтин маанисинин көчүрмөсү жайгашуусуна, кошумча кутуча же эс бөлүгү болүнгөнүн түшүндүрөт. Чакырылуучу процедуранын аргументтер тизмесинде, аргументтен мурун ByVal резервдик сөзү жазылуусу керек. Көчүрмөсү үчүн кошумча эс талап кылынат. Бирок чакырылуучу программадагы аргументтин мааниси туюнтма болушу мүмкүн. Чакырылуучу процедурадагы аргументтин өзгөрүүсү, чакыруучу процедурадагы аргументтин маанисин өзгөрүүсүнө алып келбейт.

Вместе с тем передача по значению (выделение дополнительной памяти) приводит к неэффективному использованию памяти. В связи с этим, для строк символов и массивов нецелесообразно использовать передачу по значению.


  1. Аргументтер катары формалардын жана башкаруу элементтерин ысымдары.

Процедура аргументтеринин тизмеси, формаларды жана башкаруу элементтерин камтышы мүмкүн. Бул формалар жана башкаруу элементтер менен иштөө үчүн универсалдуу алгоритмдерди түзүүгө мүмкүнчүлүк берет.

Башкаруу элементтери үчүн Control сөзүнүн ордуна, бул башкаруучу элемент тиешелүү болгон, класстын аталышын колдонуу сунушталат. Мисалы, колдонуучулардын коңүлүн форманын кайсы бир башкаруу элементине буруу үчүн, тексттин өңүн өзгөртүүчү универсалдуу подпрограмманы түзүүгө болот:

Sub КөңүлБургула(ByVal Cntrl As Control)

Cntrl.ForeColor = Color.Red

End Sub

Подпрограмманын аргументи болуп башкаруучу элементтин ысымы эсептелет. Кайсы бир конкреттүү башкаруучу элементтин ысымы менен бул подпрограммага кайрылуу, тексттин түсүн кызылга өзгөртөт.