Үй / Windows шолуы / Vba for to step - бұл қалай жұмыс істейтінінің қарапайым мысалы. VBA циклдері. Бағдарламалау негіздері бойынша зертханалық жұмыс

Vba for to step - бұл қалай жұмыс істейтінінің қарапайым мысалы. VBA циклдері. Бағдарламалау негіздері бойынша зертханалық жұмыс

Оператор синтаксисі:

үшінЕсептегіш= Бастау ТоСоңы[ҚадамҚадам]

Блок_операторлар

КелесіЕсептегіш

Мұнда көрсетілген:

үшінүшін (міндетті кілт сөз VB);

Кімгедейін (міндетті кілт сөз VB);

Блок_операторлар– бір немесе бірнеше оператор шақырылды цикл денесі;

Есептегіш –орындалатын циклдар санын есептейтін бүтін айнымалы;

Басы, соңы -бастапқы және соңғы санауыш мәндері;

Қадамқадам(кілтсөзVB);

Қадам –қарсы өзгерту қадамы; теріс болуы мүмкін; параметр міндетті емес, себебі қадам 1 болса, қадам жасай аласыз Қадамтөмен;

Келесі – келесі (міндетті түйінді сөз VB, цикл операторының жазбасының соңы).

Есептегіш мән (Бастау, Аяқтау)болуы мүмкін сандық тұрақтылар немесе бүтін немесе нақты түрдегі айнымалылар теріс немесе оң сандар болуы мүмкін. Циклдің денесі кемінде бір рет орындалуы үшін болуы керек Басы ≤ Соңы,Егер Қадам> 0, және Басы ≥ Соңы,Егер Қадам< 0. Бұл белгілі болғаннан кейін Есептегіш>Соңы (Егер Бастау< Конец), Циклдің орындалуы аяқталады. Егер Бастау =Соңы,цикл бір рет орындалады;

9.1-мысал .Функцияны бағалауЫ = 2 – 1.5 СинксX диапазондағы 0,2 қадаммен өзгергенде.

Y есептеуге және Х аргументі мен Y функциясын шығаруға арналған бағдарламаның фрагменті:

X = 0-ден 2.4-ке дейін 0.2-қадам

Y = 2 – 1,5*Sin(X)

Бұл циклдің қалай жұмыс істейтінін түсіну үшін, міне, осыған ұқсас циклге арналған бағдарлама көмегімен жасалған операторӨту, тегтер, операторЕгерСодан кейін.

M1: X = X + 0,2

Егер X<= 2.4 Then

Y = 2 – 1,5*Sin(X)

Бұл бағдарлама қалай жұмыс істейтінін қарастырайық. Бірінші есептеу Y циклден шығып кеткендей стандартты емес. Цикл GoToM1 басқару элементін M1 белгісіне бірінші тасымалдаудан кейін басталады. M1 деп белгіленген жолда X аргументі 0,2 қадамға ұлғайтылады және X-тің жаңа мәні 2,4-тің соңғы мәнінен асатынын тексеру үшін дереу тексеріледі. Егер ол аспаса, онда Y есептеуі осы жаңа X арқылы қайталанады. Содан кейін GoToM1 операторы қайтадан орындалады - басқаруды M1 белгіленген жолға тасымалдау. Y есептеудің бұл итерациялары (циклдері) Х 2,4-тен асқан кезде аяқталады.

Енді бағдарламаны If бағдарламасымен For...Next циклімен салыстырайық.

X = 0-ден 2.4-ке дейін 0.2-қадам

екі жолды ауыстырады

M1: X = X + 0,2

Егер X<= 2.4 Then

Бұл For циклінде орындалатын кодтың соңғы екі жолы, бірақ біз оны көрмейміз. Біз оларды cFor жолымен кодтадық... GoTo M1 код жолы Next X (сөзбе-сөз: келесі X) сөзімен кодталған. Бұл ықшам дизайнға әкеледі.

For...Next циклін пайдаланған кезде әртүрлі есептерді шығару үшін цикл санауышын пайдалануды үйрену керек. Есептегішті мәселені шешу үшін қалай пайдалану керектігін анықтау үшін сізге қажет есептің тұжырымын талдау, есептің кейбір параметрлерінің өзгеру заңдылықтарын табу.

9.2-мысал . Қатар элементтерінің қосындысын анықтау: .

Бағдарлама фрагменті:

S = 0 ‘ S – қатардың қосындысы

i = 1-ден 16-ға дейін ‘ санағыш i – бөлшектің бөлгіші

S = S + 1/i ‘ соманың жинақталуы

«S =» басып шығару; S ‘ пішінге S сомасын шығарыңыз

i санағыштың әрбір мәні үшін 1/i өрнегі 1-ден бастап қатардың элементтерін ретімен құрайды.

9.3-мысал . Элементтер қатарының қосындысын есептеу
.

Бағдарлама фрагменті:

S = 0 ‘ S – қатардың қосындысы

i = 1-ден 18-ге дейін ‘ санағыш i – алым

S = S + i/(i + 1) ‘ бөлгіш алымнан 1 артық

«S =» басып шығару; S ‘ пішінге S сомасын шығарыңыз

9.4-мысал . Қосындыны есептеу: 5 + 8 + 11 + … + 32 + 35

Бағдарлама фрагменті:

S = 0 ‘ S – қатардың қосындысы

