Kotiin / Windowsin yleiskatsaus / Vba for to step on yksinkertainen esimerkki sen toiminnasta. VBA silmukat. Laboratoriotöitä ohjelmoinnin perusteista

Vba for to step on yksinkertainen esimerkki sen toiminnasta. VBA silmukat. Laboratoriotöitä ohjelmoinnin perusteista

Operaattorin syntaksi:

vartenLaskuri= Aloita ToLoppu[VaiheVaihe]

Block_Operators

SeuraavaksiLaskuri

Tässä se on merkitty:

varten varten (pakollinen avainsanaVB);

Vastaanottaja to (pakollinen avainsanaVB);

Block_Operators– yksi tai useampi operaattori soi syklin runko;

laskuri - kokonaislukumuuttuja, joka laskee suoritettujen silmukoiden määrän;

Alku, loppu - alku- ja loppulaskurin arvot;

Vaihe vaihe(avainsanaVB);

Vaihe – laskurin muutosvaihe; voi olla negatiivinen; parametri on valinnainen, koska jos askel on 1, voitStep Vaihe alentaa;

Seuraava – seuraava (pakollinen avainsana VB, silmukan loppuoperaattori).

Laskuri arvo (Alku, loppu) voi olla Numeeriset vakiot tai muuttujat, jotka ovat kokonaisluku- tai reaalityyppisiä, voivat olla negatiivisia tai positiivisia lukuja. Jotta silmukan runko voidaan suorittaa vähintään kerran, sen täytyy olla Alku ≤ loppu, Jos Vaihe> 0 ja Alku ≥ Loppu, Jos Vaihe< 0. Heti kun se käy ilmi Laskuri>loppu ( Jos Aloita< Конец), Silmukan suoritus päättyy. Jos Aloita =loppu, silmukka suoritetaan kerran;

Esimerkki 9.1 .Toiminnan arviointiY = 2 – 1.5 Sinxkun X muuttuu alueella 0,2 askelta.

Ohjelman fragmentti Y:n laskemiseen ja argumentin X ja funktion Y tulostamiseen:

X = 0 - 2,4 Vaihe 0,2

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

Ymmärtääksesi kuinka tämä silmukka toimii, tässä on ohjelma samanlaiselle silmukalle, joka on luotu käyttämällä operaattoriSiirry, tunnisteet, operaattoriJosSitten.

M1: X = X + 0,2

Jos X<= 2.4 Then

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

Katsotaanpa, miten tämä ohjelma toimii. Ensimmäinen laskenta Y on epästandardi, ikään kuin se putoaisi syklistä. Jakso alkaa, kun ohjaus GoToM1 on siirretty ensimmäisen kerran etikettiin M1. M1-rivillä argumenttia X kasvatetaan 0,2 askeleella ja tarkistetaan välittömästi, ylittääkö X:n uusi arvo lopullisen arvon 2,4. Jos se ei ylitä, niin Y:n laskenta toistetaan tällä uudella X:llä. Sitten GoToM1-operaattori suoritetaan uudelleen - ohjauksen siirtäminen riville M1. Nämä Y:n laskemisen iteraatiot (syklit) päättyvät heti, kun X ylittää arvon 2,4.

Verrataan nyt If-ohjelmaa For...Next-silmukkaan.

X = 0 - 2,4 Vaihe 0,2

korvaa kaksi riviä

M1: X = X + 0,2

Jos X<= 2.4 Then

Se on kaksi viimeistä koodiriviä, jotka suoritetaan For-silmukassa, mutta emme näe sitä. Koodasimme ne rivillä cFor... GoTo M1 -koodirivi on koodattu sanalla Next X (kirjaimellisesti: next X). Tämä johtaa kompaktiin muotoiluun.

Kun käytät For...Next-silmukkaa, sinun on opittava käyttämään silmukkalaskuria erilaisten ongelmien ratkaisemiseen. Sinun on selvitettävä, kuinka laskuria käytetään ongelman ratkaisemiseen analysoida ongelman muotoilua, löytää muutoskuvioita joissakin ongelman parametreissa.

Esimerkki 9.2 . Sarjan alkioiden summan määrittäminen: .

Ohjelman fragmentti:

S = 0 ‘ S – sarjan summa

Jos i = 1 - 16', laskuri i on murtoluvun nimittäjä

S = S + 1/i ‘ summan kertymä

Tulosta "S ="; S' tulosta S-määrä lomakkeeseen

Jokaiselle laskurin i arvolle lauseke 1/i muodostaa peräkkäin sarjan alkiot 1:stä alkaen.

Esimerkki 9.3 . Alkioiden sarjan summan laskeminen
.

Ohjelman fragmentti:

S = 0 ‘ S – sarjan summa

Jos i = 1 - 18', laskuri i – osoittaja

S = S + i/(i + 1) ‘ nimittäjä on 1 suurempi kuin osoittaja

Tulosta "S ="; S' tulosta S-määrä lomakkeeseen

Esimerkki 9.4 . Summan laskeminen: 5 + 8 + 11 + … + 32 + 35

Ohjelman fragmentti:

S = 0 ‘ S – sarjan summa

Jos i = 5 - 35 Vaihe 3 ' saa aritmeettisen _

eteneminen nimittäjällä 3

Tulosta "S ="; S

