VBA kilpos. Ciklų operatoriai VBA Kilpos vb6 su skaitiklio pavyzdžiais

VBA kalbos operatorius for next loop naudojamas teiginių blokui vykdyti fiksuotą skaičių kartų, dažniausiai ši kilpa naudojama apdorojant masyvus. Kitas ciklas yra paprasčiausias savo srityje, čia nustatomos pradinės ir galutinės reikšmės, taip pat galite nustatyti skaitiklio žingsnį.

Pažvelkime į bendrą sintaksę:

Skaitikliui = pradžia Iki pabaigos
Operatoriai
Kitas skaitiklis

Skaitliukas– čia nurodome kintamojo pavadinimą, kuriame bus saugoma informacija apie iteracijų skaičių (baigtų ciklų skaičių).

Pradėti– pradinė skaitiklio reikšmė yra skaitinė išraiška

Galas– galutinė skaitiklio reikšmė, skaitinė išraiška, nurodanti ėjimų skaičių.

Žingsnis– pasirenkamas parametras, leidžiantis nurodyti vykdymo veiksmą. Jei šio parametro nėra, tada skaitiklio prieaugis kiekvieną kartą yra lygus vienetui. Žingsnio naudojimas yra aktualus, jei reikia išspręsti lygtį naudojant brutalios jėgos metodą, todėl galite nustatyti pradinę reikšmę 1, galutinę reikšmę 3 ir žingsnį 0,2.

Pačioje ciklo pabaigoje nereikia nurodyti kintamojo pavadinimo (skaitiklio), tačiau tai aktualu, jei naudojamas įdėtas ciklas, todėl kodas bus lengviau skaitomas.

Pavyzdžiui, sukurkite formą su dviem teksto etiketėmis ir vienu mygtuku, kodo rengyklėje parašykite:

Private Sub CommandButton1_Click() Dim i, j, a, b Kai i = 1 iki 10 2 veiksmas a = a & i & " " Kitas i Skirtas j = 1 iki 10 3 veiksmas b = b & j & " " Kitas j 1 etiketė .Caption = a Etiketė2.Antrasas = b Pabaiga antrinė privati ​​antrinė antrinė naudotojo forma_Initialize() Label1.Caption = "" Etiketė1.Šrifto dydis = 14 Etiketė1.ForeColor = vbMėlyna Label2.Caption = "" Etiketė2.Šrifto dydis = 14 Etiketė2. Antraštė = "Vertės" Pabaiga

Šiame pavyzdyje turime du ciklo parametrus, kurių kiekvieno pradinė ir galutinė reikšmė yra tokia pati, tačiau pirmasis nustatytas į 2 veiksmą, o antrasis – į 3.

Taip pat žingsnio parametre galite nurodyti neigiamą reikšmę, tokiu atveju skaitiklis didės atvirkštine tvarka, pavyzdžiui:

Private Sub CommandButton1_Click() Dim i, j, SummA, SummB Kai i = 1 iki 10 SumA = SumA + i Next Jei j = 10 iki 1 veiksmas -1 SumaB = sumaB + j Kitas Etiketė1. Antraštė = „Tiesioginis užsakymas:“&SumaA Label2.Caption = "Atvirkštinė tvarka: "& SumB Pabaigos sub

Čia apskaičiuojame skaičių sumą nuo 1 iki 10 pirmyn ir atvirkštine tvarka.

Gana dažnai VBA kalboje naudojant for next loop operatorių, gali susiklostyti situacija, kai esant tam tikroms sąlygoms reikia nutraukti duomenų rūšiavimą, tokiu atveju naudojama išraiška Išeiti už, Pavyzdžiui:

Šiame pavyzdyje naudojama VBA kitai įdėtai kilpai. Pirmuoju atveju sumuojami skaičiai nuo 1 iki 100, o sumavimas kartojamas 100 kartų. Antruoju atveju sąlygą nurodėme naudodami sąlyginį if teiginį – jei suma didesnė nei 10 tūkst., tada išeikite iš ciklo.

Gerai, dabar pabandykime parašyti praktiškesnį pavyzdį – kvadratinės lygties sprendimą brutaliąja jėga:

Private Sub CommandButton1_Click() Const a = -2, b = 6, c = 20 Dim x, rezultatas, res Jei x = -10 iki 10 0,5 žingsnio rezultatas = a * (x * x) + b * x + c Jei rezultatas = 0 Tada res = res & " " & x End If Next x Label1.Caption = "x tiksliai: " & res End Sub

Šiame pavyzdyje mes paskelbėme tris konstantas a, b ir c, kurių reikšmės yra -2, 6 ir 20, tai yra kvadratinės lygties parametrai (a*x*x + b*x + c = 0). Cikle kintamasis x keičiasi intervale nuo -10 iki 10 0,5 žingsniais. Kiekvienos iteracijos metu tikrinama, ar sąlyga yra lygi nuliui, jei sąlyga tenkinama, x kintamojo reikšmė įrašoma į res kintamąjį. Dėl to lygtis turės du sprendinius: -2 ir 5.

Taigi, šiame straipsnyje apžvelgėme kitą VBA kalbos kilpą, kuri naudojama tam tikrą skaičių kartų atlikti tuos pačius veiksmus, kitame straipsnyje apžvelgsime, kuri naudojama rinkiniams apdoroti, ir ten. apžvelgsime ir pačias kolekcijas.

Ciklo teiginiai

VBA Yra du pagrindiniai kilpų tipai: kilpos su skaitikliu (parametrinis) ir kilpos su sąlyga (iteratyvus).

Skaitiklio kilpos naudojamos tais atvejais, kai tam tikrus veiksmus reikia atlikti tam tikrą skaičių kartų.

Sąlyginės kilpos naudojamos, kai tam tikri veiksmai programoje turi būti kartojami tol, kol įvykdoma tam tikra sąlyga.