i = 5-тен 35-ке дейін 3-қадам ‘ арифметикасын аламыз _

3-бөлгіші бар прогрессия

«S =» басып шығару; С

9.5-мысал. Берілген х үшін қосындыны есептеу:

Есепті талдау Х дәрежесі 1-ден 10-ға дейін өзгеретінін көрсетеді. Бұл жағдайда Х коэффициентіндегі алым дәрежеден 1-ге, ал бөлгіш 2-ге артық. есептегіш i. Содан кейін сіз келесідей бағдарлама жасай аласыз (фрагмент):

S = 1 ‘ S – қатардың қосындысы

i = 1-ден 10-ға дейін санауыш i сияқты, дәреже X-де өзгереді

S = S + (-1)^i*(i + 1)*x^i / (i + 2)

«S =» басып шығару; С

ЦиклдерүшінКелесіүшін пайдаланыладыкіріс, шығыс Жәнемассивтерді өңдеу .

9.6-мысал. B( жиым элементтерінің мәндерін енгізу және шығаруН).

Бағдарлама фрагменті:

‘ N айнымалысына мән беруді өткізіп жібереміз, _

txtN мәтін өрісіндегі пішінге енгізілген:

B(i) = InputBox("B(" & i & ") элементін енгізіңіз", _

«В кіріс массиві(» & N & «)»)

"" басып шығару; B(i);

Функция InputBox() жабу түймесі, көрсетілген хабарлама, енгізу өрісі, түймелері бар диалогтық терезені көрсетеді Жарайды,Бас тарту,берілген тақырыппен (немесе онсыз). Егер 12 саны енгізілсе - N массивінің өлшемі, онда біздің мысалда ол бірінші рет пайда болған кезде бұл терезе келесідей болады:

Көріп отырғанымыздай, хабарлама B(1) элементін енгізіңізмәтін жолағына 1-ші элементтің мәнін енгізуді ұсынады. Бұл терезе 12 рет пайда болады, себебі массив 12 элементтен тұрады. Бұл пішін тақырыбынан туындайды. Шақырудағы B(i) элементінің индексі 1-ден 12-ге дейін өзгереді.

Пішінде B(N) массивінің элементтерінің мәндерін ғана көрсеткіңіз келсе, онда цикл денесі бір оператордан тұрады:

Жиым элементтерін оларда кейбір әрекеттерді орындау үшін қарау For...Next циклінің операторы арқылы да орындалады.

берейік бір өлшемді массивтерді өңдеу мысалдары.

9.7-мысал . B массивіндегі максималды элементті анықтау(М).

Бастапқы деректерді енгізуді және нәтижелерді шығаруды қоспағанда, біз алгоритмді қысқаша сипаттаймыз:

    Bmax айнымалысын жариялайық, онда массивтің бірінші элементінің мәнін енгіземіз және Imax айнымалысын, оған 1 – массивтің бірінші элементінің индексін тағайындаймыз.

    Циклде For...Next операторының көмегімен 2-шіден бастап массивтің барлық элементтерін қарастырамыз. If...Then операторының көмегімен олардың мәндерін Bmax айнымалысында сақталған мәнмен салыстырамыз.

    Егер массив элементінің мәні Bmax мәнінен үлкен болып шықса, онда Bmax мәніне осы элементтің мәні, ал Imax мәніне осы массив элементінің индексі тағайындалады.

Цикл аяқталғаннан кейін Bmax айнымалысы максималды элементтің мәнін, ал Imax оның индексін (санын) қамтиды.

Алгоритмнің осы бөлігіне арналған бағдарлама.

Bmax = B(1): Imax = 1

Егер B(i) > Bmax болса, Bmax = B(i): Imax = i

9.8-мысал. Массивтің оң элементтерінің қосындысын, көбейтіндісін және санын анықтауD(М).

Айнымалылар: S, P, K – сәйкесінше оң элементтердің қосындысы, көбейтіндісі және саны.

Алгоритммұндай анықтама:

    S және K айнымалысына нөлді, ал P айнымалысына 1 мәнін береміз. Ереже бойынша қосынды жинақталған айнымалылар, мұнда ол S және k, әрқашан цикл алдында нөлге, ал айнымалылар өнім есептелетін 1 тағайындалады.

    For...Next циклін қолданып, массивтің барлық элементтерін аралап, олардың оң екенін тексереміз (D(i) > 0).

    Егер элемент оң болып шықса, онда оның мәнін S қосындысының мәніне қосып, жаңа қосындыны сол айнымалыға сақтаймыз. Р айнымалысын элементтің оң мәніне көбейтеміз және оны Р айнымалысында сақтаймыз. Ал біз K айнымалысына 1 қосып, жаңа мәнді сол айнымалыға сақтаймыз

БағдарламаАлгоритмнің бұл бөлігі келесідей көрінеді:

S = 0: P = 1: K = 0

Егер D(i) > 0 болса

S = S + D(i) ‘ сома осылай жинақталады _

D(i) массив элементтерінің оң мәндері

P = P*D(i) ‘ оң көбейтіндісінің анықтамасы

‘ массив элементтері

K = K + 1 ‘ бұл оператор САНАУШЫ деп аталады, мінекей

‘ оң массив элементтерінің санын анықтайды

9.9-мысал. Тақ массив элементтерінің қосындысын, көбейтіндісін, санын және орташа мәнін табуD(М).

