VBA циклдары. VBA ішіндегі цикл мәлімдемелері vb6 ішіндегі циклдар қарсы мысалдармен

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

Жалпы синтаксисті қарастырайық:

Есептегіш үшін = бастау Аяқтау
Операторлар
Келесі есептегіш

Есептегіш- мұнда қайталанулар саны туралы ақпаратты сақтайтын айнымалының атын белгілейміз (орындалған цикл сапарларының саны).

Бастау– санауыштың бастапқы мәні, сандық өрнек

Соңы– санауыштың соңғы мәні, өту санын көрсететін сандық өрнек.

Қадам– орындау қадамын орнатуға мүмкіндік беретін қосымша параметр. Егер бұл параметр жоқ болса, онда әрбір өтудегі есептегіш өсім бірге тең болады. Қадамды пайдалану, егер теңдеуді санау арқылы шешу қажет болса, өзекті болып табылады, сондықтан бастапқы мәнді 1, соңғы мәнді 3 және қадамды 0,2 мәніне орнатуға болады.

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

Мысалы, екі мәтіндік белгі және бір түймесі бар пішін жасаңыз, код редакторында жазыңыз:

Private Sub CommandButton1_Click() Dim i, j, a, b i = 1-ден 10-ға дейін 2-қадам a = a & i & " " Келесі i үшін j = 1-ден 10-ға дейін 3-қадам b = b & j & " " Келесі j Белгі1 .Caption = a Label2.Caption = b End Sub Private Sub UserForm_Initialize() Label1.Caption = "" Label1.FontSize = 14 Label1.ForeColor = vbBlue Label2.Caption = "" Label2.FontSize = 14 Labellormand2.For vbt.For Тақырып = "Мәндер" Соңғы ішкі

Бұл мысалда бізде әрқайсысының бастапқы және аяқталу мәндері бірдей екі цикл параметрі бар, бірақ біріншісінде 2-қадам, екіншісінде 3-қадам бар.

Қадам параметрінде сіз теріс мәнді де көрсете аласыз, бұл жағдайда есептегіш кері ретпен өседі, мысалы:

Private Sub CommandButton1_Click() Dim i, j, SummA, SummB үшін i = 1-ден 10-ға дейін SummA = SummA + i Келесі j = 10-дан 1-ге дейін -1 ҚосындыB = ҚосындыB + j Келесі Белгі1. Caption = «Тікелей тапсырыс:»&SummA Label2. Caption= "Кері реті:"&ҚосындылауБсоңы

Мұнда 1-ден 10-ға дейінгі сандардың қосындысын тура және кері ретпен есептейміз.

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

Бұл мысал келесі цикл үшін кірістірілген VBA пайдаланады. Бірінші жағдайда 1-ден 100-ге дейінгі сандардың қосындысы орын алады, ал қосынды 100 рет қайталанады. Екінші жағдайда шартты if операторын қолданып шарт жаздық – егер сома 10 мыңнан асса, циклден шығыңыз.

Жарайды, енді практикалық мысалды жазуға тырысайық - квадрат теңдеудің дөрекі күшпен шешімі:

Private Sub CommandButton1_Click() Const a = -2, b = 6, c = 20 Dim x, нәтиже, res үшін x = -10 - 10 қадам 0,5 нәтиже = a * (x * x) + b * x + c Нәтиже болса = 0 Содан кейін res = res & " " & x End If Next x Label1.Caption = "x дәл: " & res End Sub

Бұл мысалда -2, 6 және 20 мәндері бар үш тұрақты a, b және c деп жарияланды, бұл квадрат теңдеудің параметрлері (a*x*x + b*x + c = 0). Цикл x айнымалысын -10-нан 10-ға дейінгі аралықта 0,5 қадаммен өзгертеді. Әрбір итерацияда шарттың нөлге теңдігі тексеріледі, егер шарт орындалса, x айнымалысының мәні res айнымалысына жазылады. Нәтижесінде теңдеудің екі шешімі болады: -2 және 5.

Сонымен, осы мақалада біз VBA тілінің келесі циклін қарастырдық, ол бірдей әрекеттерді бірнеше рет өңдеу үшін қолданылады, келесі мақалада коллекцияларды өңдеу үшін қолданылатын келесі мақалада қарастырамыз және сол жерде біз жинақтардың өзін де қарастырады.