Kilpos su parametru Už… Kitas

Ciklo struktūra:

Dėl Ciklo_parametras = Pradinė_vertėĮ Galutinė_vertė

[Žingsnis]

Operatoriai

[Išeiti už]

Kitas [Cycle_parameter]

kur Už raktažodį VBA (nuo), nurodant ciklo pradžią;

loop_parameter kintamasis, apibrėžtas kaip ciklo skaitiklis;

Initial_Value skaičius, nurodantis pradinę ciklo parametro reikšmę;

Į raktinį žodį VBA (prieš), dalijimas

Pradinė_vertė ir galutinė_žinios;

Final_Value skaičius, nurodantis ciklo parametro reikšmę,

Kuriuo ciklas baigiasi;

Žingsnio raktinis žodis VBA (žingsnis) naudojamas

Ciklo žingsnio specifikacijos, neprivalomas argumentas;

Žingsnis skaičius, nurodantis ciklo žingsnį, t.y. vertė, pagal kurią

Padidina (arba sumažina) parametro reikšmę

Važiuokite dviračiu kiekviename žingsnyje. Šis skaičius gali būti

Neigiamas;

Išeiti už ankstyvo išėjimo iš ciklo operatorius (neprivaloma);

Kitas raktažodį VBA (kitas) reiškiantis

Ciklo pabaiga.

Ciklo darbas:

1 veiksmas Pirmiausia nustatomas kilpos parametras, apskaičiuojamos ir išsaugomos pradinės ir galutinės šio kintamojo reikšmės.

2 veiksmas Ciklo parametrui priskiriama pradinė vertė.

3 veiksmas Pradinė kilpos parametro vertė lyginama su galutine verte.

Jei ciklo parametras yra didesnis už galutinę reikšmę, programa iš karto išeina iš ciklo ir pereina į kodo eilutę, kuri seka ciklu.

4 žingsnis Vykdomas kilpos korpusas.

5 veiksmas Atlikus kilpos korpusą, kilpos parametrui priskiriama kita reikšmė. Eikite į 3 veiksmą.

Pastaba.

1. Jei naudojamas raktinis žodisŽingsnis , tada ciklo parametras keičiasi pagal skaičių, nurodytą po šio žodžio. Jei žodisŽingsnis nėra, tada žingsnio reikšmė lygi vienetui.

1 pavyzdys.

Jei I = 0–10 2 veiksmas (I vertė padidės 2)

2. Už...Kitas ciklas gali būti nutrauktas anksčiau laiko, kai pasiekiama kokia nors sąlyga. Norėdami tai padaryti, reikiamoje kilpos vietoje turite įdėti operatorių Išeiti už.

2 pavyzdys.

Dim S kaip sveikasis skaičius

Pritemdytas j Kaip sveikasis skaičius

S=2

Jei j = 1–10

S = S + j

Jei S > 6 Tada

Išeiti už (Išeikite iš ciklo, jei reikšmė S > 6)

Pabaiga Jei

Kitas j

MsgBox (S)

Sąlyginės kilpos (kartojantis)

Jeigu kurį nors veiksmą (kelis veiksmus) reikia atlikti daug kartų, bet iš anksto nežinoma, kiek kartų ir tai priklauso nuo kokios nors sąlygos, tuomet reikėtų naudoti ciklą su išankstine arba posąlyga.

VBA yra du pagrindiniai ciklai DARYK... KILPA su sąlyga, kurią įvedė raktinis žodis Nors ir su sąlyga, kurią įvedė raktinis žodis Iki . Abu jie gali būti su išankstine arba po sąlyga.

Sintaksė:

kur daryti raktažodis (do);

Nors raktažodis (dar);

Iki raktažodis (iki);

Kilpa raktinis žodis, nurodantis ciklo pabaigą;

<условие>loginė išraiška, kurios tiesa patikrinama

Kiekvienos kilpos korpuso vykdymo pradžioje;

<тело_цикла>savavališka operatorių seka;

Darykite...Statydami rašoma: darykite, kol tenkinama sąlyga. Dizaine Daryti...Kol Už

Do...Iki statybos rašoma: daryti tol, kol bus įvykdyta sąlyga. Dizaine Daryk...Iki Norėdami padidinti žingsnį, turėtumėte parašyti specialų operatorių, nes jame, skirtingai nuo dizaino Dėl , tai nedaroma automatiškai.

Po raktinio žodžio parašyta būklė Iki , tikrinamas kiekvienos iteracijos pabaigoje (po to, kai įvykdomas ciklo korpusas). Atminkite, kad tai neveikia taip pat, kaip cikle Nors . Jei sąlyga yra teisinga ( Tiesa ), tada kilpa baigiasi. Jei sąlyga netenkinama (neteisinga Netiesa ), tada vėl vykdomas kilpos kūnas.

1 pavyzdys.

Problemos formulavimas. Apskaičiuokite baigtinės serijos sumą naudodami paprogramės procedūrą.

Užduočių vykdymo technologija:

1. Pradiniai duomenys: aš  Z

Rezultatas: S  R .

2. Įveskite šią pasirinktinę procedūrą standartiniame projekto modulyje naudodami kilpą su išankstine sąlyga Kol:

Sub summa()

Dim S kaip sveikasis skaičius

Pritemdykite kaip sveikasis skaičius

S = 0

i=1

Daryk, kol i<= 10

S = S + i^2

i = i + 1

Kilpa

MsgBox (S)

Pabaigos sub

3. Įveskite šią pasirinktinę procedūrą standartiniame projekto modulyje naudodami kilpą su išankstine sąlyga Iki:

Sub summa()

Dim S kaip sveikasis skaičius

Pritemdykite kaip sveikasis skaičius

S = 0

i=1

Atlikite iki i > 10

S = S + i^2

i = i + 1

Kilpa

MsgBox (S)

Pabaigos sub