Міне, осындай анықтамаға арналған бағдарламаның фрагменті.

S = 0: P = 1: K = 0

Егер D(i) Мод 2<>0 Содан кейін

Ssr = S/k ‘ тақ элементтердің орташа мәнін есептеу

Бұл бағдарлама фрагментін 9.8-мысалдағы бағдарламамен салыстырыңыз. Бұл бағдарлама алдыңғысын толығымен дерлік қайталайды. Тек If операторындағы шарт өзгерді. ШартD(i) Мод 2<>0 D(i) массивінің 2-ге біркелкі бөлінбейтін элементтерін, яғни тақ элементтерді іздейтінімізді білдіреді. Егер D(i) Mod 2 = 0 шартын тексерсек, онда массивтің жұп элементтерін таңдаймыз.

Белгілі болғандай, бөлу Модбөлудің қалған бөлігін бүтін сандармен береді. Мысалы, d = 34Mod4 операторын орындағаннан кейін d айнымалысы 2-ге тең болады. Сондықтан 4-ке еселік массив элементтерін таңдау үшін D(i) Mod 4 = 0 шартын тексеру керек. Шарт келесідей болады: басқа сандарға еселік элементтерді іздесек, ұқсас болады. Бұл басқа сандар 4 орнына жазылады.

Мысал 9.10. Массив элементтерін жазуР(Н), 5-ке еселіктерді басқа массивке енгізіп, жаңа массивті пішінге шығарады.

Басқа массивті белгілейік, мысалы, R5(N). Бұл жаңа массивтің өлшемін бастапқымен бірдей деп қабылдау керек, өйткені төтенше жағдайда барлық элементтер 5-ке еселі болуы мүмкін.

Мәселе алгоритмі:

    Есептегішті қалпына келтіру k. For...Next цикл операторының көмегімен R(N) массивінің барлық элементтерін қарастырамыз.

    Әрбір элементті If...Then операторы арқылы және массив элементін Mod бойынша бөлу арқылы 5-ке еселілігін тексереміз.

    Егер элемент 5-ке еселік болса, онда k=k+ 1 типті санауыштың көмегімен 1-ден бастап R5(N) массивінің индекстерін құрастырамыз және оны осы басқа –R5(N) массивіне жазамыз.

    Егер k нөлден өзгеше болса, пішінде R5() массивін көрсетіңіз.

    Егер k нөлге тең болса, біз: «5-ке бөлінетін элементтер жоқ» шығарамыз.

Бағдарлама фрагменті:

Егер R(i) Mod 5 Онда k = k + 1: R5(k) = R(i)

Егер к<>0 Содан кейін

«5-ке бөлінбейтін элементтер жоқ» басып шығару

Циклдерді басқа ілмектер ішінде кірістіруге болады.

Жұмысты көрсетейік кірістірілген ілмектер . Төмендегі бағдарлама i, j және k цикл санауыштарының мәндерін көрсетеді. i, j, k шығыстарынан кірістірілген циклдар қалай орындалатыны белгілі болады.

Жеке қосалқы frmCycle_DblClick()

ScaleMode = 4 ‘бірлік – символдар

i = 1-ден 3-ке дейін сыртқы цикл үшін

"i =" басып шығару; мен;

j = 1-ден 4-ке дейін ‘1-ші кірістірілген цикл үшін

CurrentX = TextWidth("i = 1 ") + 5

"j =" басып шығару; j;

CurrentX = TextWidth("i = 1 j = 1 ") + 7

k = 1-ден 5-ке дейін ‘2-ші кірістірілген цикл үшін

Көрсетілген пішінде (1-сурет) барлық үш циклдің есептегіштерін шығару нәтижелері көрсетілген: сыртқы цикл – санауыш i, бірінші кірістірілген цикл – j санауышы және екінші, ең ішкі цикл – k санауыш. Көріп отырғанымыздай, ең баяу есептегіш - сыртқы цикл(poi), және «Ең жылдам» - ең ішкі циклдің есептегіші (сәйкеск).

Бағдарлама frmCicli пішінінде тышқанның сол жақ батырмасын екі рет басқаннан кейін орындалады.

CurrentX, CurrentY – Print әдісі арқылы ақпаратты көрсету үшін бастапқы нүктенің X, Y координаттарын анықтайтын пішін қасиеттері (формадағы X және Y осьтерінің орналасуын 1-суретті қараңыз).

TextWidth() – қос тырнақшаға аргумент ретінде функцияда көрсетілген мәтіннің енін қайтаратын функция.

Кірістірілген циклдар екі өлшемді массивтерді (матрицаларды) өңдеу кезінде қолданылады. Бірақ кейбір тапсырмаларда, екі өлшемді массивтің элементтерін енгізу мен шығаруды қоспағанда, сіз өзіңізді бір циклмен шектей аласыз. Матрицалық бағдарламалаудың кейбір мысалдарын қарастырайық.

9.11-мысал. Бүтін сандардың матрицасын (екі өлшемді массив) енгізу және шығаруintA(Н).

Матрицаны енгізуге болады жолдар және бағандар бойынша . Бұл оңайырақ - жол бойынша жол, егер сіз массив элементтерінің шығысын олар енгізілгеннен кейін бірден пішінге бағдарламаласаңыз.