Esimerkki 9.5. Summan laskeminen tietylle x:lle:

Tehtävän analyysi osoittaa, että X:n aste vaihtelee 1:stä 10:een. Tässä tapauksessa X:n kertoimen osoittaja on suurempi kuin aste yhdellä ja nimittäjä 2:lla. Muodostetaan asteen arvo käyttämällä laskuri i. Sitten voit luoda tällaisen ohjelman (fragmentti):

S = 1 ‘ S – sarjan summa

Jos i = 1 - 10', kuten laskuri i, aste muuttuu X:ssä

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

Tulosta "S ="; S

PyörätvartenSeuraavaksikäytettytulo, lähtö Jataulukon käsittely .

Esimerkki 9.6. Matriisielementtien arvojen syöttö ja tulostus B(N).

Ohjelman fragmentti:

' Jätämme arvon määrittämättä muuttujalle N, _

kirjoitettu lomakkeelle txtN-tekstikenttään:

B(i) = InputBox("Syötä kohde B(" & i & ")", _

"Syötetaulukko B(" & N & "))

Tulosta " "; B(i);

Toiminto InputBox() näyttää valintaikkunan, jossa on sulkemispainike, määritetty viesti, syöttökenttä ja painikkeet OK,Peruuttaa, tietyllä otsikolla (tai ilman sitä). Jos syötetään numero 12 - taulukon koko N, niin esimerkissämme, kun se ilmestyy ensimmäisen kerran, tämä ikkuna näyttää tältä:

Kuten näemme, viesti Syötä elementti B(1) pyytää sinua syöttämään 1. elementin arvon tekstiruutuun. Tämä ikkuna tulee näkyviin 12 kertaa, koska taulukko sisältää 12 elementtiä. Tämä seuraa lomakkeen otsikosta. Elementin B(i) indeksi kutsussa vaihtelee 1:stä 12:een.

Jos haluat näyttää lomakkeella vain taulukon B(N) elementtien arvot, silmukan runko koostuu yhdestä lauseesta:

Joidenkin toimintojen suorittaminen taulukon elementeistä tehdään myös For...Next loop -operaattorilla.

Annetaan esimerkkejä yksiulotteisten taulukoiden käsittelystä.

Esimerkki 9.7 . Maksimielementin määrittäminen taulukossa B(M).

Lukuun ottamatta lähtötietojen syöttämistä ja tulosten antamista, kuvaamme lyhyesti algoritmia:

    Ilmoitetaan muuttuja Bmax, johon syötetään taulukon ensimmäisen elementin arvo ja muuttuja Imax, jolle annamme 1 - taulukon ensimmäisen elementin indeksin.

    Silmukassa For...Next-operaattorilla katsomme läpi kaikki taulukon elementit alkaen toisesta. Käyttämällä If...Then-operaattoria vertaamme niiden arvoja Bmax-muuttujaan tallennettuun arvoon.

    Jos käy ilmi, että taulukon elementin arvo on suurempi kuin Bmax:n arvo, niin Bmax:lle annetaan tämän elementin arvo ja arvolle Imax tämän taulukkoelementin indeksi.

Silmukan päätyttyä muuttuja Bmax sisältää maksimielementin arvon ja Imax sen indeksin (numeron).

Ohjelma tälle algoritmin osalle.

Bmax = B(1): Imax = 1

Jos B(i) > Bmax, niin Bmax = B(i): Imax = i

Esimerkki 9.8. Taulukon positiivisten elementtien summan, tulon ja lukumäärän määrittäminenD(M).

Muuttujat: S, P, K – vastaavasti positiivisten elementtien summa, tulo ja lukumäärä.

Algoritmi tällainen määritelmä:

    Muuttujalle S ja K annetaan nolla ja muuttujalle P 1. Yleensä muuttujat, joihin summa kertyy, tässä on S ja k, nollataan aina ennen silmukkaa, ja muuttujat jolle tuote lasketaan, on annettu 1.

    For...Next-silmukan avulla käymme läpi kaikki taulukon elementit ja tarkistamme, ovatko ne positiivisia (D(i) > 0).

    Jos alkio osoittautuu positiiviseksi, lisäämme sen arvon summan S arvoon ja tallennamme uuden summan samaan muuttujaan. Kerrotaan muuttuja P elementin positiivisella arvolla ja tallennetaan myös muuttujaan P. Ja lisäämme 1 muuttujaan K ja tallennamme uuden arvon samaan muuttujaan

Ohjelmoida Tämä algoritmin osa näyttää tältä:

S = 0: P = 1: K = 0

Jos D(i) > 0 Sitten

S = S + D(i) ‘ näin summa kertyy _

taulukon elementtien positiiviset arvot D(i)

P = P*D(i) ‘positiivisen tuotteen määritelmä

"taulukon elementit

K = K + 1 ‘ tätä operaattoria kutsutaan LASKURIksi, tässä se on

‘ määrittää positiivisten taulukon elementtien määrän

Esimerkki 9.9. Parittomien taulukon elementtien summan, tulon, lukumäärän ja keskiarvon löytäminenD(M).

Tässä on fragmentti ohjelmasta tällaista määritelmää varten.

S = 0: P = 1: K = 0

Jos D(i) Mod 2<>0 Sitten

Ssr = S/k ‘ parittomien alkioiden keskiarvon laskeminen

Vertaa tätä ohjelman fragmenttia esimerkin 9.8 ohjelmaan. Tämä ohjelma toistaa melkein kokonaan edellisen. Vain If-lauseen ehto on muuttunut. Ehto D(i) Mod 2<>0 tarkoittaa, että etsimme taulukon D(i) alkioita, jotka eivät ole tasaisesti jaollisia kahdella, eli parittomat alkiot. Jos tarkistamme ehdon D(i) Mod 2 = 0, valitsemme taulukon parilliset alkiot.

Kuten tiedetään, jako Mod antaa jaon loppuosan kokonaislukuina. Esimerkiksi operaattorin d = 34Mod4 suorittamisen jälkeen muuttuja d on yhtä suuri kuin 2. Siksi, jotta voimme valita taulukon elementtejä, jotka ovat 4:n kerrannaisia, meidän on tarkistettava ehto D(i) Mod 4 = 0. olla samanlaisia, jos etsimme elementtejä, jotka ovat muiden lukujen kerrannaisia. Nämä muut numerot kirjoitetaan 4:n sijasta.

Esimerkki 9.10. Array Elementtien kirjoittaminenR(N), 5:n kerrannaiset, toiseen taulukkoon ja tulostaa uuden taulukon lomakkeeseen.

Merkitään toinen taulukko, esimerkiksi R5(N). Tämän uuden taulukon koon tulisi olettaa olevan sama kuin alkuperäisen, koska äärimmäisessä tapauksessa kaikki elementit voivat olla 5:n kerrannaisia.

Ongelman algoritmi:

    Nollaa laskuri k. For...Next-silmukkaoperaattorilla käymme läpi kaikki taulukon R(N) elementit.

    Tarkistamme jokaisen elementin 5:n kerrannaisen käyttämällä If...Then-operaattoria ja jakamalla taulukon elementin Mod:lla.

    Jos elementti on 5:n kerrannainen, muodostamme k=k+ 1 -tyypin laskurin avulla taulukon R5(N) indeksit alkaen 1:stä ja kirjoitamme se tähän toiseen taulukkoon –R5(N).

    Jos k on eri kuin nolla, näytä taulukko R5() lomakkeella.

    Jos k on nolla, tulostetaan: "Ei ole 5:llä jaettavia alkioita."

Ohjelman fragmentti:

Jos R(i) Mod 5 Silloin k = k + 1: R5(k) = R(i)

Jos k<>0 Sitten

Tulosta "Ei 5:llä jaettavia elementtejä"

Silmukat voidaan upottaa muiden silmukoiden sisään.

Esittelemme työtä sisäkkäisiä silmukoita . Alla oleva ohjelma näyttää syklilaskurien i, j ja k arvot. i, j, k lähdöstä käy selväksi, kuinka sisäkkäiset silmukat suoritetaan.

Yksityinen Sub frmCycle_DblClick()

ScaleMode = 4 yksikköä – symbolit

Jos i = 1 - 3 'ulompi silmukka

Tulosta "i ="; i;

Jos j = 1 - 4 '1. sisäkkäinen silmukka

NykyinenX = Tekstinleveys("i = 1 ") + 5

Tulosta "j ="; j;

NykyinenX = Tekstinleveys("i = 1 j = 1 ") + 7

Jos k = 1 - 5 '2. sisäkkäinen silmukka

Esitetyssä lomakkeessa (kuva 1) näkyy kaikkien kolmen silmukan laskurien tulostuksen tulokset: ulompi silmukka – laskuri i, ensimmäinen sisäkkäinen silmukka – laskuri j ja toinen, sisin silmukka – laskuri k. Kuten näemme, hitain laskuri on ulompi silmukka(poi) ja "nopein" on sisimmän silmukan laskuri (mukaank).

Ohjelma suoritetaan kaksoisnapsauttamalla hiiren vasenta painiketta frmCicli-lomakkeella.

CurrentX, CurrentY – lomakkeen ominaisuudet, jotka määrittävät lähtöpisteen X, Y koordinaatit tietojen näyttämiselle Print-menetelmällä (katso kuvasta 1 X- ja Y-akselien sijainti lomakkeella).

TextWidth() on funktio, joka palauttaa funktiossa määritetyn tekstin leveyden argumenttina lainausmerkeissä.

Sisäkkäisiä silmukoita käytetään käsiteltäessä kaksiulotteisia taulukoita (matriiseja). Mutta joissakin tehtävissä, pois lukien kaksiulotteisen taulukon elementtien syöttö ja tulos, voit rajoittaa itsesi yhteen silmukkaan. Katsotaanpa joitain esimerkkejä matriisiohjelmoinnista.

Esimerkki 9.11. Kokonaislukumatriisin (kaksiulotteisen taulukon) syöttö ja tulosintA(N).

Voit syöttää matriisiin rivien ja sarakkeiden mukaan . Se on helpompaa - rivi riviltä, ​​jos ohjelmoit taulukon elementtien tulostuksen lomakkeeseen heti niiden syöttämisen jälkeen.

Matriisitulo ja -lähtörivi riviltä - fragmentti 1.

Himmeä M kokonaislukuna, N kokonaislukuna, i kokonaislukuna, j kokonaislukuna

Dim intA() Kokonaislukuna ' julistaa dynaamisen taulukon

M = Val(txtN.Text) ‘ M – rivien määrä

N = Val(txtN.Text) ‘ N – sarakkeiden määrä

ReDim intA(M, N) Kokonaislukuna määritä taulukko uudelleen

Sillä i = 1 To M ' i säilyttää arvonsa, kunnes se on täysin

'sisätettyä silmukkaa kohdassa j ei suoriteta

Tulosta " "; intA(i, j); "tulostus rivi riviltä

Tulosta ‘ siirry uuden rivin alkuun

Jos haluat syöttää matriisin sarakkeiden mukaan, sinun tulee tehdä ulompi silmukka j:ssä (määrittää sarakkeiden numerot) ja sisempi silmukka i: ​​ssä (määrittää rivien numerot).

Matriisitulo ja -lähtösarakkeiden mukaan fragmentti 2.

PrY = 2500: CurrentY = PrY ‘ PrY asettaa alun Y-koordinaatin

" näyttää lomakkeen jokaisen sarakkeen ensimmäisen elementin

Jos j = 1 - N ' j säilyttää arvonsa, kunnes se on täysin

'i-sisäkkäistä silmukkaa ei suoriteta

intA (i, j) = InputBox("Anna elementti intA(" & i & "," & j & ")", _

"Syötematriisi intA(" & M & "," & N & ")")

Tulosta-välilehti(6 * j); intA(i, j) ‘tulostus sarakkeittain

CurrentY = PrY ' näyttää ensimmäisen elementin

' seuraava sarake

Tämä toinen ohjelmafragmentti ei toista viittä ensimmäistä riviä ensimmäisestä fragmentista. Tab(6 * j)-funktio asettaa tulosteen alun riville (merkeissä) alkaen lomakkeen vasemmasta reunasta. Koordinaatti PrY tässä on yhtä suuri kuin 2500 twips, mutta voit valita toisen arvon.

Esimerkki 9.12 . Matriisielementtien arvojen järjestäminenV(N) nouseva.

Taulujen järjestämiseen on useita algoritmeja. Tässä yksi niistä: käyttämällä sisäkkäisiä silmukoitavartenSeuraavaksivalitsemme elementit ensimmäisestä toiseksi viimeiseen ja vertaamme niitä seuraaviin elementteihin; jos käy ilmi, että seuraava elementti on pienempi kuin valittu, vaihdamme ne.

Fragmentti ohjelmasta, joka toteuttaa tämän algoritmin:

Jos i = 1 - N - 1

Jos j = i + 1 - N

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

Selitetään tämä ohjelman fragmentti.

Käyttämällä ulompaa silmukkaa, jossa on laskuri i, valitsemme elementin V(i) verrattavaksi seuraaviin elementteihin. Sisäsilmukka, jossa on laskuri j, valitsee V(j):n seuraavat elementit vertailua varten. Alkuarvo j on i+ 1. Tämä on ensimmäinen alkio myöhemmistä.

Elementtien V(i) ja V(j) arvojen vaihtamiseksi otamme käyttöön muuttujan P, jossa "piilotamme" väliaikaisesti yhden taulukon elementin arvon (ohjelmassa tämä on V(i) )). Sitten elementille V(i) annetaan elementin V(j) arvo ja elementille V(j) arvo V(i), joka tallennetaan muuttujaanP. Jos "piilotamme" arvon V(j) P:ssä, niin arvojen vaihdon koodi on seuraava: P = V(j): V(j) = V(i): V(i) = P Tulos ei muutu.