4 Įveskite šią pasirinktinę procedūrą standartiniame projekto modulyje, naudodami kilpą su sąlyga Kol:

Sub summa()

Dim S kaip sveikasis skaičius

Pritemdykite kaip sveikasis skaičius

S = 0

i=1

S = S + i^2

i = i + 1

Kilpa Nors i<= 10

MsgBox (S)

Pabaigos sub

5 Įveskite šią pasirinktinę procedūrą standartiniame projekto modulyje, naudodami kilpą su sąlyga Iki:

Sub summa()

Dim S kaip sveikasis skaičius

Pritemdykite kaip sveikasis skaičius

S = 0

i=1

S = S + i^2

i = i + 1

Ciklas iki i > 10

MsgBox (S)

Pabaigos sub

Paskutinis atnaujinimas: 2015-10-30

Kitas valdymo struktūrų tipas yra kilpos. VB.NET naudoja kelių tipų kilpas.

Dėl...Next Loop

Šiuo atveju ciklas vykdomas tam tikrą skaičių kartų, o šis skaičius nurodomas skaitikliu:

Jei i As Integer = nuo 1 iki 9 Console.WriteLine("Skaičiaus (0) kvadratas yra (1)", i, i * i) Kitas

Čia kintamasis i veikia kaip skaitiklis. Po žodžio Į dedame maksimalią skaitiklio reikšmę. Su kiekvienu ciklu skaitiklio reikšmė padidėja vienu. Ir ši vertė lyginama su verte po Į. Jei šios dvi vertės yra lygios, kilpa nustoja veikti.

Dirbdami su kilpomis, skaitiklio reikšmę galime padidinti ne tik vienu, bet iš viso bet kokiu skaičiumi. Norėdami tai padaryti, turite naudoti raktinį žodį Žingsnis ir po jo nurodykite ciklo žingsnį, kuriuo skaitiklio vertė bus padidinta, arba galite padidinti skaitiklį tiesiai cikle:

Jei i Kaip sveikasis skaičius = 1 iki -9 Žingsnis -1 Jei j kaip sveikasis skaičius = 1 iki 9 Console.WriteLine("Skaičių i ir j sandauga yra (0)", i * j) j += 1 Kitas Kitas

Atkreipkite dėmesį, kad pirmosios kilpos žingsnis yra nustatytas į neigiamą reikšmę, o skaitiklio reikšmė sumažinama vienu su kiekvienu praėjimu. Vidinėje kilpoje skaitiklis j padidinamas 2 kiekvieną kartą, kai jis praeina, nes pagal numatytuosius nustatymus jis padidinamas vienu, o cikle taip pat aiškiai padidiname jį vienu. Dėl to vidinė kilpa veikia penkis kartus, o išorinė - devynis kartus, tai yra, iš tikrųjų gaunami 45 ciklai.

Ciklas kiekvienam...Kitas

A Kiekvienai ciklas kartojasi per tam tikros grupės elementus, pvz., masyvą arba rinkinį. Tarkime, kad turime tam tikrą sveikųjų skaičių tipo masyvą ir turime inicijuoti šį masyvą atsitiktinėmis reikšmėmis, o tada visus jo elementus rodyti ekrane:

"Sukurkite penkių skaičių masyvą Dim numeriai (4) Kaip sveikasis skaičius Dim r kaip naujas atsitiktinis() "inicijuoti masyvą For i Kaip sveikasis skaičius = 0 iki numerių. Ilgis - 1 skaičiai (i) = r. Kitas(100) Kitas " Išvesti elementų masyvą kiekvienam i kaip sveikasis skaičius In numeriai Console.Write("(0) ", i) Kitas

Teiginyje „For Every“ pirmiausia nurodome kintamąjį, kuris gaus masyvo elementų reikšmes. Ir po raktinio žodžio Į Mes nurodome grupę, kurioje turime kartoti visus elementus.

Nors Loop

Ciklas While vykdomas tol, kol įvykdoma tam tikra sąlyga, nurodyta po žodžio While:

Pritemdyti j kaip sveikąjį skaičių = 10, kol j > 0 konsolė. WriteLine(j) j -= 1 pabaiga, nors

Padarykite kilpą

Ciklas Do, kaip ir Nors ciklas, vykdomas tol, kol įvykdoma tam tikra sąlyga. Tačiau jis būna įvairių formų. Taigi, toliau pateiktame pavyzdyje pirmiausia patikrinama sąlyga ir tada vykdomas cikle apibrėžto kodo blokas:

Pritemdyti j kaip sveikąjį skaičių = 10 daryti, kol j > 0 konsolė. WriteLine(j) j -= 1 ciklas

Šiuo atveju ciklas tęsiasi tol, kol j yra didesnis už nulį. Tačiau yra dar vienas įrašas, kur vietoj žodžio Nors vartojamas žodis Iki, o ciklas vykdomas tol, kol įvykdoma tam tikra sąlyga, tai yra, kol j reikšmė tampa mažesnė už nulį:

Pritemdyti j kaip sveikąjį skaičių = 10 daryti iki j< 0 Console.WriteLine(j) j -= 1 Loop

Jei iš pradžių cikle nurodyta sąlyga nėra teisinga, ciklas neveiks. Bet mes galime apibrėžti patikrinimą ciklo pabaigoje, taigi mūsų ciklas bus paleistas bent kartą:

Pritemdyti j kaip sveikąjį skaičių = -1 Atlikite Console.WriteLine(j) j -= 1 ciklas iki j< 0 "либо Do Console.WriteLine(j) j -= 1 Loop While j > 0

Tęsimo ir išėjimo pareiškimai

Dažnai reikia ne laukti ciklo pabaigos, o iš karto išeiti iš ciklo, jei įvykdoma tam tikra sąlyga. Norėdami tai padaryti, naudokite operatorių Išeiti, po kurio jie nurodo kilpos, iš kurios atliekamas išėjimas, tipą, pavyzdžiui, Exit Do (Exit While):