Цикл операторлары

VBA тілінде Есептегішпен (параметрлік) және шарты бар (итерация) циклдердің екі негізгі түрі бар.

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

Шартты циклдар бағдарламадағы кейбір әрекеттер белгілі бір шарт орындалғанша қайталануы қажет болғанда қолданылады.

Параметрі бар циклдарҮшін... Келесі

Цикл құрылымы:

Үшін Loop_Parameter = Бастапқы_мәнКімге Соңғы_мән

[Қадам қадам]

Операторлар

[шығу]

Келесі [Цикл_параметрі]

қайда үшін кілт сөз VBA (ден), циклдің басын білдіретін;

цикл_параметрінің айнымалы мәні цикл санаушысы ретінде анықталған;

Start_Value цикл параметрінің бастапқы мәнін көрсететін сан;

Негізгі сөзге VBA (бұрын) бөлу

Бастау_мәні және Аяқтау_білімі;

End_Value цикл параметрінің мәнін көрсететін сан,

Цикл қай уақытта аяқталады;

Қадам кілт сөзі VBA (қадам) үшін қолданылады

Цикл қадамының тағайындалуы, қосымша аргумент;

Қадам - ​​цикл қадамын көрсететін сан, яғни. мәні

Параметрдің мәнін арттырады (немесе азайтады).

Әр қадамда цикл. Бұл сан болуы мүмкін

теріс;

Шығу үшін Циклдан ерте шығу операторы (міндетті емес);

Келесі кілт сөз VBA (келесі) білдіреді

Циклдың соңы.

Циклдік жұмыс:

1-қадам Алдымен цикл параметрі анықталады және осы айнымалының бастапқы және соңғы мәндері есептеледі және сақталады.

2-қадам Цикл параметріне бастапқы мән тағайындалады.

3-қадам Цикл параметрінің бастапқы мәні соңғы мәнмен салыстырылады.

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

4-қадам Цикл денесі орындалады.

5-қадам Циклдің денесін орындағаннан кейін цикл параметріне келесі мән тағайындалады. 3-қадамға өтіңіз.

Ескерту.

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

1-мысал

I = 0-ден 10-ға дейін 2-қадам (I мәні 2-ге артады)

2. For…Келесі цикл кез келген жағдайға жеткенде мерзімінен бұрын тоқтатылуы мүмкін. Ол үшін циклдің дұрыс жеріне операторды орналастыру керек Exit For .

2-мысал

Dim S бүтін сан ретінде

Dim j бүтін сан ретінде

S=2

j = 1-ден 10-ға дейін

S = S + j

Егер S > 6 болса

Шығу үшін (Мән болса, циклден шығыңыз S > 6)

Аяқтау болса

Келесі j

MsgBox(S)

Шартты циклдар (итеративті)

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

VBA тілінде екі негізгі цикл бар DO...LOOP кілт сөзбен енгізілген шартпенӘзірге , және кілт сөз арқылы енгізілген шартпенДейін . Екеуі де алғы шарт немесе кейінгі шарт болуы мүмкін.

Синтаксис:

қайда түйінді сөз (do);

Әзірге кілт сөз (әлі);

Дейін кілт сөз (болғанша);

цикл циклдің аяқталуын көрсететін түйінді сөз;

<условие>логикалық өрнек, оның ақиқаты тексеріледі

Цикл денесінің әрбір орындалуының басында;

<тело_цикла>операторлардың ерікті тізбегі;

Жасаңыз... Құрылыс кезінде оқылады: шарт орындалған кезде орындаңыз. ҚұрылыстаЖасаңыз ... Әзірше

Do … Құрылымы оқылғанша: шарт орындалғанша орындай беріңіз. ДизайндаОрындау ... дейін қадамды арттыру үшін арнайы операторды жазу керек, өйткені онда дизайннан айырмашылығыҮшін , бұл автоматты түрде орындалмайды.

Негізгі сөзден кейін жазылатын шартДейін , әрбір итерацияның соңында тексеріледі (цикл денесінің орындалуынан кейін). Бұл жерде циклдегідей жұмыс істемейтінін ескеріңізӘзірге . шарт дұрыс болса (Рас ), содан кейін цикл аяқталады. Шарт орындалмаса (жалғанЖалған ), содан кейін цикл денесі қайтадан орындалады.