Vastaanottaja lajittele taulukko laskevaan järjestykseen, riittää, että kirjoitat todentamisen ehto muotoon V(j) > V(i), eli vaihdat epäyhtälömerkki toiseksi.

Jos taulukko ei ole numeerinen, vaan merkkijono ja taulukon elementteihin on syötetty sukunimet, niin esimerkin 9.12 ohjelman avulla voit järjestää sukunimiluettelon aakkosjärjestyksessä. Tosiasia on, että tietokoneessa käytetyille aakkosten kirjaimille seuraavat epäyhtälöt ovat tosia: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

Esimerkki 9.13 . Positiivisten elementtien summan laskeminen matriisin parittomille sarakkeilleF(M, N) ja tulosta summat lomakkeeseen.

Ohjelman algoritmi:

    Käyttämällä ulompaa silmukkaa vaiheessa 2 muodostamme indeksin matriisin parittomista sarakkeista alkaen ensimmäisestä sarakkeesta.

    Nollaamme summan S, johon positiivisten elementtien summa kertyy.

    Sisäsilmukassa tarkastetaan taulukkoelementin etumerkki.

    Jos taulukon elementti on positiivinen (> 0), lasketaan summa S.

    Sisäsilmukan päätyttyä näytämme lomakkeella summan S.