Dim r As New Atsitiktinis() Dim num As Integer = r.Next(100) For i As Integer = nuo 0 iki 100 skaičius -= 1 Jei skaičius< 50 Then Exit For Next Console.WriteLine(num)

Yra ir kita užduotis – išeiti ne iš ciklo, o iš dabartinio praėjimo ar iteracijos ir pereiti prie kito. Norėdami tai padaryti, naudokite teiginį Continue, po kurio nurodykite ciklo, iš kurio išeinate, tipą, pavyzdžiui, Continue While:

Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = nuo 0 iki 10 skaičius -= 7 Jei skaičius< 50 AndAlso num >25 Tada Continue For End If Console.WriteLine(num) Next

Tokiu atveju kiekviename ciklo eige iš num atimame skaičių 7 ir tada pažiūrime, ar skaičius num priklauso intervalui nuo 25 iki 50. Ir jei taip, pereiname prie naujos ciklo iteracijos, o jei ne, tai rodome ekrane.

Ciklo instrukcija – tai teiginys, nurodantis, kuris instrukcijų rinkinys (šis instrukcijų rinkinys vadinamas ciklo korpusu) turi būti vykdomas pakartotinai ir kokia yra ciklo pabaigos taisyklė.

7.2.1. Parametrinis ciklas Dėl... Kitas

Šią kilpą valdo parametras, kuris, kartodamas ciklo korpuso vykdymą, tam tikru žingsniu pakeičia savo reikšmę iš nurodytos pradinės reikšmės į duotą galutinę reikšmę. Toks ciklas naudojamas tuo atveju, kai iš anksto žinoma, kiek kūno pakartojimų reikia atlikti.

Ciklo sintaksė: Dėl CPI = NZPC Į KZPC[ Žingsnis SHIPTS] Ciklo korpusas (viena ar daugiau instrukcijų) Kitas[CPI]

Žodžiai Dėl(Dėl), Į(prieš), Žingsnis(žingsnis), Kitas(tada) yra rezervuoti.

Naudojami pavadinimai:

CPI – ciklo parametro pavadinimas (bet kokio skaitinio tipo kintamasis);

NZPTS – ciklo parametro pradinė reikšmė (bet kokio skaitinio tipo išraiška), kurią turės ciklo parametras, kai ciklas bus vykdomas pirmą kartą;

KZPTS – galutinė ciklo parametro reikšmė (bet kokio skaitinio tipo išraiška), su kuria lyginama esama ciklo parametro reikšmė;

CHIC – ciklo parametro keitimo žingsnis (bet kokio skaitinio tipo išraiška) – pasirenkama ciklo instrukcijos dalis.

Skaitinės NZPC ir KZPC reikšmės nurodo intervalą, per kurį pasikeis ciklo parametras. Pasirenkamas parametras SHIPC nurodo ciklo skaitiklio keitimo žingsnį kiekviename važiavime. Pagal numatytuosius nustatymus, jei jo nėra, laikoma, kad ji yra lygi 1. Galiausiai po instrukcijų, sudarančių ciklo pagrindą, yra komanda, nurodanti ciklo ribą. Esant įdėtoms kilpoms (ciklo korpuse yra ciklo instrukcija), naudinga nurodyti, kuriai ciklai komanda priklauso Kitas. Tai pasiekiama pridedant po žodžio Kitas ciklo parametro pavadinimas.

Instrukcijų vykdymo procesas DėlKitas teigiamam žingsniui pavaizduota 7.4 pav.

Pažiūrėkime į pavyzdžius.

Pirmajame pavyzdyje parašysime instrukcijas, kaip apskaičiuoti visų nelyginių sveikųjų skaičių sumą nuo 1 iki 100.

Dim I kaip sveikasis skaičius, suma kaip sveikasis skaičius

Jei i = 1–100, 2 veiksmas

Suma = suma +i

Šis pavyzdys parodys dvi galimybes: aiškų ciklo žingsnį ir atgalinį skaičiavimą. Pastarasis pasiekiamas nurodant neigiamą žingsnį ir tai, kad pradinė kilpos parametro reikšmė yra didesnė už galutinę reikšmę.

Dim N kaip sveikasis skaičius

N = 100–60 –10 veiksmas

Šis kodas bus išvestas dabartinėje formoje:

Dėl šios instrukcijos kompiuteris supypsi 50 kartų. Instrukcijos Dėl apibrėžia, kad ciklo parametras yra kintamasis x, jo pradinės ir galutinės reikšmės. Komanda Kitas keičia skaitiklį žingsniais.

Dim x Kaip sveikasis skaičius

Instrukcijos Už...Kitas gali būti nutrauktas anksčiau, naudojant pareiškimą Exit For. Vykdydami šią instrukciją, ciklas iš karto išeina.

7.2.2. Instrukcija Do While...Loop arba Do...Loop While ciklo instrukcija

Čia Nors(kol kas) ir Kilpa(kilpa) rezervuoti žodžiai. Kilpos kaip Nors yra skirti situacijoms, kai iš anksto nežinomas ciklo korpuso (iteracijų) pakartojimų skaičius. Čia yra dviejų tipų ciklo sintaksė Nors:

Daryk Kol ConditionRepetitions Instrukcijų grupė Kilpa

Daryk Instrukcijų grupė Ciklo metu BūklėPakartojimai

Skirtumas tarp jų yra tas, kad Repetition Condition (sąlyga kartoti ciklo korpuso vykdymą) patikrinama pirmuoju atveju prieš įvykdant ciklo korpusą (ciklas - while), o antruoju atveju - po ciklo korpuso vykdymo. įvykdyta (kilpa - iki).

Pereikime prie pavyzdžių.

Panagrinėkime kitos programos dalies veiksmą.

Skaitiklis = 0

Darykite, kol skaičius > 10

Skaičius = skaičius – 1