Матрицаны енгізу және шығарусызық бойынша - фрагмент 1.

Dim M бүтін сан, N бүтін сан, i бүтін сан, j бүтін сан

Dim intA() Integer ‘ динамикалық массивті жариялайды

M = Val(txtN.Text) ‘ M – жолдар саны

N = Val(txtN.Text) ‘ N – бағандар саны

ReDim intA(M, N) Integer ретінде ‘ алапты қайта анықтаңыз

i = 1 To M ‘ үшін i оның мәнін толық болғанша сақтайды

‘ j ішіндегі кірістірілген цикл орындалмайды

"" басып шығару; intA(i, j); ‘ жол бойынша шығару

Print ‘ жаңа жолдың басына өтіңіз

Матрицаны бағандар бойынша енгізу үшін сыртқы циклды j (баған нөмірлерін көрсетеді), ал ішкі циклды i (жол нөмірлерін көрсетеді) жасау керек.

Матрицаны енгізу және шығарубағандар бойынша фрагмент 2.

PrY = 2500: CurrentY = PrY ‘ PrY бастаудың Y координатасын орнатады

‘ пішіндегі әрбір бағанның бірінші элементін көрсетеді

j = 1 үшін N ‘ j толық болғанша өз мәнін сақтайды

‘i ішіндегі кірістірілген цикл орындалмайды

intA (i, j) = InputBox("intA(" & i & "," & j & ") элементін енгізіңіз", _

"IntA матрицасын енгізу(" & M & "," & N & ")")

Басып шығару қойындысы(6 * j); intA(i, j) ‘ бағандар бойынша шығару

Бірінші элементті көрсету үшін CurrentY = PrY '

' келесі баған

Бұл екінші бағдарлама фрагменті бірінші фрагменттің алғашқы 5 жолын қайталамайды. Tab(6 * j) функциясы форманың сол жақ шетінен бастап жолдағы (таңбалармен) шығыстың басын орнатады. Мұндағы PrY координатасы 2500 айналдыруға тең, бірақ басқа мәнді таңдауға болады.

9.12-мысал . Жиым элементінің мәндерін ретке келтіруВ(Н) жоғарылау.

Массивтерге тапсырыс берудің бірнеше алгоритмдері бар. Міне, олардың бірі: кірістірілген циклдарды пайдалануүшінКелесібіз элементтерді біріншіден соңғыға дейін таңдаймыз және олардың әрқайсысын кейінгі элементтермен салыстырамыз; егер келесі элемент таңдалған элементтен кішірек болып шықса, біз оларды ауыстырамыз.

Бұл алгоритмді жүзеге асыратын бағдарламаның фрагменті:

i = 1 үшін N – 1

j = i + 1 үшін N

Егер V(j)< V(i) Then P = V(i): V(i) = V(j): V(j) = P

Бағдарламаның осы фрагментін түсіндірейік.

i санағышы бар сыртқы циклды пайдаланып, келесі элементтермен салыстыру үшін V(i) элементін таңдаймыз. j есептегіші бар ішкі цикл салыстыру үшін V(j) келесі элементтерін таңдайды. Бастапқы j мәні i+ 1. Бұл кейінгі элементтердің бірінші элементі.

V(i) және V(j) элементтерінің мәндерін алмасу үшін біз кейбір P айнымалысын енгіземіз, онда массив элементтерінің бірінің мәнін уақытша «жасырамыз» (бағдарламада бұл V(i) )). Содан кейін V(i) элементіне V(j) элементінің мәні, ал V(j) элементіне P айнымалысында сақталатын V(i) мәні тағайындалады. Егер біз P-де V(j) мәнін «жасырсақ», онда мәндерді алмасу коды келесідей болады: P = V(j): V(j) = V(i): V(i) = P Нәтиже өзгермейді.

Кімге алапты кему ретімен сұрыптаңыз, тексеру шартын V(j) > V(i) түрінде жазу жеткілікті, яғни теңсіздік белгісін басқасына өзгерту.

Егер массив сандық емес, жол болса және фамилиялар массив элементтеріне енгізілсе, онда 9.12 мысалында бағдарламаны пайдалана отырып, фамилиялар тізімін алфавит бойынша ретке келтіруге болады. Компьютерде қолданылатын алфавиттің әріптері үшін келесі теңсіздіктер дұрыс: А.< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

9.13-мысал . Матрицаның тақ бағандары үшін оң элементтердің қосындысын есептеуФ(М, Н) және сомаларды пішінге шығарыңыз.

Бағдарлама алгоритмі:

    2-қадаммен сыртқы циклды пайдалана отырып, бірінші бағаннан бастап матрицаның тақ бағандарының индексін қалыптастырамыз.

    Біз оң элементтердің қосындысы жиналатын S қосындысын қалпына келтіреміз.

    Ішкі циклде массив элементінің белгісін тексереміз.

    Егер массив элементі оң болса (> 0), S қосындысын есептейміз.

    Ішкі цикл аяқталғаннан кейін пішінде S қосындысын көрсетеміз.

Фрагмент бағдарламалар:

j = 1 үшін N 2-қадам

Егер F(i, j) > 0 болса, S = S + F(i, j)

«Баған сомасын» басып шығару; j; “:”; S ‘ j – баған нөмірі!