1-мысал

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

Тапсырманы орындау технологиясы:

1. Бастапқы деректер:мен З

Нәтиже: S  R .

2. Жобаның стандартты модуліне алдын ала шарты бар циклды пайдаланып келесі пайдаланушы процедурасын теріңізкезінде:

жиынтық()

Dim S бүтін сан ретінде

Күңгірт i бүтін сан ретінде

S=0

i = 1

Мен болғанша жасаңыз<= 10

S=S+i^2

i = i + 1

цикл

MsgBox(S)

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

3. Жобаның стандартты модуліне алдын ала шарты бар цикл арқылы келесі пайдаланушы процедурасын теріңізДейін :

жиынтық()

Dim S бүтін сан ретінде

Күңгірт i бүтін сан ретінде

S=0

i = 1

i > 10 болғанша орындаңыз

S=S+i^2

i = i + 1

цикл

MsgBox(S)

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

4 Жобаның стандартты модуліне кейінгі шарты бар циклды пайдаланып келесі пайдаланушы процедурасын теріңізкезінде:

жиынтық()

Dim S бүтін сан ретінде

Күңгірт i бүтін сан ретінде

S=0

i = 1

S=S+i^2

i = i + 1

i кезінде цикл<= 10

MsgBox(S)

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

5 Жобаның стандартты модуліне кейінгі шарты бар циклды пайдаланып келесі пайдаланушы процедурасын теріңізДейін :

жиынтық()

Dim S бүтін сан ретінде

Күңгірт i бүтін сан ретінде

S=0

i = 1

S=S+i^2

i = i + 1

i > 10 дейін цикл

MsgBox(S)

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

Соңғы жаңарту: 30.10.2015

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

Үшін...Келесі цикл

Бұл цикл белгілі бір рет орындалады және бұл сан санауыш арқылы орнатылады:

i үшін Integer = 1-ден 9-ға дейін Console.WriteLine("(0) квадраты (1)", i, i * i) Келесі

Мұнда i айнымалысы санауыш рөлін атқарады. Сөзден кейін Кімгеесептегіштің максималды мәнін қоямыз. Әрбір цикл сайын санауыш мәні біреуге артады. Және бұл мән кейінгі мәнмен салыстырылады Кімге. Егер бұл екі мән тең болса, цикл аяқталады.

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

i үшін Integer = 1-ден -9-ға дейін Қадам -1 үшін j As Integer = 1-ден 9-ға дейін Console.WriteLine("i және j көбейтіндісі (0)", i * j) j += 1 Келесі Келесі

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

Әрбір...Келесі цикл үшін

For Every циклі массив немесе жинақ сияқты белгілі бір топтағы элементтерді қайталайды. Бізде Integer типті массив бар делік және бізге бұл массивті кездейсоқ мәндермен инициализациялау керек, содан кейін оның барлық элементтерін экранда көрсету керек:

"Бес саннан тұратын массив жасау Dim nums(4) Integer As Integer Dim r As New Random() "алапты инициализациялау For i As Integer = 0 to nums.Length - 1 nums(i) = r.Next(100) Next " Элементтер жиымын көрсету Әрбір i үшін бүтін сан ретінде nums Console.Write("(0) ", i) Келесі

For Every операторында алдымен массив элементтерінің мәндерін қабылдайтын айнымалы мәнді көрсетеміз. Және кілт сөзден кейін жылыБарлық элементтер бойынша сұрыптағыңыз келетін топты көрсетіңіз.

while циклі

While циклінде ол While сөзінен кейін көрсетілген белгілі бір шарт орындалғанша орындалады:

Dim j ретінде бүтін сан = 10 кезінде j > 0 Console.WriteLine(j) j -= 1 Аяқтау кезінде

Цикл жасау

Do циклі, While циклі сияқты, белгілі бір шарт орындалғанша орындалады. Дегенмен, оның әртүрлі формалары бар. Сонымен, келесі мысалда алдымен шарт тексеріледі, содан кейін циклде анықталған код блогы орындалады:

Dim j бүтін сан ретінде = 10 Do while j > 0 Console.WriteLine(j) j -= 1 цикл