Skaitiklis = skaitiklis + 1

MsgBox("Atlikta" & skaitiklis & _

„ciklo iteracijos“).

Kai ši programos dalis bus vykdoma, MsgBox funkcijos lange bus rodoma:

Atlikta 10 ciklo iteracijų.

Šioje programoje būklė patikrinama prieš įeinant į kilpą. Jei kintamasis skaičius nustatytas į 9, o ne 20, ciklo instrukcijos nebus vykdomos.

Toliau pateiktoje programoje teiginiai cikle vykdomi tik vieną kartą, kol sąlyga nepavyksta.

Skaitiklis = 0

Skaičius = skaičius – 1

Skaitiklis = skaitiklis + 1

Ciklas, kai skaičius > 10

MsgBox("Atlikta cikle" & Skaitiklis & _

„iteracijos“).

Instrukcijos Daryk... Kilpa galima anksti užbaigti pagal instrukcijas Išeiti Do.

Operatoriaus sintaksė:

DėlSkaitliukas= Pradėti ToGalas[ŽingsnisŽingsnis]

Block_Operators

KitasSkaitliukas

Čia nurodyta:

Dėl Dėl (būtinas raktažodisVB);

Į prieš (būtinas raktažodisVB);

Block_Operators– paskambino vienas ar keli operatoriai dviračio korpusas;

skaitiklis - sveikasis kintamasis, skaičiuojantis įvykdytų kilpų skaičių;

Pradžia, Pabaiga - pradinės ir galutinės skaitiklių vertės;

Žingsnisžingsnis(raktinis žodisVB);

Žingsnis – skaitiklio keitimo žingsnis; gali būti neigiamas; parametras yra neprivalomas, nes jei žingsnis yra 1, galiteStep Žingsnisžemesnis;

Next – next (būtinas raktažodis VB, ciklo pabaigos operatoriaus įrašas).

Skaitiklio vertė (pradžia, pabaiga) gali būti skaitinės konstantos arba sveikojo arba tikrojo tipo kintamieji gali būti neigiami arba teigiami skaičiai. Kad kilpos korpusas būtų vykdomas bent kartą, turi būti Pradžia ≤ Pabaiga, Jeigu Žingsnis> 0 ir Pradžia ≥ Pabaiga, Jeigu Žingsnis< 0. Kai tik tai paaiškės Skaitliukas>Galas ( Jeigu Pradėti< Конец), Ciklo vykdymas baigiasi. Jeigu Pradėti =Galas, kilpa bus vykdoma vieną kartą;

9.1 pavyzdys .Funkcijų įvertinimasY = 2 – 1.5 Sinxkai X intervale keičiasi 0,2 žingsniais.

Programos, skirtos Y skaičiavimui ir argumentui X bei funkcijai Y išvesti, fragmentas:

Jei X = 0–2,4 0,2 veiksmas

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

Norėdami suprasti, kaip veikia ši kilpa, čia yra panašios kilpos programa, sukurta naudojant operatoriusEiti į, žymos, operatoriusJeiguTada.

M1: X = X + 0,2

Jei X<= 2.4 Then

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

Pažiūrėkime, kaip ši programa veikia. Pirmas skaičiavimas Y yra nestandartinis, tarsi iškrenta iš ciklo. Ciklas prasideda po pirmojo valdymo GoToM1 perdavimo etiketei M1. Eilutėje, pažymėtoje M1, argumentas X padidinamas 0,2 žingsniu ir iš karto patikrinama, ar nauja X reikšmė viršija galutinę 2,4 reikšmę. Jei jis neviršija, tada Y skaičiavimas kartojamas su šiuo nauju X. Tada vėl vykdomas GoToM1 operatorius - valdymas perkeliamas į eilutę, pažymėtą M1. Šios Y skaičiavimo iteracijos (ciklai) baigsis, kai tik X viršys 2,4.

Dabar palyginkime programą su If su ciklu For...Next.

Jei X = 0–2,4 0,2 veiksmas

pakeičia dvi eilutes

M1: X = X + 0,2

Jei X<= 2.4 Then

Tai paskutinės dvi kodo eilutės, kurios vykdomos cikle For, bet mes jos nematome. Mes juos užkodavome eilute cFor... GoTo M1 kodo eilutė užkoduota žodžiu Next X (pažodžiui: next X). Taip gaunamas kompaktiškas dizainas.

Kai naudojate For...Next kilpą, turite išmokti naudoti ciklo skaitiklį įvairioms problemoms spręsti. Norėdami išsiaiškinti, kaip naudoti skaitiklį problemai išspręsti, turite išanalizuoti problemos formuluotę, rasti kai kurių problemos parametrų kitimo modelius.

9.2 pavyzdys . Eilutės elementų sumos nustatymas: .

Programos fragmentas:

S = 0 ‘ S – eilučių suma

Jei i = 1 iki 16 ‘, skaitiklis i yra trupmenos vardiklis

S = S + 1/i ‘ sumos kaupimas

Spausdinti „S =“; S ‘ išveskite S sumą į formą

Kiekvienai skaitiklio i reikšmei išraiška 1/i paeiliui sudaro serijos elementus, pradedant nuo 1.

9.3 pavyzdys . Elementų serijos sumos apskaičiavimas
.

Programos fragmentas:

S = 0 ‘ S – eilučių suma

Jei i = 1–18 ‘ skaitiklis i – skaitiklis

S = S + i/(i + 1) ‘ vardiklis yra 1 didesnis už skaitiklį

Spausdinti „S =“; S ‘ išveskite S sumą į formą

9.4 pavyzdys . Sumos apskaičiavimas: 5 + 8 + 11 + … + 32 + 35

Programos fragmentas:

S = 0 ‘ S – eilučių suma

Jei i = 5 iki 35 3 veiksmas ‘ gauname aritmetiką _

progresija su vardikliu 3

Spausdinti „S =“; S