Кірістірілген циклдар ұйымдастыруға мүмкіндік береді опцияларды санау және аналитикалық жолмен шешілмейтін мәселелерді шешу. Іздеу нәтижесінде шешім нұсқалары алынады, олардың ішінен мәселенің шарттарына сәйкес келетін біреуі немесе бірнешеуі таңдалады.

9.14-мысал. 1801 рубль бар. 31 рубльге қанша шоколад сатып алуға болады? және барлық ақшаны толығымен жұмсау үшін 18 рубльге тоқаш.

Бағдарлама:

Сома = 1801

Барлық шоколадтар = қосынды\31: AllBulks = қосынды\18

i = 1 үшін AllChocolates

j = 1 үшін VseBulk

Бағасы = i * 31 + j * 18 ‘сатып алудың жалпы бағасы

Баға = 1801 болса, онда

«Шоколад:» басып шығару; мен; Tab(19); "Булок:"; j

Орыс тілінде аталған айнымалыларды қолданатын бағдарламаны түсіндірейік.

Біріншіден, біз шоколадтың максималды саны қандай екенін анықтаймыз немесе бүкіл сомаға сатып алуға болатын жай ғана орамдар. Шоколадтар мен орамдардың санын іздеу санын шектеу үшін біз AllChocolates және AllBulks алынған мәндерін қолданамыз. Шоколадтар санының (i) және орамдар санының (j) әрбір мәні үшін оларды сатып алудың жалпы бағасын анықтаймыз. Есептелген Баға 1801 болса, онда таңдалған опция мәселенің шешімдерінің бірі болып табылады.

Tab() функциясы осы функциядан кейінгі ақпарат пішіннің шетінен қай позициядан көрсетілетінін көрсетеді. Егер Tab(19) болса, онда 19-шы позициядан.

Бағдарлама 3 ықтимал сатып алу опциясын көрсетеді:

Шоколад 7, орам 88

Шоколад 25, орам 57

Шоколад 43, тоқаш 26

Егер сіз біржақты жауап бергіңіз келсе, қосымша шартты тұжырымдауыңыз керек. Мысалы, «шоколадқа қарағанда тоқаш аз сатып алынды». Сонда жалғыз шешім 3-ші нұсқа болады.

Кірістірілген циклдік бағдарламалауды қолдана отырып, қарапайым күшпен шешуге болатын көптеген математикалық есептер бар.

Шешім қабылдау құрылымдарынан басқа цикл деп аталатын басқару құрылымының тағы бір түрі бар.

Циклалгоритмдік құрылым, оның көмегімен операторлар блоктарының бірнеше рет қайталануы жүзеге асырылады.

Visual Basic-те циклдердің үш негізгі түрі бар, олар For:Next, Do:Loop және While:Wend конструкциялары арқылы жүзеге асырылады.

Үшін: Келесі цикл. Берілген мәлімдемелер блогының қайталану саны алдын ала белгілі болған кезде қолданылады. Бұл дизайн келесідей көрінеді:

Есептегіш үшін = бастапқы мән Соңғы мәнге Операторлар1 Операторлар2 Келесі [есептегіш]

Жоғарыдағы операторлар бірінші рет орындалғанда, санауыш айнымалыға бастапқы мән беріледі, одан кейін екі опция мүмкін болады. Егер шарт санауышы > соңғы мәнді тексеру нәтижесінде True мәні алынса, онда цикл аяқталады және операторлар1 және операторлар2 блоктары ешқашан орындалмайды. Екінші жағынан, егер шартты тексерудің нәтижесі False болса, онда бұл жағдайда оператор блоктары бірінші рет орындалады, содан кейін цикл басына көшу орын алады. Әрі қарай, санауыш айнымалының мәні Step түйінді сөзінен кейін орналасқан қадамға артады (егер ол жоқ болса, қадам = 1 орнатылады). Осыдан кейін шарт есептегішінің ақиқаты > соңғы мән және т.б. қайтадан тексеріледі, циклдің соңы осы тексерудің нәтижесі True мәні болған сәтте орын алады.

Кейбір қосымша шарттар орындалған кезде «төтенше жағдай» циклін тоқтату қажет. Бұл жағдайда цикл ішінде әдетте орналасқан Exit:For қызметтік тіркесін пайдалану керек бақылау құрылымы, Мысалы:

Шарт болса, Шығу үшін

Егер шартты тексеру нәтижесі True болса, онда циклдің орындалуы тоқтатылады, ал оператор1 блогы қайтадан орындалады, бірақ оператор2 блогы орындалмайды.

Орындау: цикл. Ол цикл денесі операторларының қайталану саны алдын ала белгісіз болған жағдайда қолданылады. Бұл дизайнның төрт түрі бар. Алғашқы екеуін пайдаланған кезде цикл не көп рет орындалады, не мүлде орындалмайды.

Do Until шарты цикл операторлары

Егер шартты тексеру нәтижесі False болса, онда операторлар блогы орындалады, әйтпесе Loop қызмет сөзінен кейін орналасқан операторға көшу жүзеге асырылады. Екінші жағынан, егер шарттың бірінші сынағы True нәтижесін қайтарса, онда цикл бір рет болса да орындалмайды.

Do while шартының цикл мәлімдемелері

Егер шарт ақиқат болса, онда операторлар блогы орындалады, ал егер ол жалған болса, яғни тексеру нәтижесі False болса, онда цикл бір рет болса да орындалмайды.