Fragmentti ohjelmia:

Jos j = 1 - N Vaihe 2

Jos F(i, j) > 0, niin S = S + F(i, j)

Tulosta "Sarakkeen summa"; j; ":"; S ‘ j – sarakkeen numero!

Sisäkkäisten silmukoiden avulla voit järjestää vaihtoehtojen luettelo ja ratkaista ongelmia, joita ei voida ratkaista analyyttisesti. Haun tuloksena saadaan ratkaisuvaihtoehtoja, joista valitaan yksi tai useampi, joka täyttää ongelman ehdot.

Esimerkki 9.14. Siellä on 1801 ruplaa. Kuinka monta suklaata voit ostaa 31 ruplalla? ja pullat 18 ruplaa kuluttaaksesi kokonaan kaikki rahat.

Ohjelmoida:

Summa = 1801

AllChocolates = Summa\31: AllBulks = Summa\18

Jos i = 1 Kaikki suklaat

Jos j = 1 VseBulkiin

Hinta = i * 31 + j * 18 'ostohinta yhteensä

Jos hinta = 1801, niin

Tulosta "Suklaa:"; i; Tab(19); "Bulok:"; j

Selitetäänpä ohjelma, jossa käytämme venäjäksi nimettyjä muuttujia.

Ensin määritämme, mikä on enimmäismäärä suklaata yksin tai vain sämpylöitä, jotka voidaan ostaa koko summalla. Käytämme saatuja AllChocolates- ja AllBulks-arvoja rajoittaaksemme suklaan ja sämpylöiden lukumäärää. Kullekin suklaiden lukumäärän (i) ja rullien lukumäärän (j) arvolle määritämme niiden oston kokonaishinnan. Jos laskettu Hinta on 1801, niin valittu vaihtoehto on yksi ongelman ratkaisuista.