9.5 pavyzdys. Sumos apskaičiavimas duotam x:

Problemos analizė rodo, kad X laipsnis svyruoja nuo 1 iki 10. Šiuo atveju skaitiklis koeficiente X yra didesnis už laipsnį 1, o vardiklis - 2. Laipsnio reikšmę sudarysime naudodami skaitiklis i. Tada galite sukurti tokią programą (fragmentą):

S = 1 ‘ S – eilučių suma

Jei i = 1–10 ‘, kaip ir skaitiklis i, laipsnis keičiasi ties X

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

Spausdinti „S =“; S

CiklaiDėlKitasnaudojamaįvesties išvesties Irmasyvo apdorojimas .

9.6 pavyzdys. Masyvo elementų reikšmių įvestis ir išvestis B(N).

Programos fragmentas:

' Mes nepriskirsime reikšmės kintamajam N, _

įvesta formoje txtN teksto lauke:

B(i) = InputBox("Įveskite elementą B(" & i & ")", _

"Įvesties masyvas B(" & N & "))

Spausdinti " "; B(i);

Funkcija Įvesties laukelis() rodomas dialogo langas su uždarymo mygtuku, nurodytu pranešimu, įvesties lauku, mygtukais Gerai,Atšaukti, su nurodyta antrašte (arba be jos). Jei įvedamas skaičius 12 - masyvo N dydis, tada mūsų pavyzdyje, kai jis pirmą kartą pasirodys, šis langas atrodys taip:

Kaip matome, žinutė Įveskite elementą B(1) paragins įvesti 1-ojo elemento reikšmę teksto laukelyje. Šis langas bus rodomas 12 kartų, nes masyve yra 12 elementų. Tai išplaukia iš formos pavadinimo. Elemento B(i) indeksas kvietime svyruos nuo 1 iki 12.

Jei formoje norite rodyti tik masyvo B(N) elementų reikšmes, tada ciklo turinį sudarys vienas teiginys:

Masyvo elementų peržiūra, norint atlikti kai kuriuos veiksmus su jais, taip pat atliekama naudojant For...Next ciklo operatorių.

Duokim vienmačių masyvų apdorojimo pavyzdžiai.

9.7 pavyzdys . Didžiausio elemento nustatymas masyve B(M).

Išskyrus pradinių duomenų įvedimą ir rezultatų išvedimą, trumpai aprašome algoritmą:

    Deklaruojame kintamąjį Bmax, kuriame įvesime pirmojo masyvo elemento reikšmę ir kintamąjį Imax, kuriam priskirsime 1 – pirmojo masyvo elemento indeksą.

    Ciklo metu, naudodami operatorių For...Next, peržiūrime visus masyvo elementus, pradedant nuo 2-ojo. Naudodami operatorių If...Then palyginame jų reikšmes su reikšme, saugoma Bmax kintamajame.

    Jeigu paaiškėja, kad masyvo elemento reikšmė yra didesnė už Bmax reikšmę, tai Bmax priskiriama šio elemento reikšmė, o reikšmei Imax – šio masyvo elemento indeksas.

Ciklui pasibaigus, kintamajame Bmax bus maksimalaus elemento reikšmė, o Imax – jo indeksas (skaičius).

Programa šiai algoritmo daliai.

Bmax = B(1): Imax = 1

Jei B(i) > Bmax, tada Bmax = B(i): Imax = i

9.8 pavyzdys. Masyvo teigiamų elementų sumos, sandaugos ir skaičiaus nustatymasD(M).

Kintamieji: S, P, K – atitinkamai teigiamų elementų suma, sandauga ir skaičius.

Algoritmas toks apibrėžimas:

    Kintamiesiems S ir K priskiriame nulį, o kintamajam P priskiriame 1. Paprastai kintamieji, kuriuose kaupiama suma, čia yra S ir k, visada nustatomi į nulį prieš kilpą, o kintamieji kuriam produktas yra apskaičiuojamas, priskiriamas 1.

    Naudodami For...Next kilpą pereiname per visus masyvo elementus ir patikriname, ar jie teigiami (D(i) > 0).

    Jei paaiškėja, kad elementas yra teigiamas, tada jo reikšmę pridedame prie sumos S reikšmės ir naują sumą išsaugome tame pačiame kintamajame. Kintamasis P padauginamas iš teigiamos elemento reikšmės ir taip pat saugomas kintamajame P. O prie kintamojo K pridedame 1 ir naują reikšmę įrašome tame pačiame kintamajame

ProgramaŠi algoritmo dalis atrodo taip:

S = 0: P = 1: K = 0

Jei D(i) > 0 Tada

S = S + D(i) ‘ taip kaupiasi suma _

teigiamos masyvo elementų reikšmės D(i)

P = P*D(i) ‘teigiamo sandaugos apibrėžimas

"masyvo elementai

K = K + 1 ‘ šis operatorius vadinamas COUNTER, štai jis

“ apibrėžia teigiamų masyvo elementų skaičių

9.9 pavyzdys. Nelyginių masyvo elementų sumos, sandaugos, skaičiaus ir vidurkio radimasD(M).

Štai tokio apibrėžimo programos fragmentas.

S = 0: P = 1: K = 0

Jei D(i) Mod 2<>0 Tada

Ssr = S/k ‘ skaičiuojant nelyginių elementų vidurkį

Palyginkite šį programos fragmentą su programa 9.8 pavyzdyje. Ši programa beveik visiškai pakartoja ankstesnę. Pasikeitė tik sąlyga If teiginyje. Sąlyga D(i) 2 modifikacija<>0 reiškia, kad mes ieškome masyvo D(i) elementų, kurie nėra tolygiai dalijami iš 2, t.y. nelyginių elementų. Jei patikrinsime sąlygą D(i) Mod 2 = 0, tai pasirinksime lyginius masyvo elementus.

Kaip žinoma, padalijimas pagal Mod duoda dalybos likutį sveikaisiais skaičiais. Pavyzdžiui, įvykdžius operatorių d = 34Mod4, kintamasis d bus lygus 2. Todėl norėdami pasirinkti masyvo elementus, kurie yra 4 kartotiniai, turime patikrinti sąlygą D(i) Mod 4 = 0. Sąlyga bus būti panašūs, jei ieškome elementų, kurie yra kitų skaičių kartotiniai. Šie kiti skaičiai bus rašomi vietoj 4.

9.10 pavyzdys. Masyvo elementų rašymasR(N), 5 kartotiniai, į kitą masyvą ir išveda naują masyvą į formą.

Pažymime kitą masyvą, pavyzdžiui, R5(N). Šio naujo masyvo dydis turėtų būti toks pat kaip ir pradinio, nes kraštutiniu atveju visi elementai gali būti 5 kartotiniai.

Problemos algoritmas:

    Atstatyti skaitiklį k. Naudodami For...Next ciklo operatorių, peržiūrime visus masyvo R(N) elementus.

    Patikriname, ar kiekvienas elementas yra 5 kartotinis, naudodami operatorių If...Then ir masyvo elementą padalydami iš Mod.

    Jei elementas yra 5 kartotinis, tai naudojant k=k+ 1 tipo skaitiklį sudarome masyvo R5(N) indeksus, pradedant nuo 1, ir įrašome į šį kitą masyvą –R5(N).

    Jei k skiriasi nuo nulio, formoje parodykite masyvą R5().

    Jei k yra lygus nuliui, išvesime: „Iš 5 dalijamų elementų nėra.

Programos fragmentas:

Jei R(i) Mod 5 Tada k = k + 1: R5(k) = R(i)

Jeigu k<>0 Tada

Spausdinti "Nėra elementų, dalijamų iš 5"

Kilpos gali būti įdėtos į kitas kilpas.

Pademonstruosime darbą įdėtos kilpos . Toliau pateiktoje programoje rodomos ciklo skaitiklių i, j ir k reikšmės. Iš i, j, k išvesties tampa aišku, kaip vykdomos įdėtos kilpos.

Privatus sub frmCycle_DblClick()

ScaleMode = 4 ‘vienetai – simboliai

Jei i = 1–3 ‘išorinė kilpa

Spausdinti "i = "; i;

Jei j = 1–4 „1-oji įdėta kilpa

DabartinisX = teksto plotis("i = 1 ") + 5

Spausdinti "j = "; j;

DabartinisX = teksto plotis("i = 1 j = 1 ") + 7

Jei k = 1–5 „2-oji įdėta kilpa

Pateiktoje formoje (1 pav.) pateikiami visų trijų kilpų skaitiklių išvedimo rezultatai: išorinė kilpa – skaitiklis i, pirmoji įdėta kilpa – skaitiklis j ir antroji, vidinės kilpos – skaitiklis k. Kaip matome, lėčiausias skaitiklis yra išorinė kilpa(poi) ir „Greičiausias“ yra vidinės kilpos skaitiklis (pagalk).

Programa vykdoma dukart spustelėjus kairįjį pelės mygtuką frmCicli formoje.

CurrentX, CurrentY – formos savybės, nurodančios informacijos atvaizdavimo pradžios taško X, Y koordinates naudojant Print metodą (X ir Y ašių vietą formoje žr. 1 pav.).

TextWidth() yra funkcija, kuri grąžina funkcijoje nurodyto teksto plotį kaip argumentą dvigubose kabutėse.

Įdėtos kilpos naudojamos apdorojant dvimačius masyvus (matricas). Tačiau kai kuriose užduotyse, išskyrus dvimačio masyvo elementų įvestį ir išvestį, galite apsiriboti viena kilpa. Pažvelkime į keletą matricinio programavimo pavyzdžių.

9.11 pavyzdys. Sveikųjų skaičių matricos (dvimačio masyvo) įvestis ir išvestisintA(N).

Galite įvesti matricą pagal eilutes ir stulpelius . Paprasčiau - eilutė po eilutės, jei masyvo elementų išvestį į formą užprogramuojate iškart po jų įvedimo.

Matricos įvestis ir išvestiseilutė po eilutės - 1 fragmentas.

Dim M kaip sveikasis skaičius, N kaip sveikasis skaičius, i kaip sveikasis skaičius, j kaip sveikasis skaičius

Dim intA() Kaip sveikasis skaičius ‘ deklaruoja dinaminį masyvą

M = Val(txtN.Text) ‘ M – eilučių skaičius

N = Val(txtN.Text) ‘ N – stulpelių skaičius

ReDim intA(M, N) Kaip sveikasis skaičius ‘ iš naujo apibrėžkite masyvą

Jei i = 1 iki M ‘, i išsaugos savo vertę iki galo

„Įdėta kilpa j nebus vykdoma

Spausdinti " "; intA(i, j); ‘ išvestis eilutė po eilutės

Spausdinti „eikite į naujos eilutės pradžią

Norėdami įvesti matricą pagal stulpelius, išorinę kilpą turite sudaryti j (nurodo stulpelių numerius), o vidinę – i (nurodo eilučių numerius).

Matricos įvestis ir išvestispagal stulpelius 2 fragmentas.

PrY = 2500: CurrentY = PrY ‘ PrY nustato pradžios Y koordinatę

“ rodo pirmąjį kiekvienos formos stulpelio elementą

Jei j = 1 iki N ‘ j išsaugos savo vertę, kol bus visiškai

„i įdėta kilpa nebus vykdoma

intA (i, j) = InputBox ("Įveskite elementą intA(" & i & "," & j & ")", _

"Įvesties matrica intA(" & M & "," & N & ")")

Spausdinimo skirtukas (6 * j); intA(i, j) ‘išvestis stulpeliais

CurrentY = PrY ', kad būtų rodomas pirmasis elementas

“ kitą stulpelį

Šis antrasis programos fragmentas nekartoja pirmųjų 5 pirmojo fragmento eilučių. Funkcija Tab(6 * j) nustato išvesties pradžią eilutėje (simboliais), pradedant nuo kairiojo formos krašto. Koordinatė PrY čia lygi 2500 twips, bet galite pasirinkti kitą reikšmę.

9.12 pavyzdys . Masyvo elementų verčių užsakymasV(N) Didėjantis.

Yra keli masyvų užsakymo algoritmai. Štai vienas iš jų: naudojant įdėtas kilpasDėlKitasparenkame elementus, pradedant nuo pirmojo iki priešpaskutinio, ir kiekvieną iš jų lyginame su vėlesniais elementais; jei paaiškėja, kad sekantis elementas yra mažesnis nei pasirinktas, mes juos sukeičiame.

Programos, kuri įgyvendina šį algoritmą, fragmentas:

Jei i = 1 iki N – 1

Jei j = i + 1 iki N

Jei V(j)< V(i) Then P = V(i): V(i) = V(j): V(j) = P

Paaiškinkime šį programos fragmentą.

Naudodami išorinę kilpą su skaitikliu i, pasirenkame elementą V(i), kad palygintume su vėlesniais elementais. Vidinė kilpa su skaitikliu j atrenka vėlesnius V(j) elementus palyginimui. Pradinė reikšmė lygi i + 1. Tai pirmasis elementas iš vėlesnių.

Norėdami apsikeisti elementų V(i) ir V(j) reikšmėmis, įvedame tam tikrą kintamąjį P, kuriame laikinai „paslėpiame“ vieno iš masyvo elementų reikšmę (programoje tai yra V(i). )). Tada elementui V(i) priskiriama elemento V(j) reikšmė, o elementui V(j) – V(i), kuri saugoma kintamajame P. Jei „paslėpsime“ reikšmę V(j) P, tada apsikeitimo reikšmėmis kodas bus toks: P = V(j): V(j) = V(i): V(i) = P Rezultatas nepasikeis.