Егер соңғы екі конструкция пайдаланылса, цикл кем дегенде бір рет орындалады.

Шартқа дейін мәлімдемелер циклін орындау

Мәлімдеме блогы шартты тексеру нәтижесі False болғанша орындалады, әйтпесе цикл аяқталады.

Do операторларының циклі while шарты

Егер шарт жалған болса, операторлар блогы орындалады, бірақ ол ақиқат болса, т.б. Тексеру нәтижесі True, содан кейін цикл аяқталады.

While циклі: Вэнд. Ол сонымен қатар цикл денесінің мәлімдемелерінің қайталану саны алдын ала белгісіз болған кезде қолданылады және келесі синтаксиске ие:

Шарт Wend мәлімдемелері

Шартты тексеру нәтижесі True болса, онда операторлар блогы орындалады, әйтпесе Wend қызмет көрсету сөзінен кейін орналасқан операторға көшу жүргізіледі. Екінші жағынан, егер шарттың бірінші сынағы False нәтижесін қайтарса, онда цикл тіпті бір рет орындалмайды.

VBA. Циклдарды ұйымдастыру.

Цикл операторлары әрекетті немесе әрекеттер тобын белгілі бір рет қайталау үшін пайдаланылады. Қайталанулар санын (цикл итерациялары) алдын ала анықтауға немесе есептеуге болады.

VBA циклдік құрылымдардың екі түрін қолдайды:

  1. Белгіленген қайталау саны бар циклдар ( қарсы ілмектер).
  2. Шексіз қайталанатын циклдар ( шартты циклдар).

Циклдердің барлық түрлері үшін тұжырымдама қолданыладыцикл денесі , ол циклдің бастау және аяқтау операторларының арасында орналасқан операторлар блогын анықтайды. Цикл денесінің операторларының орындалуының әрбір қайталануы шақырыладыитерация

Бекітілген циклдар

VBA бекітілген циклды ұйымдастыруға арналған екі басқару құрылымын қамтамасыз етеді: For ... Next (санауышпен цикл) және For Every ... Next (санақпен цикл).

Оператор үшін... Келесі Бұл берілген итерациялар санын орындайтын әдеттегі есептегіш цикл. For...Next операторының синтаксисі:

үшін<счетчик> = <начЗначение>Бұл<конЗначение>

<блок операторов>

Келесі [<счетчик>]

For...Next операторын қолдану мысалы.

Листинг 1. Оператор үшін ... Келесі

‘ ТАПСЫРМА: Пайдаланушыдан екі санды қабылдайтын программа құру.

‘ Осы екі санмен көрсетілген ауқымдағы барлық сандарды қосады, содан кейін

' нәтиже сомасын көрсетеді.

Қосымша үлгі 7()

Dim i As Integer ‘цикл есептегіші

Dim sStart ‘ бастапқы есептегіш мәні

Dim sEnd ‘соңғы есептегіш мәні

Dim sSum As Long ‘ нәтиже сомасы

sStart = InputBox («Бірінші санды енгізіңіз:»)

sEnd = InputBox («Екінші санды енгізіңіз:»)

sSum = 0

i = CInt(sStart) және CInt(sEnd) үшін

sSum = sSum + i

Келесі i

MsgBox “& sStart & ” пен “ & sEnd & ” аралығындағы сандардың қосындысы: “ & sSum

Аяқтау қосалқы

Әрқайсысы үшін цикл мәлімдемесі... Келесіобъект типті операторлар санатына жатады, яғни. ең алдымен жинақтарға қатыстынысандар, сонымен қатар массивтер . Циклдің денесі массивтегі немесе жинақтағы элементтер санына сәйкес келетін бекітілген рет саны орындалады. Әрбір... Келесі мәлімдеме пішімі:

Әрқайсысы үшін<элемент>жылы<группа> <блок операторов>Келесі [<элемент>]

Шартты циклдар (анықталмаған циклдар)

Шартты циклдар қайталанатын әрекеттерді тек белгілі бір жағдайларда орындау қажет болғанда қолданылады. Итерациялар саны анықталмаған және жалпы алғанда нөлге тең болуы мүмкін (атап айтқанда, алғы шарты бар циклдар үшін). VBA әзірлеушілерге шартты циклдарды ұйымдастыру үшін бірнеше басқару құрылымдарын ұсынады:

  • Тексерілетін шарт түріне және осы тексеруді аяқтауға кететін уақытына қарай ерекшеленетін Do..Loops төрт түрі.
  • Үздіксіз цикл While... Wend.

Do while... циклі тән алғы шарты бар цикл. Шарт циклдің денесі орындалмас бұрын тексеріледі. Цикл оған дейін жұмысын жалғастырады<условие>орындалады (яғни True мәні бар). Тексеру басында орындалатындықтан, цикл денесі ешқашан орындалмауы мүмкін. Do while... цикл пішімі:

Әзірге жасаңыз<условие>

<блок операторов>

Цикл

Листинг 2. Do while... циклі

‘ ТАПСЫРМА: Пайдаланушы енгізуін қажет ететін бағдарлама құру

«сандардың ерікті тізбегі. Енгізуді тоқтату керек

‘ енгізілген тақ сандардың қосындысы 100-ден асқаннан кейін ғана.

Қосымша үлгі8()