Tab()-funktio määrittää, mistä kohdasta lomakkeen reunasta tätä funktiota seuraavat tiedot näytetään. Jos Tab(19), niin 19. paikasta.

Ohjelma näyttää 3 mahdollista ostovaihtoehtoa:

Suklaa 7, sämpylät 88

Suklaa 25, sämpylät 57

Suklaa 43, pullat 26

Jos haluat antaa yksiselitteisen vastauksen, sinun on muotoiltava lisäehto. Esimerkiksi "sämpylöitä ostettiin vähemmän kuin suklaata". Silloin ainoa ratkaisu on kolmas vaihtoehto.

On monia matemaattisia ongelmia, jotka voidaan yksinkertaisesti ratkaista raa'alla voimalla käyttämällä sisäkkäistä silmukkaohjelmointia.

Päätöksentekorakenteiden lisäksi on olemassa toisenlainen ohjausrakenne, jota kutsutaan sykliksi.

Kierrä on algoritminen rakenne, jonka avulla toteutetaan useita operaattorilohkojen toistoja.

Visual Basicissa on kolme päätyyppiä silmukoita, jotka toteutetaan For:Next-, Do:Loop- ja While:Wend-rakenteilla.

For:Seuraava silmukka. Käytetään, kun tietyn lauselohkon toistojen määrä tiedetään etukäteen. Tämä muotoilu näyttää tältä:

Laskurille = alkuarvo Loppuarvoon Operaattorit1 Operaattorit2 Seuraava [laskuri]

Kun yllä olevat lauseet suoritetaan ensimmäistä kertaa, laskurimuuttujalle annetaan alkuarvo, jonka jälkeen on kaksi vaihtoehtoa. Jos ehtolaskurin > loppuarvon tarkistuksen tuloksena saadaan arvo True, silmukka päättyy, eikä lohkoja operaattoreita1 ja operaattorit2 suoriteta koskaan. Toisaalta, jos ehtotestin tulos on False, niin tässä tapauksessa käskylohkot suoritetaan ensimmäistä kertaa, minkä jälkeen tapahtuu siirtyminen silmukan alkuun. Seuraavaksi laskurimuuttujan arvoa kasvatetaan askeleella, joka sijaitsee Step-avainsanan jälkeen (jos se puuttuu, asetetaan askel = 1). Tämän jälkeen tarkistetaan uudelleen ehtolaskuri > loppuarvo jne. totuus, silmukan loppu tapahtuu sillä hetkellä, kun tämän tarkistuksen tuloksena on arvo True.

Usein on tarpeen lopettaa silmukan "hätätilanne", kun jokin lisäehto täyttyy. Tässä tapauksessa silmukan sisällä tulee käyttää palvelulausetta Exit:For, joka yleensä sijaitsee ohjausrakenne, Esimerkiksi:

Jos kunto sitten Poistu For

Jos ehdon tarkistuksen tulos on True, silmukan suoritus lopetetaan ja operaattori1-lohko suoritetaan uudelleen, mutta operaattori2-lohko ei.

Tee: Loop. Sitä käytetään, kun silmukan runkooperaattoreiden toistojen lukumäärää ei tiedetä etukäteen. Tätä mallia on neljä lajiketta. Käytettäessä kahta ensimmäistä silmukka joko suoritetaan useita kertoja tai ei ollenkaan.

Tee Kunnes-ehto Silmukan lausekkeet

Jos ehdon tarkistuksen tulos on False, lauselohko suoritetaan, muuten siirrytään palvelusanan Loop jälkeen olevaan lauseeseen. Toisaalta, jos ehdon ensimmäinen testi palauttaa tuloksen True, silmukkaa ei suoriteta edes kerran.

Tee While Condition Loop -lausekkeet

Jos ehto on tosi, lausekelohko suoritetaan, mutta jos se on epätosi, eli tarkistuksen tulos on False, silmukkaa ei suoriteta edes kerran.