Į surūšiuoti masyvą mažėjančia tvarka, užtenka patikros sąlygą parašyti forma V(j) > V(i), t.y., pakeisti nelygybės ženklą į kitą.

Jei masyvas yra ne skaitinis, o eilutė, o pavardės įvedamos į masyvo elementus, tai naudojant 9.12 pavyzdžio programą, pavardžių sąrašą galima rūšiuoti abėcėlės tvarka. Faktas yra tas, kad kompiuteryje naudojamos abėcėlės raidės yra teisingos šios nelygybės: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

9.13 pavyzdys . Nelyginių matricos stulpelių teigiamų elementų sumos apskaičiavimasF(M, N) ir išveskite sumas į formą.

Programos algoritmas:

    Naudodami išorinę kilpą su 2 žingsniu, sudarome nelyginių matricos stulpelių indeksą, pradedant nuo pirmojo stulpelio.

    Iš naujo nustatome sumą S, kurioje kaupsis teigiamų elementų suma.

    Vidinėje kilpoje patikriname masyvo elemento ženklą.

    Jei masyvo elementas yra teigiamas (> 0), apskaičiuojame sumą S.

    Pasibaigus vidinei kilpai, formoje rodome sumą S.

Fragmentas programas:

Jei j = 1 iki N, 2 veiksmas