Бұл жағдайда j мәні нөлден үлкен болған кезде цикл орындалады. Бірақ сөздің орнына While сөзі қолданылатын тағы бір жазба бар Дейін, және цикл белгілі бір шарт орындалғанша, яғни j мәні нөлден аз болғанша орындалады:

Dim j бүтін сан = 10 ретінде j дейін орындаңыз< 0 Console.WriteLine(j) j -= 1 Loop

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

Dim j бүтін сан ретінде = -1 Console.WriteLine(j) j -= 1 цикл j дейін< 0 "либо Do Console.WriteLine(j) j -= 1 Loop While j > 0

Жалғастыру және шығу мәлімдемелері

Көбінесе циклдің аяқталуын күтпеу керек, бірақ белгілі бір шарт орындалса, циклден дереу шығу керек. Ол үшін операторды пайдаланыңыз Шығу, одан кейін шығу үшін цикл түрі көрсетіледі, мысалы, Exit Do (Exit while) :

Dim r ретінде Жаңа Кездейсоқ() Dim сан бүтін сан ретінде = r.Келесі(100) i үшін бүтін сан = 0-ден 100 санға дейін -= 1 Егер num< 50 Then Exit For Next Console.WriteLine(num)

Тағы бір тапсырма бар - циклден емес, ағымдағы өтуден немесе итерациядан шығып, келесіге өту. Ол үшін Continue операторын пайдаланыңыз, содан кейін олар шығу жасалатын цикл түрін көрсетеді, мысалы, Continue while:

Dim r ретінде Жаңа Кездейсоқ() Dim сан бүтін сан ретінде = r.Келесі(100) i үшін бүтін сан = 0-ден 10 санға дейін -= 7 Егер num< 50 AndAlso num >25 Содан кейін Console.WriteLine(num) Келесіні аяқтау үшін жалғастырыңыз

Бұл жағдайда циклдің әрбір өтуінде num санынан 7 санын алып тастаймыз, содан кейін num саны 25-тен 50-ге дейінгі интервалға жататынын көреміз. Ал егер ол болса, циклдің жаңа итерациясына өтеміз және болмаса, біз оны экранда көрсетеміз.

Цикл командасы – бұл нұсқау, одан қандай командалар жиынын (бұл командалар жиынын цикл денесі деп атайды) қайталап орындау керек және циклдің орындалуын тоқтату ережесі қандай екені анық.

7.2.1. Параметрлік цикл үшін… Келесі

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

Цикл синтаксисі: Үшін CPI=NHCP Кімге KZPC[ қадам CHIC] Цикл денесі (бір немесе бірнеше нұсқаулар) Келесі[ТБИ]

Сөздер Үшін(Үшін), Кімге(бұрын), қадам(қадам), Келесі(содан кейін) сақталған.

Қолданылатын белгілер:

CPI – цикл параметрінің атауы (кез келген сандық түрдегі айнымалы);

NZPC – цикл параметрінің бастапқы мәні (кез келген сандық түрдегі өрнек), цикл параметрі цикл денесінің бірінші орындалуында болады;

KZPC - цикл параметрінің ағымдағы мәні салыстырылатын цикл параметрінің соңғы мәні (кез келген сандық түрдегі өрнек);

CHIC – цикл параметрін өзгерту қадамы (кез келген сандық түрдегі өрнек) – цикл нұсқауының қосымша бөлігі.

NCPC және CDPC сандық мәндері цикл параметрі өзгеретін аралықты белгілейді. Қосымша SHICZ параметрі әрбір өтуде цикл санауышын өзгерту қадамын көрсетеді. Әдепкі бойынша, егер ол жоқ болса, онда ол 1-ге тең қабылданады. Соңында, циклдің денесін құрайтын нұсқаулардан кейін цикл шекарасын білдіретін команда орындалады. Кірістірілген циклдар жағдайында (цикл денесі цикл операторын қамтиды), команданың қайсысына жататынын көрсету пайдалы. Келесі. Бұған сөзден кейін қосу арқылы қол жеткізіледі Келесіцикл параметрінің аты.

Нұсқауларды орындау процесі ҮшінКелесіоң қадам үшін 7.4-суретте көрсетілген.