Jos käytetään kahta viimeistä rakennetta, silmukka suoritetaan vähintään kerran.

Tee lausunnot Loop asti kuntoon

Käskylohko suoritetaan niin kauan kuin ehdon testauksen tulos on False, muuten silmukka päättyy.

Tee lausuntojen silmukka kun ehto

Jos ehto on epätosi, lausekelohko suoritetaan, mutta jos se on tosi, ts. Tarkistuksen tulos on True, sitten sykli päättyy.

Vaikka silmukka: Wend. Sitä käytetään myös silloin, kun silmukan runkolausekkeiden toistojen lukumäärää ei tiedetä etukäteen, ja sillä on seuraava syntaksi:

Vaikka kunto Wend lausunnot

Jos ehdon tarkistuksen tulos on True, suoritetaan operaattorilohko, muuten siirrytään palvelusanan Wend jälkeen olevaan operaattoriin. Toisaalta, jos ehdon ensimmäinen testi palauttaa tuloksen False, silmukkaa ei suoriteta edes kerran.

VBA. Jaksojen järjestäminen.

Loop-lauseita käytetään toistamaan toiminto tai toimintoryhmä tietyn määrän kertoja. Toistojen (silmukkaiteraatioiden) määrä voidaan määrittää ennalta tai laskea.

VBA tukee kahden tyyppisiä silmukkarakenteita:

  1. Silmukat kiinteällä määrällä toistoja ( vastakkaiset silmukat).
  2. Silmukat, joissa on rajoittamaton määrä toistoja ( ehdolliset silmukat).

Konseptia käytetään kaikentyyppisille sykleille silmukan runko , joka määrittää lauseiden lohkon, joka on suljettu silmukan alku- ja loppulausekkeiden väliin. Jokaista silmukan rungon lauseiden suorittamisen toistoa kutsutaan iterointi

Kiinteät syklit

VBA tarjoaa kaksi ohjausrakennetta kiinteän silmukan järjestämiseen: For ... Next (silmukka laskurilla) ja For Every ... Next (silmukka, jossa on luettelo).

Operaattori...Seuraavaksi Tämä on tyypillinen laskurisilmukka, joka suorittaa tietyn määrän iteraatioita. For...Next-lauseen syntaksi on:

varten<счетчик> = <начЗначение>Että<конЗначение>

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

Seuraava [<счетчик>]

Esimerkki For...Next-operaattorin käytöstä.

Listaus 1. Käyttäjä ... Seuraava

' TEHTÄVÄ: Luo ohjelma, joka vastaanottaa kaksi numeroa käyttäjältä.

' Lisää kaikki luvut näiden kahden numeron määrittämälle alueelle ja sitten

' näyttää tuloksena olevan määrän.

Alanäyte7()

Dim i As Integer ‘jaksolaskuri

Dim sStart ‘laskurin alkuarvo

Dim sEnd ‘loppulaskurin arvo

Dim sSum As Long ‘tuloksena oleva summa

sStart = InputBox("Anna ensimmäinen numero:")

sEnd = InputBox("Anna toinen numero:")

sSum = 0

i = CInt(sAlku) CInt(sEnd)

sSum = sSum + i

Seuraava i

MsgBox "Numeroiden summa " & sStart & " - " & sEnd & " on: " & sSum

Lopeta ala

Loop-lause jokaiselle...Seuraavakuuluu kohdetyyppioperaattoreiden luokkaan, ts. koskee ensisijaisesti kokoelmia objekteja sekä taulukoita . Silmukan runko suoritetaan kiinteän määrän kertoja, joka vastaa taulukon tai kokoelman elementtien määrää. Jokaiselle...Seuraava lausekemuoto:

Jokaiselle<элемент>sisään<группа> <блок операторов>Seuraava [<элемент>]

Ehdolliset silmukat (määrittämättömät silmukat)

Ehdollisia silmukoita käytetään, kun toistuvia toimintoja on suoritettava vain tietyissä olosuhteissa. Iteraatioiden määrää ei ole määritelty ja se voi yleensä olla nolla (erityisesti silmukoille, joissa on ennakkoehto). VBA tarjoaa kehittäjille useita ohjausrakenteita ehdollisten silmukoiden järjestämiseen:

  • Neljä erilaista Do.. Loops -silmukkaa, jotka eroavat tarkistettavan ehdon tyypistä ja tämän tarkistuksen suorittamiseen kuluvasta ajasta.
  • Jatkuva silmukka kun... Wend.

Do While... -silmukka on tyypillinen silmukka ennakkoehdoin. Ehto tarkistetaan ennen kuin silmukan runko suoritetaan. Sykli jatkaa työtään siihen asti<условие>suoritetaan (eli sen arvo on True). Koska tarkistus suoritetaan alussa, silmukan runkoa ei ehkä koskaan suoriteta. Tee kun... Silmukkamuoto:

Tee Vaikka<условие>

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

Silmukka

Listaus 2. Do While... Loop

' TEHTÄVÄ: Luo ohjelma, joka vaatii käyttäjän syötteen

"mielivaltainen numerosarja. Syöttö on lopetettava

' vasta kun syötettyjen parittomien lukujen summa ylittää 100.

Alanäyte8()