Dim OddSum Integer ‘тақ сандардың қосындысы ретінде

Dim OddStr As String ‘тақ сандары бар жол

Dim Num ‘ енгізілген сандарды қабылдау үшін

OddStr = “” ‘шығыс жолын инициализациялау

OddSum = 0 ‘OddSum инициализациясы

OddSum кезінде орындаңыз< 100 ‘начало цикла

Num = InputBox («Санды енгізіңіз: «)

Егер (Num Mod 2)<>0 Содан кейін ‘паритет тексеру

OddSum = OddSum + Num ‘тақ сандардың қосындысының жинақталуы

OddStr = OddStr & Num & ” ”

Аяқтау болса

Цикл

‘тақ сандары бар жолды басып шығару

MsgBox prompt:=”Тақ сандар: ” & OddStr

Аяқтау қосалқы

Do... цикл while операторыұйымдастыруға арналғанпостшартпен цикл. Шарт циклдің денесі кем дегенде бір рет орындалғаннан кейін тексеріледі. Цикл өз жұмысын жалғастырады<условие>ақиқат болып қалады. Do... Пішімдеу кезінде цикл:

Жасаңыз<блок операторов>Әзірге цикл<условие>

Листинг 3. Постшартпен цикл

‘ ТАПСЫРМА: «Санды тап» ойынына бағдарлама құру. Бағдарлама кездейсоқ болуы керек

‘ 1-ден 1000-ға дейінгі диапазондағы санды генерациялау тәсілі, пайдаланушы қажет

'бұл санды тап. Бағдарлама әрбір енгізілген сан үшін кеңесті көрсетеді

‘ «көп» немесе «аз».

Қосымша үлгі8()

Кездейсоқ таймер ‘кездейсоқ сандар генераторын инициализациялау

Dim msg As String ‘ хабарлама жолы

Құпия сан ұзындықта, пайдаланушы нөмірі нұсқа ретінде

Бастау: SecretNumber = Round(Rnd * 1000) ‘ компьютерде жасалған сан

UserNumber = Пайдаланушы енгізген бос ‘ нөмірі

Ойын ойнау

Case True таңдаңыз

Case IsEmpty(UserNumber): msg = "Санды енгізіңіз"

Case UserNumber > SecretNumber: msg = «Тым көп!»

Істің пайдаланушы нөмірі< SecretNumber: msg = “Слишком мало!”

Таңдауды аяқтау

UserNumber = InputBox(пром:=msg, Тақырып:="Санды тап")

UserNumber while циклі<>Құпия нөмір

' сараптама

Егер MsgBox («Қайта ойнайсыз ба?», vbYesNo + vbQuestion, «Сіз таптың!») = vbYes Содан кейін

Бастау

Аяқтау болса

Аяқтау қосалқы

Циклдер Do Until... Цикл және Do... Цикл дейін бұрын талқыланған шартты циклдердің инверсиялары болып табылады. Жалпы алғанда, олар бірдей жұмыс істейді, тек шарт жалған болса, цикл денесі орындалады (яғни.<условие>=Өтірік). дейін орындаңыз... Цикл пішімі:

дейін орындаңыз<условие> <блок операторов>Цикл

Do... Цикл пішімі:

<блок операторов>

дейін цикл<условие>

Практикалық тапсырма:10 және 11 тізімдеріндегі бағдарламаларды инверттелген цикл мәлімдемелерін пайдаланып қайта жазыңыз.

Цикл while...Wend шартты циклдерге де қолданылады. Бұл оператор Do While... цикл құрылымына толық сәйкес келеді. While...Wend циклінің пішімі:

Әзірге<условие>

<блок операторов>

Вэнд

Бұл оператордың айрықша ерекшелігі - цикл денесінің аяқталуын (үзілуін) мәжбүрлеудің мүмкін еместігі (Exit Do операторы While ... Wend циклінде жұмыс істемейді).

Циклды үзу

Итерацияны ерте аяқтау және циклден шығу үшін Exit операторы қолданылады. Бұл оператор While... Wend-тен басқа кез келген циклдік құрылымда қолданылады. Циклды үзу үшін Exit пайдаланудың жалпы синтаксисі:

<начало_цикла>

[<блок операторов1>]

Шығу (Орындау үшін)

[<блок операторов2>]

<конец_цикла>

Exit операторы орындалған кезде цикл үзіліп, басқару оператордан кейінгі операторға ауысады.<конец_цикла>. Цикл денесінде бірнеше Exit операторлары болуы мүмкін.

Листинг 4. Циклдан мәжбүрлеп шығу

Қосымша үлгі9()

i = 1 үшін 10000000 дейін

Егер i = 10 болса, Exit For ‘ есептегіш 10-ға жеткенде циклден шығыңыз

Келесі

Топтамадан сабақ: « Visual Basic.NEN тілінде бағдарламалаумектеп оқушыларына арналған»

Сіз ComboBox басқару элементімен таныс болдыңыз.
Бұл сабақта біз Visual Basic.Net тілінің операторларын зерттеуді жалғастырамыз, цикл операторларына назар аударамыз.
Циклдік алгоритмдік құрылымдарүш түрі бар:

  1. цикл денесі орындалатын есептегіш циклдар белгілі бір сомабір рет;
  2. массивтерді немесе жинақтарды өңдеуге арналған циклдар;
  3. шарт ақиқат болғанда (немесе шарт ақиқат болғанша) цикл денесі орындалатын шартты циклдар.