Мысалдар қарастырыңыз.

Бірінші мысалда 1-ден 100-ге дейінгі барлық тақ бүтін сандардың қосындысын есептеу нұсқауларын жазамыз.

Dim I бүтін сан, қосынды бүтін сан

i = 1-ден 100-ге дейін 2-қадам

Сома = Сома +i

Келесі мысал екі мүмкіндікті көрсетеді: нақты цикл қадамы және кері санау. Соңғысы теріс қадамды орнату арқылы және цикл параметрінің бастапқы мәні соңғы мәннен үлкен болуы арқылы қол жеткізіледі.

Күңгірт N бүтін сан ретінде

N = 100-ден 60-ға дейін қадам -10

Бұл код ағымдағы пішінде шығады:

Келесі нұсқау компьютерден 50 рет дыбыстық сигнал береді. Нұсқау Үшінцикл параметрінің айнымалы екенін анықтайды x, оның бастапқы және соңғы мәндері. Команда Келесісанауышты қадамдармен өзгертеді.

Көлемді x бүтін сан ретінде

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

7.2.2. Do while...Цикл немесе Do...Цикл while операторы

Мұнда Әзірге(әзірше) және цикл(цикл) сақталған сөздер. Циклдерді теріңіз Әзіргецикл денесінің қайталану саны (итерация) алдын ала белгісіз жағдайларға арналған. Мұнда циклдің екі түрінің синтаксисі берілген Әзірге:

Әзірге жасаңызШартҚайталау Баяндау тобы цикл

ЖасаңызНұсқау тобы цикл whileШартыҚайталаулар

Олардың арасындағы айырмашылық мынада: Қайталану шарты (цикл денесінің орындалуын қайталау шарты) бірінші жағдайда цикл денесінің орындалуына дейін (цикл - while) тексеріледі, ал екінші жағдайда - цикл денесінің орындалуынан кейін (цикл - бұрын).

Мысалдарға көшейік.

Бағдарламаның келесі бөлімінің әрекетін қарастырыңыз.

Есептегіш = 0

Сан > 10 кезінде орындаңыз

Сан = Сан - 1

Санауыш = Санауыш + 1

MsgBox («Дайын» ​​және Есептегіш және _

"цикл итерациялары.")

Бағдарламаның осы бөлімі орындалғанда, MsgBox функциясының терезесінде келесілер көрсетіледі:

Циклдің 10 итерациясы аяқталды.

Бұл бағдарламада циклге кірер алдында шарт тексеріледі. Number айнымалысы 20 орнына 9 мәніне қойылса, цикл ішіндегі операторлар орындалмайды.

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

Есептегіш = 0

Сан = Сан - 1

Санауыш = Санауыш + 1

Цикл while Number > 10

MsgBox («Циклда орындалды» & Есептегіш және _

«итерациялар.»)

нұсқау Do...Loopнұсқаулармен мерзімінен бұрын аяқталуы мүмкін Шығу Do.

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

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

Мәлімдеме_блок

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

Бұл жерде белгіленген:

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

Кімгебұрын (міндетті VB кілт сөзі);

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

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

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

қадамқадам (VB түйінді сөзі);

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

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

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

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

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 қадамға ұлғайтылады және бірден Х-тің жаңа мәні соңғы 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-ға дейін өзгереді. Бұл жағдайда X-дағы коэффициенттегі алым дәрежеден 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 айнымалысын және 1-ді тағайындайтын Imax айнымалысын – массивтің бірінші элементінің индексін жариялайық.

    Циклде 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 операторы арқылы 5 еселігін тексереміз және жиым элементін Mod арқылы бөлеміз.

    Егер элемент 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, бірінші кірістірілген цикл - counterj және екінші, ең ішкі цикл - counterk. Көріп отырғанымыздай, сыртқы циклдің «ең баяу» есептегіші(poi), және «Ең жылдам» - ең ішкі циклдің есептегіші (сәйкеск).

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

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

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 twips, бірақ басқа мәнді таңдауға болады.

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: барлық тоқаш = қосынды \ 18

i = 1 үшін AllChocolates

j = 1 үшін AllBulki

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

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

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

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

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

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

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

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

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

Шоколадтар 43, орамдар 26

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

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