Dim OddSum Kokonaislukuna ’parittojen lukujen summa

Dim OddStr As String ’merkkijono, jossa on parittomat numerot

Dim Num 'hyväksyä syötetyt numerot

OddStr = "" 'lähtömerkkijonon alustus

OddSum = 0 'alustaa OddSum

Tee Vaikka OddSum< 100 ‘начало цикла

Num = InputBox("Anna numero: ")

Jos (Num Mod 2)<>0 Sitten pariteettitarkistus

OddSum = OddSum + Num ’parittomien lukujen summan kertymä

OddStr = OddStr & Num & ”

Lopeta jos

Silmukka

"tulosta merkkijono, jossa on parittomat numerot

MsgBox prompt:=”Parittomat numerot: ” & OddStr

Lopeta ala

Tee...silmukan aikana -lausuntosuunniteltu järjestämiseensilmukka jälkiehdoin. Ehto tarkistetaan, kun silmukan runko on suoritettu vähintään kerran. Sykli jatkaa toimintaansa asti<условие>pysyy totta. Tee... Silmukkamuotoilu:

Tehdä<блок операторов>Loop kun<условие>

Listaus 3. Silmukka jälkiehdoin

' TEHTÄVÄ: Luo ohjelma pelille "Arvaa numero". Ohjelman tulee olla satunnainen

" tapa luoda luku välillä 1 - 1000, käyttäjän täytyy

"Arvaa tämä numero. Ohjelma näyttää vihjeen jokaisesta syötetystä numerosta

""enemmän" tai "vähemmän".

Alanäyte8()

Randomize Timer ’alusta satunnaislukugeneraattori

Dim msg As String’ viestimerkkijono

Dim SecretNumber As Long, UserNumber Varianttina

Aloita: SecretNumber = Round(Rnd * 1000) ‘ tietokoneella luotu numero

UserNumber = Tyhjä käyttäjän antama numero

Pelaa peliä

Valitse tapaus tosi

Case IsEmpty(UserNumber): msg = "Anna numero"

Case UserNumber > SecretNumber: msg = "Liian monta!"

Tapaus UserNumber< SecretNumber: msg = “Слишком мало!”

Lopeta valinta

UserNumber = InputBox(prompt:=msg, Title:="Arvaa numero")

Loop While UserNumber<>Salainen numero

'tutkimus

Jos MsgBox("Pelaa uudelleen?", vbYesNo + vbQuestion, "Arvasitko!") = vbKyllä Sitten

GoTo Begin

Lopeta jos

Lopeta ala

Silmukat Tee kunnes... Silmukat ja tee... Silmukat asti ovat aiemmin käsiteltyjen ehdollisten silmukoiden inversioita. Yleensä ne toimivat samalla tavalla, paitsi että silmukan runko suoritetaan, jos ehto on epätosi (ts.<условие>= Väärin). Tee kunnes... Silmukkamuoto:

Tee asti<условие> <блок операторов>Silmukka

Tee... Loop Until -muoto:

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

Loop asti<условие>

Käytännön tehtävä:Kirjoita luetteloiden 10 ja 11 ohjelmat uudelleen käyttämällä käänteissilmukkakäskyjä.

Loop While...Wend koskee myös ehdollisia silmukoita. Tämä operaattori on täysin yhdenmukainen Do While... -silmukkarakenteen kanssa. While...Wend-silmukan muoto:

Vaikka<условие>

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

Lähteä

Tämän operaattorin erottuva piirre on mahdottomuus pakottaa silmukan rungon loppuun saattaminen (keskeytys) (Exit Do -operaattori ei toimi While ... Wend -silmukassa).

Syklin keskeyttäminen

Lopettaaksesi iteraation aikaisin ja poistuaksesi silmukasta, käytetään Exit-käskyä. Tätä operaattoria voidaan käyttää missä tahansa syklisessä rakenteessa paitsi While... Wend. Yleinen syntaksi Exitin käyttämiselle silmukan katkaisemiseen on:

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

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

Poistu (For | Tee)

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

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

Kun Exit-käsky suoritetaan, silmukka keskeytyy ja ohjaus siirtyy käskyä seuraavaan käskyyn<конец_цикла>. Silmukan rungossa voi olla useita Exit-käskyjä.

Listaus 4. Pakota poistuminen silmukasta

Alanäyte9()

Jos i = 1 - 10000000

Jos i = 10, sitten Exit For ' poistu silmukasta, kun laskuri saavuttaa arvon 10

Seuraavaksi

Oppitunti sarjasta: " Ohjelmointi Visual Basic.NEN:ssä koululaisille"

Olet tutustunut ComboBox-ohjaimeen.
Tällä oppitunnilla jatkamme Visual Basic.Net -kielioperaattoreiden tutkimista keskittyen silmukkaoperaattoreihin.
Syklinen algoritmiset rakenteet on kolme tyyppiä:

  1. vastasilmukat, joissa silmukan runko suoritetaan tietty määrä kerran;
  2. silmukat ryhmien tai kokoelmien käsittelyyn;
  3. ehdolliset silmukat, joissa silmukan runko suoritetaan ehdon ollessa tosi (tai kunnes ehdosta tulee tosi).

Tällä oppitunnilla tarkastelemme silmukkaoperaattoria laskurilla (For . . . Next). Kirjoitetaan projekti tällä operaattorilla.