Бұл сабақта есептегіші бар цикл операторын қарастырамыз (For . . . Next). Осы оператор арқылы жоба жазайық.

Циклесептегішпен үшін. . . Nex t қанша қайталауды орындау керектігі алдын ала белгілі болған кезде қолданылады.

Блок-схема

Оператордың жалпы көрінісі

Есептегіш үшін = Бастау мәнінен соңы мән циклінің негізгі бөлігі Келесі [Сесептегіш]

Оператордың синтаксисі келесідей: For түйінді сөзінен басталатын жол циклдің басы, ал Next түйінді сөзі бар жол циклдің соңы, олардың арасында цикл денесі болып табылатын операторлар орналасқан.

For операторын орындау алгоритмі. . . Келесі

  1. Counter айнымалысының мәні StartValue мәніне тең орнатылған.
  2. Шартты есептегіш тексерілді<= КонЗнач
  3. Егер шарт орындалса, онда цикл денесі орындалады. Counter айнымалысы қадам мәні бойынша өзгертіледі: Counter = Counter + step.
  4. Counter айнымалысы ConValue мәніне жеткенде, цикл шығады және келесі мәлімдемелер орындалады.

Бағдарламалаушы Exit For конструкциясы арқылы циклден мерзімінен бұрын шығуды ұйымдастыра алады. Бұл жағдайда цикл автоматты түрде шығады және басқару циклден кейінгі келесі пәрменге ауыстырылады.

«Депозит бойынша табыс» жобасы

Депозит бойынша кірісті есептейтін және қарапайым және күрделі пайыздарды есептеуді қамтамасыз ететін жобаны жазыңыз. Қарапайым сыйақы салым мерзімінің соңында есептеледі, күрделі сыйақы ай сайын есептеледі және салымның бастапқы сомасына қосылады, ал келесі айда жаңа сомаға сыйақы есептеледі. Ұсынылған пішін суретте көрсетілген.

Орындау технологиясы

Бұл оқулық кодты белгілі бір рет қайталау үшін For...Next циклін пайдалану жолын көрсетті.

Белгілі бір рет қайталанатын немесе қандай да бір шарт орындалғанға немесе орындалмағанға дейін процедураның кез келген әрекеттері шақырылады цикл .

Цикл құрылымына бір рет енгізілген барлық операторларды орындау процесі шақырылады цикл итерациясы.

Әрқашан белгілі бір рет орындалатын цикл құрылымдары шақырылады итерациялардың белгіленген саны бар циклдар. Цикл құрылымдарының басқа түрлері кейбір шарттар жиынтығына байланысты айнымалы санды қайталайды. Мұндай циклдар деп аталады белгісіз циклдар.

Циклдің басы мен соңы арасында орналасқан операторлар блогы шақырылады «цикл денесі».

Ең қарапайым цикл құрылымы тұрақты цикл .

For..Келесі цикл

Синтаксис

үшін есептегіш = БастауКімге Соңы
Мәлімдеме
Келесі [ есептегіш]

Есептегіш – кез келген VBA сандық айнымалысы
Бастау - санауыш айнымалы үшін бастапқы мәнді анықтайтын кез келген сандық өрнек
End – санауыш айнымалының соңғы мәнін анықтайтын сандық өрнек


Әдепкі бойынша VBA айнымалыны арттырады есептегішоператорлар циклде орындалған сайын 1-ге. Басқа мән орнатуға болады ( SterSize- ол өзгеретін кез келген сандық өрнек). есептегіш.

Негізгі сөз Келесі VBA-ға циклдің соңына жеткенін хабарлайды. Қосымша айнымалы есептегішкілт сөзден кейін Келесібірдей айнымалы болуы керек есептегіш, ол кілт сөзден кейін көрсетілген үшінцикл құрылымының басында.


Төменде ең қарапайым циклдің тізімі берілген үшін..Келесі, ол 1-ден 10-ға дейінгі сандардың қосындысын санайды:



Ал енді циклдің екі нұсқасы үшін..Келесібіреуден басқа цикл қадамын пайдалану:



Назар аударыңыз!Цикл есептегішін азайтқанда үшін..Келесіцикл санауыш айнымалы соңғы мәннен үлкен немесе оған тең болғанша орындалады, ал цикл санаушысы ұлғайған кезде, цикл санауыш айнымалы соңғы мәннен аз немесе оған тең болғанша орындалады.

Әрқайсысы үшін цикл. Келесі

Цикл Әрқайсысы үшін..Келесіцикл есептегішті пайдаланбайды. Циклдер Әрқайсысы үшін..Келесінысандар жинағы немесе массив сияқты белгілі бір топтағы элементтер қанша рет болса, сонша рет орындалады (олар кейінірек талқыланады). Басқаша айтқанда, цикл Әрқайсысы үшін..Келесітоптағы әрбір элемент үшін бір рет орындалады.

Синтаксис

Әрқайсысы үшін Элементжылы Топ
Мәлімдеме
Келесі [ Элемент]

Элемент – белгілі бір топтағы барлық элементтерді қайталау үшін қолданылатын айнымалы
Топ - жинақ нысаны немесе массив
Мәліметтер – бір, бірнеше немесе жоқ VBA операторлары (цикл денесі).