Jei F(i, j) > 0, tada S = S + F(i, j)

Spausdinti "Stulpelio suma"; j; ":"; S ‘ j – stulpelio numeris!

Įdėtos kilpos leidžia tvarkyti variantų išvardijimas ir išspręsti problemas, kurių negalima išspręsti analitiškai. Atlikus paiešką, gaunami sprendimo variantai, tarp kurių pasirenkamas vienas ar keli, atitinkantys problemos sąlygas.

9.14 pavyzdys. Yra 1801 rublis. Kiek šokoladų galite nusipirkti už 31 rublį? ir bandeles už 18 rublių visiškai išleisti visus pinigus.

Programa:

Suma = 1801

Visi šokoladai = suma\31: visi masiniai = suma\18

Jei i = 1 Visiems šokoladams

Jei j = 1 Į VseBulk

Kaina = i * 31 + j * 18 'bendra pirkimo kaina

Jei kaina = 1801 Tada

Spausdinti "Šokoladas:"; i; Skirtukas(19); "Bulok:"; j

Paaiškinkime programą, kurioje naudojame kintamuosius, pavadintus rusų kalba.

Pirmiausia nustatome, koks yra didžiausias vien šokoladinių saldainių ar tik suktinukų skaičius, kurį galima įsigyti už visą sumą. Gautas „AllChocolates“ ir „AllBulks“ vertes naudojame norėdami apriboti šokoladinių saldainių ir suktinukų skaičiaus paieškų skaičių. Kiekvienai šokoladinių saldainių skaičiaus (i) ir ritinėlių skaičiaus (j) vertei nustatome bendrą jų pirkimo kainą. Jei apskaičiuota Kaina yra 1801, tai pasirinktas variantas yra vienas iš problemos sprendimų.

Funkcija Tab() nurodo, iš kokios pozicijos nuo formos krašto bus rodoma informacija, einanti po šios funkcijos. Jei Tab(19), tai iš 19 pozicijos.

Programa rodo 3 galimus pirkimo variantus:

Šokoladas 7, suktinukai 88

Šokoladas 25, suktinukai 57

Šokoladas 43, bandelės 26

Jei norite vienareikšmiškai atsakyti, turite suformuluoti papildomą sąlygą. Pavyzdžiui, „nupirkta mažiau bandelių nei šokoladų“. Tada vienintelis sprendimas bus 3-asis variantas.

Yra daug matematinių problemų, kurias galima paprasčiausiai išspręsti brutalia jėga, naudojant įdėtos kilpos programavimą.