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, operaattoriJos… Sitten.
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ätvarten… Seuraavaksikä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ä silmukoitavarten… Seuraavaksivalitsemme 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:
- Silmukat kiinteällä määrällä toistoja ( vastakkaiset silmukat).
- 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ä:
- vastasilmukat, joissa silmukan runko suoritetaan tietty määrä kerran;
- silmukat ryhmien tai kokoelmien käsittelyyn;
- 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
- Counter-muuttujan arvoksi asetetaan StartValue.
- Kuntolaskuri tarkistetaan<= КонЗнач
- Jos ehto täyttyy, silmukan runko suoritetaan. Counter-muuttuja muuttuu askelarvolla: Counter = Laskuri + askel.
- 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).