Kierrä laskurin kanssa varten. . . Seuraava t käytetään, kun tiedetään etukäteen kuinka monta toistoa on suoritettava.

Lohkokaavio

Yleiskuva operaattorista

Laskurille = Alkuarvosta loppuarvoon -silmukkateksti Seuraava [laskuri]

Operaattorin syntaksi on seuraava: For-avainsanalla alkava rivi on silmukan pää ja Next-avainsanalla alkava rivi on silmukan loppu, niiden välissä on lauseet, jotka ovat silmukan runko.

Algoritmi For-operaattorin suorittamiseksi. . . Seuraavaksi

  1. Counter-muuttujan arvoksi asetetaan StartValue.
  2. Kuntolaskuri tarkistetaan<= КонЗнач
  3. Jos ehto täyttyy, silmukan runko suoritetaan. Counter-muuttuja muuttuu askelarvolla: Counter = Laskuri + askel.
  4. Kun Counter-muuttuja saavuttaa arvon ConValue, silmukka poistuu ja seuraavat käskyt suoritetaan.

Ohjelmoija voi järjestää ennenaikaisen poistumisen silmukasta Exit For -konstruktion avulla. Tässä tapauksessa silmukasta poistutaan automaattisesti ja ohjaus siirtyy silmukkaa seuraavaan komentoon.

Projekti "Talletustulot"

Kirjoita projekti, joka laskee talletuksen tulot ja laskee yksinkertaisen ja koronkoron. Yksinkertaista korkoa kertyy talletusajan lopussa, korkokorkoa kertyy kuukausittain ja se lisätään alkuperäiseen talletussummaan ja seuraavan kuukauden korko uudelle summalle. Suositeltu muoto on esitetty kuvassa.

Toteutustekniikka

Tämä opetusohjelma osoitti, kuinka For...Next-silmukkaa käytetään koodin toistamiseen tietyn määrän kertoja.

Kaikki toimenpiteen toimet, jotka toistetaan tietyn määrän kertoja tai kunnes jokin ehto täyttyy tai ei täyty, kutsutaan sykli .

Prosessi, jossa kaikki silmukkarakenteeseen suljetut lauseet suoritetaan kerran, kutsutaan silmukan iteraatio.

Kutsutaan silmukkarakenteita, jotka suorittavat aina tietyn määrän kertoja silmukoita, joissa on kiinteä määrä iteraatioita. Muuntyyppiset silmukkarakenteet toistuvat vaihtelevan määrän kertoja riippuen joistakin ehdoista. Tällaisia ​​syklejä kutsutaan määrittelemättömät syklit.

Silmukan alun ja lopun välissä olevaa lauseketta kutsutaan "silmukan runko".

Yksinkertaisin silmukkarakenne on kiinteä sykli .

For..Seuraava silmukka

Syntaksi

varten laskuri = Aloita Vastaanottaja Loppu
lausunnot
Seuraava [ laskuri]

Laskuri - mikä tahansa VBA-numeerinen muuttuja
Aloitus - mikä tahansa numeerinen lauseke, joka määrittää laskurimuuttujan alkuarvon
End - numeerinen lauseke, joka määrittää laskurimuuttujan lopullisen arvon


Oletuksena VBA lisää muuttujaa laskuri 1:llä joka kerta, kun lauseet suoritetaan silmukassa. Voit asettaa eri arvon ( SterSize- mikä tahansa numeerinen lauseke), jolla se muuttuu laskuri.

avainsana Seuraavaksi kertoo VBA:lle, että silmukan loppu on saavutettu. Valinnainen muuttuja laskuri avainsanan jälkeen Seuraavaksi on oltava sama muuttuja laskuri, joka määritettiin avainsanan jälkeen varten silmukkarakenteen alussa.


Alla on luettelo yksinkertaisimmasta silmukasta For..Seuraava, joka laskee lukujen summan 1-10:



Ja nyt kaksi vaihtoehtoa syklille For..Seuraava käyttämällä muuta kuin yhtä silmukkaaskelta:



Huomio! Kun vähennät syklilaskuria For..Seuraava silmukka suoritetaan niin kauan kuin laskurimuuttuja on suurempi tai yhtä suuri kuin lopullinen arvo, ja kun silmukkalaskuria kasvatetaan, silmukka suoritetaan niin kauan kuin laskurimuuttuja on pienempi tai yhtä suuri kuin lopullinen arvo.

Silmukka jokaiselle..Seuraava

Kierrä Jokaiselle..Seuraava ei käytä syklilaskuria. Pyörät Jokaiselle..Seuraava suoritetaan niin monta kertaa kuin tietyssä ryhmässä on elementtejä, kuten objektikokoelma tai taulukko (jota käsitellään myöhemmin). Toisin sanoen sykli Jokaiselle..Seuraava suoritetaan kerran jokaiselle ryhmän elementille.

Syntaksi

Jokaiselle Elementti sisään ryhmä
lausunnot
Seuraava [ Elementti]

Elementti - muuttuja, jota käytetään toistamaan tietyn ryhmän kaikki elementit
Ryhmä on kokoelmaobjekti tai -taulukko
Lausekkeet - yksi, useita tai ei ollenkaan VBA-lauseita (silmukan runko).