Slučka pre popis vba excel. "Príkazy VBA slučky

Slučky vám umožňujú vykonať jeden alebo viac riadkov kódu viackrát. VBA podporuje nasledujúce slučky:

Pre...Ďalší Pre každý...Ďalší Urobte... Slučka

Konštrukt For. . . Ďalšie. Keď je počet opakovaní známy vopred, použije sa cyklus For. . . Ďalšie. Cyklus For používa premennú nazývanú premenná cyklu alebo počítadlo cyklu, ktorá sa zvyšuje alebo znižuje o danú hodnotu vždy, keď sa cyklus opakuje. Syntax pre túto konštrukciu je:

Pre počítadlo = začiatok Na koniec Ďalšie výpisy

Parametre čítač (počítadlo), začiatok (začiatok cyklu), koniec (koniec cyklu) a prírastok (prírastok) sú číselné.

Poznámka. Parameter prírastku môže byť kladný alebo záporný. Ak je kladný, počiatočný parameter musí byť menší alebo rovný koncovému parametru, inak sa slučka nespustí. Ak je parameter increment záporný, potom musí byť počiatočný parameter väčší alebo rovný hodnote koncového parametra, aby bolo možné vykonať telo cyklu. Ak parameter Step nie je nastavený, predvolená hodnota parametra prírastku je 1.

VBA spustí cyklus For v nasledujúcom poradí:

1. Nastaví spustenie počítadla premenných slučky.

2. Porovnáva hodnotu počítadla premennej slučky a hodnotu koncového parametra. Ak je premenná počítadla väčšia, VBA ukončí cyklus. (Ak je hodnota parametra increment záporná, potom VBA ukončí cyklus, ak je hodnota počítadla premennej cyklu menšia ako hodnota koncového parametra.)

3. Vykonáva príkazy príkazov tela cyklu.

4. Zvyšuje hodnotu počítadla premennej slučky o 1 alebo o hodnotu inkrementálneho parametra, ak je daný.

5. Opakujte kroky 2 až 4.

Zvážte príklad: Vypočítajte hodnotu funkcie f(t)

dané a, b, n, ak sa t mení z a na b v prírastkoch Dt=(b-a)/(n-1).

Podpríklad3() Dim f() Ako Single Dim a As Single, b As Single, t As Single, dt As Single Dim i As Integer, n As Integer Call read("a1", a) : Call read("b1" , b) : Volanie read("c1", n) ReDim f(1 až n - 1) dt = (b - a) / (n - 1) : t = a Call out("a2", "i") : Call out("b2", "t") : Call out("c2", "f(t)") Pre i = 1 až n - 1 t = t + dt Ak t<= -1 Then f(i) = -1 ElseIf t >1 Potom f(i) = 1 Inak f(i) = t End If Call out("a" & (2 + i), i) : Call out("b" & (2 + i), t) : Call out out("c" & (2 + i), f(i)) Next i End Sub

Konštrukt For Each. . . Ďalšie

Pre každú slučku. . . Ďalej je to ako slučka For. . . Ďalej, ale zopakuje skupinu príkazov pre každý prvok zo množiny objektov alebo z poľa namiesto opakovania príkazov daný počet krát. Je to užitočné najmä vtedy, keď neviete, koľko prvkov je v súprave.

Syntax konštrukcie cyklu For Each. . . Ďalej je:

Pre každý prvok V skupinových príkazoch Ďalší prvok

Pri používaní slučky For Each majte na pamäti nasledujúce obmedzenia. . . Ďalšie:

V prípade množín môže byť parametrom prvku iba premenná variantu typu, všeobecná premenná typu objekt alebo objekt uvedený v prehliadači objektov

Pre polia môže byť parametrom prvku iba premenná typu Variant

Nemôžete použiť cyklus For Each. . . Ďalej s poľom typu definovaného používateľom, pretože premenná typu variant nemôže obsahovať hodnotu typu definovaného používateľom

Do...dizajn slučky

Cyklus Do sa používa na vykonanie bloku príkazov neobmedzený počet krát. Existuje niekoľko variácií konštrukcie Do. . . Slučka, ale každý z nich vyhodnotí podmienený výraz, aby určil, kedy sa má cyklus ukončiť. Ako v prípade konštrukcie If. . . Potom podmienka musí byť hodnota alebo výraz, ktorý sa vyhodnotí ako False (nula) alebo True (nenulová).

V nasledujúcej konštrukcii Do . . . Príkazy slučky sa vykonávajú, pokiaľ je hodnota podmienky True (True):

Vykonať počas podmienkovej slučky

Pri vykonávaní tejto slučky VBA najskôr skontroluje podmienku. Ak je podmienka False, preskočí všetky príkazy cyklu. Ak je to pravda, VBA vykoná príkazy cyklu, znova sa vráti k príkazu Do While a znova otestuje podmienku.

Preto môže byť cyklus reprezentovaný týmto konštruktom vykonaný ľubovoľný počet krát, pokiaľ hodnota podmienky nie je nula alebo True. Všimnite si, že príkazy tela cyklu sa nikdy nevykonajú, ak sa pri prvej kontrole podmienky ukáže, že je nepravdivá (False).

Zvážte príklad: Vypočítajte súčet radu

s danou presnosťou.

Čiastkový príklad4() Dim e As Single, x As Single, s As Single Dim m As Single, p As Single, i As Single Call read("a1", x) : Call read("b1", e) s = 0 : i = 1: m = 1: p = -1 Call out("a2", "i") : Call out("b2", "m") : Call out("c2", "s") Do kým Abs(m) >= e p = -p * x m = p / i s = s + m Call out("a" & (2 + i), i) : Call out("b" & (2 + i), Abs (m)): Call out("c" & (2 + i), s) i = i + 1 Loop End Sub

Ďalšia variácia konštrukcie Do. . . Loop najskôr vykoná príkazy tela cyklu a potom skontroluje podmienku po každom vykonaní. Táto variácia zabezpečuje, že príkazy v tele cyklu sa vykonajú aspoň raz:

Do príkazov Loop While podmienka

Ďalšie dve varianty konštrukcií cyklu sú podobné predchádzajúcim, s výnimkou toho, že cyklus sa vykonáva, keď je podmienka nepravdivá (False):

Cyklus sa nevykoná vôbec alebo sa vykoná mnohokrát:

Robte do stavu

Výkazy slučky

Cyklus sa vykoná aspoň raz:

operátorov

Stav slučky do

7.2 Vnorené slučky.

Riadiace štruktúry môžete vložiť do iných riadiacich štruktúr (napríklad If ... Potom blokovať vnútri cyklu For ... Next). O riadiacej štruktúre umiestnenej vo vnútri inej riadiacej štruktúry sa hovorí, že je vnorená.

Hĺbka vnorenia riadiacich štruktúr vo VBA nie je obmedzená. Na zlepšenie čitateľnosti kódu je bežnou praxou posunúť telo rozhodovacej konštrukcie alebo slučky v programe, keď sa používajú vnorené riadiace štruktúry.

Pri vnorení jednej alebo viacerých ďalších slučiek do slučky sa hovorí o vnorených slučkách, ktoré rozlišujú medzi vonkajšími (uzavierajúcimi) a vnútornými (vnorenými) slučkami.

Uvažujme príklad sčítania prvkov Aij matice A(n,m) riadok po riadku.

Podpríklad5() Dim a() As Single, s() As Single Dim n As Integer, m As Integer Dim i As Integer, j As Integer Call read("a1", n): Call read("b1", m ) ReDim a(1 To n, 1 To m), s(1 To n) "Prečítajte maticu Pre i = 1 To n Pre j = 1 To m Zavolajte readcell(i + 1, j, a(i, j)) Ďalej j Ďalej i "Výpočet pre i = 1 Do n s(i) = 0 Pre j = 1 Do m s(i) = s(i) + a(i, j) Ďalej j Zavolajte outcell(i + 1, m + 1 , s(i)) Ďalej i Koniec Sub

Všimnite si, že prvý Next uzatvára vnútorný cyklus For a posledný Next uzatvára vonkajší cyklus For. Podobne pre vnorené príkazy If sa príkazy End If automaticky použijú na zatvorenie najbližšieho príkazu If. Vnorené štruktúry Do . . . Slučky fungujú podobným spôsobom: najvzdialenejší príkaz Loop zodpovedá najvzdialenejšiemu príkazu Do.

Pri vstupe/výstupe prvkov dvojrozmerného poľa na pracovnom hárku programu Microsoft Excel je vhodné použiť vlastné vstupné/výstupné procedúry:

Sub readcell(i As Integer, j As Integer, Val As Variant) val = Leaf1.Cells(i, j).Value End Sub Sub outcell(i As Integer, j As Integer, Val As Variant) Leaf1.Cells(i, j).Hodnota = val End Sub

kde I je číslo riadku, j je číslo stĺpca pracovného hárka.

Opustenie riadiacich štruktúr

Príkaz Exit vám umožňuje ukončiť priamo cyklus For, cyklus Do, procedúru Sub alebo procedúru Function. Syntax príkazu Exit je jednoduchá:

Pre počítadlo = začiatok Na koniec [blok príkazu] [blok príkazu] Ďalej Urobte [(Kým | Kým) podmienka] [blok príkazu] [blok príkazu] Slučka

Exit For v rámci cyklu For a Exit Do v rámci cyklu Do sa môže objaviť ľubovoľný počet krát.

Príkaz Exit Do funguje so všetkými variáciami syntaxe cyklu Do.

Príkazy Exit For a Exit Do sa používajú, keď je potrebné okamžite ukončiť cyklus bez pokračovania v ďalších iteráciách alebo čakania na vykonanie bloku príkazov v tele cyklu.

Keď na ukončenie cyklu použijete príkaz Exit, hodnoty premennej cyklu závisia od toho, ako sa cyklus skončí:

Keď sa slučka skončí normálne, hodnota premennej slučky je o jednu viac ako horná hranica počtu slučiek

Pri predčasnom ukončení cyklu si premenná cyklu zachováva svoju hodnotu, ktorú prijala s prihliadnutím na zaužívané pravidlá

Keď sa cyklus skončí na konci množiny, premenná cyklu je Nič, ak ide o objektovú premennú, alebo Prázdna, ak ide o variant.

Posledná aktualizácia: 30.10.2015

Ďalším typom riadiacich štruktúr sú slučky. VB.NET používa niekoľko druhov slučiek.

Pre...Ďalšiu slučku

Táto slučka sa vykoná určitý počet krát a toto číslo je nastavené počítadlom:

For i As Integer = 1 až 9 Console.WriteLine("Druhá druhá mocnina (0) je (1)", i, i * i) Ďalej

Premenná i tu hrá úlohu počítadla. Po slove Komu dáme maximálnu hodnotu počítadla. S každým cyklom sa hodnota počítadla zvýši o jednu. A táto hodnota sa porovnáva s hodnotou po Komu. Ak sú tieto dve hodnoty rovnaké, cyklus sa skončí.

Pri práci so slučkami môžeme každým prechodom zvýšiť hodnotu počítadla nielen o jedno, ale celkovo o ľubovoľné číslo. Ak to chcete urobiť, musíte použiť kľúčové slovo krok a po ňom zadajte krok cyklu, o ktorý sa hodnota počítadla zvýši, alebo môžete počítadlo zvýšiť priamo v slučke:

For i As Integer = 1 až -9 Krok -1 For j As Integer = 1 To 9 Console.WriteLine("Súčin i a j je (0)", i * j) j += 1 Ďalej Ďalej

Všimnite si, že záporná hodnota je zvolená ako krok v prvej slučke a hodnota počítadla sa každým prechodom znižuje o jednu. Vo vnútornej slučke sa počítadlo j zvyšuje o 2 pri každom prechode, pretože sa štandardne zvyšuje o jednotku a my ho v slučke explicitne zvyšujeme o jednu. Výsledkom je, že vnútorná slučka funguje päťkrát a vonkajšia deväťkrát, to znamená, že sa získa 45 cyklov.

Pre každú...Ďalšiu slučku

Cyklus For Each iteruje cez prvky v konkrétnej skupine, ako je pole alebo kolekcia. Predpokladajme, že máme nejaké pole typu Integer a musíme toto pole inicializovať náhodnými hodnotami a potom zobraziť všetky jeho prvky na obrazovke:

"Vytvorte pole piatich čísel Dim nums(4) As Integer Dim r As New Random() "inicializujte pole For i As Integer = 0 To nums.Length - 1 nums(i) = r.Next(100) Next " Zobraziť pole prvkov Pre každé i Ako celé číslo In nums Console.Write("(0) ", i) Ďalej

V príkaze For Each najprv zadáme premennú, ktorá bude mať hodnoty prvkov poľa. A po kľúčovom slove In Zadajte skupinu, v ktorej chcete zoradiť všetky prvky.

pričom slučka

V slučke While sa vykonáva, pokiaľ je splnená určitá podmienka zadaná za slovom While:

Dim j As Integer = 10 Kým j > 0 Console.WriteLine(j) j -= 1 End While

Urobte slučku

Cyklus Do, podobne ako cyklus While, sa vykonáva, pokiaľ je splnená určitá podmienka. Má však rôzne podoby. Takže v nasledujúcom príklade sa najprv skontroluje podmienka a potom sa vykoná blok kódu definovaný v slučke:

Dim j As Integer = 10 Robiť Kým j > 0 Console.WriteLine(j) j -= 1 slučka

V tomto prípade sa cyklus vykoná, kým hodnota j je väčšia ako nula. Existuje však ďalší záznam, kde sa namiesto slova používa slovo Kým Až kým a cyklus sa vykonáva, kým nie je splnená určitá podmienka, to znamená, kým hodnota j nebude menšia ako nula:

Dim j As Integer = 10 Do Do j< 0 Console.WriteLine(j) j -= 1 Loop

Ak je na začiatku podmienka špecifikovaná v slučke nepravdivá, slučka nebude fungovať. Môžeme však definovať kontrolu na konci cyklu, a preto sa náš cyklus spustí aspoň raz:

Dim j As Integer = -1 Do Console.WriteLine(j) j -= 1 slučka do j< 0 "либо Do Console.WriteLine(j) j -= 1 Loop While j > 0

Pokračovať a ukončiť vyhlásenie

Často je potrebné nečakať na koniec cyklu, ale okamžite ho ukončiť, ak je splnená určitá podmienka. Ak to chcete urobiť, použite operátor VÝCHOD, za ktorým nasleduje typ slučky, z ktorej sa má ukončiť, napríklad Exit Do (Exit While) :

Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 až 100 num -= 1 If num< 50 Then Exit For Next Console.WriteLine(num)

Existuje ďalšia úloha - vyjsť nie zo slučky, ale z aktuálneho prechodu alebo iterácie a prejsť na ďalšiu. Ak to chcete urobiť, použite príkaz Continue, po ktorom označia typ slučky, z ktorej sa uskutoční výstup, napríklad Continue While:

Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 až 10 num -= 7 If num< 50 AndAlso num >25 Potom Continue For End If Console.WriteLine(num) Next

V tomto prípade v každom prechode cyklu odčítame číslo 7 od num a potom uvidíme, či číslo num patrí do intervalu od 25 do 50. A ak áno, prejdeme na novú iteráciu cyklu a ak nie, zobrazíme ho na obrazovke.

Laboratórne práce zo základov programovania

2.1. Tabuľka funkcií reprezentovaných analyticky
a zbiehajúce sa v blízkosti

Cieľ

· Upevnenie teoretických vedomostí o základoch organizácie vetviacich a cyklických štruktúr.

· Získanie praktických programátorských zručností s využitím vetviacich a cyklických štruktúr v systéme Visual Basic.

Vo VB existujú tri druhy príkazov cyklu:

cyklus počítania: Pre...Do...Ďalej

Slučky s predpokladmi: Do While...Loop, Do Until...Loop, While...WEnd

Slučky s dodatočnými podmienkami: Do...Opakovať Kým, Do...Opakovať Kým.

Cyklus počítania – umožňuje prechádzať množinou príkazov stanovený počet krát. Jeho syntax je nasledovná:

Pre počítadlo = Štart Komu koniec

[operátorov]

[operátorov]

Ďalšie[ počítadlo]

Parameter počítadlo je číselná premenná (celé číslo, skutočné číslo alebo dátum, variant, mena), ktorá sa automaticky zvyšuje po každej iterácii. Pôvodná hodnota počítadlo rovná parametru začať, a konečný parameter je koniec. Ak nie je zadané, potom sa krok považuje za rovný 1, hodnotu kroku je možné zmeniť. Môže to byť kladné alebo záporné číslo.

Existujú štyri syntaktické konštrukcie pre Do….Loop:

Príkazy medzi kľúčovými slovami Do...Loop sa vykonajú stanovený počet krát v závislosti od podmienky. Napríklad v nasledujúcom fragmente programu, keď C = 100, bude podmienka splnená a slučka vstúpi. Vo vnútri cyklu sa zavolá procedúra a hodnota C sa zníži o 1. Potom sa znova skontroluje podmienka (C > 0) a opakovane sa vykonajú príkazy cyklu (spolu sa vykonajú 100-krát), až do C = 0. Keď sa podmienka C > 0 stane nepravdivou a slučka sa zastaví.

Urobte, kým C > 0

Rovnaký fragment programu spustený pomocou slučky predbežných podmienok v syntaxi 2:

V tomto prípade sa cyklus vykoná, kým je podmienka False, na rozdiel od predchádzajúceho prípadu, to znamená, že pokračuje predtým splnenie podmienky C = 0.

Príkazy slučky v syntaxi 3 a 4 sú veľmi podobné prvým dvom, až na podmienku nie sa vyhodnocuje, kým sa slučka nevykoná aspoň raz.

V syntaxách týchto slučiek môžete použiť operátory Exit For a Exit Do na bezpodmienečné ukončenie cyklu, čo vám umožní preniesť riadenie na operátora za slučkou. Napríklad v nasledujúcom fragmente programu, ak je počiatočná hodnota C > 50, slučka sa okamžite zastaví.



Urobte do C<= 0

MsgBox "Štart. hodnota je väčšia ako povolená“, „Chyba vstupu“

Slučka While...Wend sa používala v skorších verziách jazyka Visual Basic. Jeho syntax je nasledovná:

Zatiaľ čo<условие>

<Операторы>

Na rozdiel od cyklu Do..Loop nemá cyklus While ..Wend druhú možnosť, v ktorej sa test stavu vykoná na konci cyklu. Okrem toho nemá príkaz ukončenia slučky ako Exit Do.

VBA. Organizácia cyklov.

Príkazy slučky sa používajú na opakovanie akcie alebo skupiny akcií určitý počet krát. Počet opakovaní (opakovaní slučky) je možné preddefinovať alebo vypočítať.

VBA podporuje dva druhy cyklických konštrukcií:

  1. Slučky s pevným počtom opakovaní ( cykly s počítadlom).
  2. Slučky s neurčitým počtom opakovaní ( podmienené slučky).

Pre všetky typy cyklov sa používa koncept telo slučky A, ktoré definuje blok príkazov uzavretý medzi príkazmi začiatku a konca cyklu. Zavolá sa každé opakovanie príkazov v tele cyklu iterácia .

Pevné cykly

VBA poskytuje dve riadiace štruktúry na organizáciu pevnej slučky: For ... Next (cyklus s počítadlom) a For Each ... Next (cyklus s enumeráciou).

Pre... Ďalšie vyhlásenie je to typická slučka s počítadlom, ktoré vykoná daný počet iterácií. Syntax príkazu For ... Next je:

Pre<счетчик> = <начЗначение>To<конЗначение>

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

Ďalšie[<счетчик>]

Príklad použitia príkazu For ... Next.

Výpis 1. Pre … Ďalší výpis

‘ CIEĽ: Napíšte program, ktorý dostane od používateľa dve čísla.

‘ Sčíta všetky čísla v rozsahu danom týmito dvoma číslami a potom

‘ Zobrazuje výslednú sumu.

Podvzorka7()

Dim i As Integer ‘počítadlo slučiek

Dim sStart ‘začiatočná hodnota počítadla

Dim sEnd ' koncová hodnota počítadla

Dim sSum As Long ‘výsledná suma

sStart = InputBox("Zadajte prvé číslo:")

sEnd = InputBox("Zadajte druhé číslo:")

sSum = 0

Pre i = CInt(sStart) To CInt(sEnd)

sSum = sSum + i

Ďalej i

MsgBox „Súčet čísel od ” & sStart & ” do ” & sEnd & ” je: ” & sSum

koniec sub

Pre každú… Príkaz ďalšej slučkypatrí do kategórie operátorov objektového typu, t.j. platí predovšetkým pre zbierky objekty, ako aj polia . Telo cyklu sa vykoná pevne stanovený počet krát, čo zodpovedá počtu prvkov v poli alebo kolekcii. Formát príkazu For Each… Next je:

Pre každý<элемент>In<группа> <блок операторов>Ďalšie[<элемент>]

Podmienené slučky (neurčité slučky)

Podmienené slučky sa používajú, keď je potrebné vykonať opakované akcie iba za určitých podmienok. Počet iterácií nie je definovaný a vo všeobecnom prípade sa môže rovnať nule (najmä pre slučky s podmienkou). VBA ponúka vývojárom niekoľko riadiacich štruktúr na organizovanie podmienených slučiek:

  • Štyri typy slučiek Do..Loop, ktoré sa líšia typom kontrolovanej podmienky a časom vykonania tejto kontroly.
  • Neprerušovaná slučka Kým... Wend.

Do Kým... Slučka – Typické slučka s predpokladom. Podmienka sa skontroluje pred vykonaním tela cyklu. Cyklus pokračuje vo svojej práci až do neho<условие>sa vykoná (t. j. má hodnotu True). Keďže kontrola sa vykonáva na začiatku, telo cyklu sa nemusí nikdy vykonať. Formát slučky Do While…

Do Kým<условие>

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

slučka

Výpis 2. Do While… Slučka

‘ CIEĽ: Napísať program, ktorý akceptuje vstup používateľa

„ľubovoľná postupnosť čísel. Vstup musí byť ukončený

‘ až potom, čo súčet zadaných nepárnych čísel presiahne 100.

Podvzorka8()

Dim OddSum ako celé číslo

Dim OddStr As String 'reťazec s nepárnymi číslami

Dim Num 'akceptuje zadané čísla

OddStr = "" 'inicializácia výstupného reťazca

OddSum = 0 ‘inicializácia sumy OddSum

Do Kým OddSum< 100 ‘начало цикла

Num = InputBox("Zadajte číslo: ")

If (Num Mod 2)<>0 Potom ‘párna parita

OddSum = OddSum + Num ‘akumulácia súčtu nepárnych čísel

OddStr = OddStr & Num & ” ”

Koniec Ak

slučka

‘vypíšte reťazec s nepárnymi číslami

Výzva MsgBox:=”Nepárne čísla:” & OddStr

koniec sub

Vyhlásenie Do...Loop Whileurčené na organizáciuslučka s dodatočnou podmienkou. Podmienka sa skontroluje po vykonaní tela slučky aspoň raz. Cyklus pokračuje až do<условие>zostáva pravdou. Formát Do...Loop While:

Do<блок операторов>zatiaľ čo slučka<условие>

Výpis 3. Slučka s postcondition

CIEĽ: Vytvorte program pre hru „Hádaj číslo“. Program by mal byť náhodný

tak, aby vygeneroval číslo v rozsahu od 1 do 1000, musí používateľ

„Hádaj toto číslo. Program zobrazí nápovedu pre každé zadané číslo.

' "viac alebo menej".

Podvzorka8()

Randomize Timer ‘ inicializácia generátora náhodných čísel

Dim msg As String ‘ reťazec správy

Dim SecretNumber As Long, UserNumber As Variant

Začiatok: SecretNumber = Round (Rnd * 1000) ‘ číslo vygenerované počítačom

UserNumber = prázdne ‘ číslo zadané používateľom

Hrajte sa

Vyberte možnosť Case True

Case IsEmpty(UserNumber): msg = "Zadajte číslo"

Case UserNumber > SecretNumber: msg = “Príliš veľa!”

Používateľské číslo prípadu< SecretNumber: msg = “Слишком мало!”

Koniec Vyberte

UserNumber = InputBox(prompt:=msg, Title:=”Hádaj číslo”)

Loop while UserNumber<>tajné číslo

' vyšetrenie

Ak MsgBox("Chceš hrať znova?", vbYesNo + vbQuestion, "Hádali ste správne!") = vbYes Then

Prejsť na začiatok

Koniec Ak

koniec sub

Do Kým... Slučka a Do... Slučka do Slučka sú inverzie predtým uvažovaných podmienených slučiek. Vo všeobecnosti fungujú podobne, až na to, že telo slučky sa vykonáva za nepravdivých podmienok (t.j.<условие>= Nepravda). Formát cyklu Do kým ... je:

Do kým<условие> <блок операторов>slučka

Formát cyklu Do… Loop Until je:

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

Opakovať do<условие>

Praktická úloha:Prepíšte programy vo výpisoch 10 a 11 pomocou príkazov invertovanej slučky.

Kým slučka ... Wend platí aj pre podmienené slučky. Toto vyhlásenie plne zodpovedá štruktúre Do While… Loop. Formát slučky While… Wend je:

Zatiaľ čo<условие>

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

Wend

Charakteristickým znakom tohto príkazu je nemožnosť vynúteného ukončenia (prerušenia) tela slučky (príkaz Exit Do nefunguje v slučke While ... Wend).

Prerušenie slučky

Príkaz Exit sa používa na ukončenie iterácie a ukončenie cyklu. Toto tvrdenie je použiteľné v akejkoľvek cyklickej štruktúre okrem While ... Wend. Všeobecná syntax pre použitie Exit na prerušenie cyklu je:

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

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

Ukončiť (pre | urobiť)

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

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

Keď sa vykoná príkaz Exit, cyklus sa preruší a riadenie sa prenesie do príkazu nasledujúceho za príkazom<конец_цикла>. Telo cyklu môže obsahovať viacero príkazov Exit.

Výpis 4. Opustenie nútenej slučky

Vedľajšia vzorka9()

Pre i = 1 až 1 000 000

Ak i = 10, potom Exit For ' opustite slučku, keď počítadlo dosiahne 10

Ďalšie

Syntax operátora:

PrePočítadlo= Štart ToKoniec[krokKrok]

Statement_Block

ĎalšiePočítadlo

Je to tu označené:

Pre pre (povinné kľúčové slovo VB);

Komu predtým (povinné kľúčové slovo VB);

Statement_Block jeden alebo viacerí operátori volali telo cyklu;

Počítadlo - celočíselná premenná, ktorá počíta počet cyklov, ktoré sa majú vykonať;

Začiatok, Koniec - počiatočné a konečné hodnoty počítadla;

krok krok (kľúčové slovo VB);

krok - krok zmeny počítadla; môže byť negatívny; parameter je voliteľný, pretože ak je krok 1, môžete Krok Krok nižšia;

Next - next (povinné kľúčové slovo VB, zadanie príkazu end of loop).

Protihodnota (Začiatok, Koniec) môže byť číselné konštanty alebo premenné celočíselného alebo reálneho typu môžu byť záporné alebo kladné čísla. Aby sa telo cyklu vykonalo aspoň raz, musí byť Začiatok ≤ Koniec, ak Krok> 0 a Začiatok ≥ Koniec, ak Krok< 0. Hneď ako sa to ukáže Počítadlo>Koniec ( ak Štart< Конец), vykonávanie cyklu končí. Ak Štart =Koniec, slučka sa vykoná raz;

Príklad 9.1 .Hodnotenie funkcieY = 2 – 1.5 sinxpri zmene X v krokoch po 0,2 v rozsahu .

Fragment programu na výpočet Y a výstup argumentu X a funkcie Y:

Pre X = 0 až 2,4 Krok 0,2

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

Aby ste pochopili, ako táto slučka funguje, tu je program pre podobnú slučku vytvorený pomocou operátorísť do, štítky, operátorAkPotom.

M1:X=X+0,2

Ak X<= 2.4 Then

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

Poďme analyzovať, ako tento program funguje. Prvý výpočet Y je neštandardný, ako keby vypadol zo slučky. Slučka začína po prvom prenose ovládania GoToM1 na štítok M1. V riadku označenom M1 sa argument X zvýši o krok 0,2 a okamžite sa skontroluje, či nová hodnota X nepresahuje konečnú hodnotu 2,4. Ak nepresiahne, výpočet Y sa zopakuje s týmto novým X. Potom sa znova vykoná operátor GoToM1 - prenesenie riadenia na riadok s označením M1. Tieto opakovania (cykly) výpočtu Y sa skončia, akonáhle X prekročí 2,4.

Teraz je program If porovnateľný so slučkou For...Next.

Pre X = 0 až 2,4 Krok 0,2

nahrádza dva riadky

M1:X=X+0,2

Ak X<= 2.4 Then

Sú to posledné dva riadky kódu, ktoré sa vykonávajú v slučke For, ale nevidíme to. Zakódovali sme ich reťazcom cFor... Riadok kódu GoTo M1 je zakódovaný slovom Next X (doslova: next X). Výsledkom je kompaktný dizajn.

Keď používate slučku For...Next, musíte sa naučiť používať počítadlo slučiek pri riešení rôznych problémov. Ak chcete zistiť, ako môžete použiť počítadlo na vyriešenie problému, musíte analyzovať vyhlásenie o probléme, nájsť vzory zmien v niektorých parametroch problému.

Príklad 9.2 . Určenie súčtu prvkov radu: .

Fragment programu:

S = 0 ‘S je súčet radu

Pre i = 1 až 16‘ je počítadlo i menovateľom zlomku

S = S + 1/i ‘ akumulačná suma

Tlač "S="; S ‘ výstup súčtu S do formulára

Pre každú hodnotu počítadla i výraz 1/i postupne tvorí prvky série, začínajúc od 1.

Príklad 9.3 . Výpočet súčtu radu prvkov
.

Fragment programu:

S = 0 ‘S je súčet radu

Pre i = 1 až 18‘ počítadlo i - čitateľ

S = S + i/(i + 1) ‘ menovateľ je väčší ako čitateľ o 1

Tlač "S="; S ‘ výstup súčtu S do formulára

Príklad 9.4 . Výpočet súčtu: 5 + 8 + 11 + ... + 32 + 35

Fragment programu:

S = 0 ‘S je súčet radu

Pre i = 5 až 35 Krok 3 ‘ získajte aritmetiku _

progresia s menovateľom 3

Tlač "S="; S

Príklad 9.5. Výpočet súčtu pre dané x:

Analýza problému ukazuje, že stupeň v bode X sa mení z 1 na 10. V tomto prípade je čitateľ v koeficiente v bode X väčší ako stupeň o 1 a menovateľ je o 2. Hodnota stupňa sa vytvorí pomocou počítadla i. Potom môžete napísať nasledujúci program (fragment):

S = 1 ‘S je súčet radu

Pre i = 1 až 10‘ ako počítadlo i sa stupeň mení pri X

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

Tlač "S="; S

CyklyPreĎalšiepoužívaný vvstup výstup aspracovanie poľa .

Príklad 9.6. Vstup a výstup hodnôt prvkov poľa B(N).

Fragment programu:

‘ Vynechajte priradenie hodnoty N k premennej, _

zadané vo formulári do textového poľa txtN:

B(i) = InputBox("Zadajte prvok B(" & i & ")", _

"Vstupné pole B(" & N & "")"))

vytlačiť „ “; B(i);

Funkcia InputBox() zobrazí dialógové okno s tlačidlom zavrieť, danou správou, vstupným poľom, tlačidlami OK,Zrušiť, hlavička (alebo bez nej). Ak je zadané číslo 12 - veľkosť poľa N, potom v našom príklade pri prvom výskyte bude toto okno vyzerať takto:

Ako vidíte, správa Zadajte prvok B(1) vás vyzve na zadanie hodnoty 1. prvku do textového poľa. Toto okno sa zobrazí 12-krát, pretože pole obsahuje 12 prvkov. Vyplýva to z hlavičky formulára. Index prvku B(i) vo výzve sa bude meniť od 1 do 12.

Ak je potrebné vo formulári zobraziť iba hodnoty prvkov poľa B(N), telo slučky bude pozostávať z jedného príkazu:

Prezeranie prvkov poľa na vykonanie nejakej akcie na nich prebieha aj pomocou operátora slučky For...Next.

Poďme priniesť príklady spracovania jednorozmerných polí.

Príklad 9.7 . Určenie maximálneho prvku v poli B(M).

Okrem vstupu počiatočných údajov a výstupu výsledkov stručne popíšeme algoritmus:

    Deklarujme premennú Bmax, do ktorej zadáme hodnotu prvého prvku poľa a premennú Imax, ktorej priradíme 1 – index prvého prvku poľa.

    V slučke pomocou operátora For…Next prezeráme všetky prvky poľa, počnúc 2. Pomocou operátora If…Then porovnávame ich hodnoty s hodnotou uloženou v premennej Bmax.

    Ak sa ukáže, že hodnota prvku poľa je väčšia ako Bmax, potom sa Bmax priradí hodnota tohto prvku a hodnota Imax je index tohto prvku poľa.

Po skončení cyklu bude premenná Bmax obsahovať hodnotu maximálneho prvku a Imax bude obsahovať jeho index (číslo).

Program tejto časti algoritmu.

Bmax = B(1): Imax = 1

Ak B(i) > Bmax, potom Bmax = B(i): Imax = i

Príklad 9.8. Určenie súčtu, súčinu a počtu kladných prvkov poľaD(M).

Premenné: S, P, K sú súčet, súčin a počet kladných prvkov.

Algoritmus táto definícia:

    Premennej S a K priradíme nulu, premennej P priradíme 1. Spravidla platí, že premenné, kde je súčet akumulovaný, tu je to S a k, sa pred cyklom vynulujú a premenné, v ktorých vypočítaný produkt sú priradené 1.

    Pomocou cyklu For…Next prejdeme všetky prvky poľa a skontrolujeme, či sú kladné (D(i) > 0).

    Ak sa ukáže, že prvok je kladný, tak jeho hodnotu pripočítame k hodnote súčtu S a nový súčet uložíme do tej istej premennej. Premennú P vynásobíme kladnou hodnotou prvku a uložíme aj do premennej P. A do premennej K pridáme 1 a novú hodnotu uložíme do tej istej premennej

Program táto časť algoritmu vyzerá takto:

S = 0: P = 1: K = 0

Ak D(i) > 0 Potom

S = S + D(i) ‘ takto akumulácia súčtu _

kladné hodnoty prvkov poľa D(i)

P = P*D(i) ‘ definícia súčinu klad

prvky poľa

K = K + 1 ‘ tento operátor sa nazýva COUNTER, tu je

‘ určuje počet kladných prvkov poľa

Príklad 9.9. Určenie súčtu, súčinu, počtu a priemeru nepárnych prvkov poľaD(M).

Uvádzame fragment programu takejto definície.

S = 0: P = 1: K = 0

Ak D(i) Mod 2<>0 Potom

Ssr = S/k ‘ výpočet priemeru nepárnych prvkov

Porovnajte tento fragment programu s programom v príklade 9.8. Tento program takmer úplne opakuje predchádzajúci. Zmenila sa iba podmienka v príkaze If. Podmienka D(i) Mod 2<>0 znamená, že hľadáme prvky poľa D(i), ktoré nie sú deliteľné ani 2, teda nepárne prvky. Ak skontrolujeme podmienku D(i) Mod 2 = 0, vyberieme párne prvky poľa.

Ako viete, rozdelenie Mod dáva ako výsledok zvyšok delenia v celých číslach. Napríklad po vykonaní operátora d= 34Mod4 sa premenná d bude rovnať 2. Preto na výber prvkov poľa, ktoré sú násobkami 4, musíte skontrolovať podmienku D(i) Mod 4 = 0. Podmienka bude byť podobné, ak hľadáme prvky, ktoré sú násobkami iných čísel. Namiesto 4 sa budú písať tieto ďalšie čísla.

Príklad 9.10. Zápis prvkov poľaR(N) deliteľné 5 do iného poľa a zobrazenie nového poľa vo formulári.

Druhé pole bude označené napríklad R5(N). Veľkosť tohto nového poľa by sa mala považovať za rovnakú ako pôvodné, pretože v limitnom prípade môžu byť všetky prvky násobkami 5.

Algoritmus úlohy:

    Vynulujeme počítadlo k. Pomocou operátora For...Next loop sa pozrieme na všetky prvky poľa R(N).

    Každý prvok skontrolujeme na násobok 5 pomocou operátora If…Then a rozdelenia prvku poľa pomocou Mod.

    Ak je prvok násobkom 5, potom pomocou počítadla ako k=k+ 1 vytvoríme indexy poľa R5(N), začínajúc od 1, a zapíšeme ho do tohto druhého poľa –R5(N).

    Ak k je nenulové, vypíšte poleR5() do formulára.

    Ak sa k rovná nule, dostaneme: "Neexistujú žiadne prvky, ktoré sú násobkami 5".

Fragment programu:

Ak R(i) Mod 5 Potom k = k + 1: R5(k) = R(i)

Ak k<>0 Potom

Vytlačte „Žiadne prvky deliteľné 5“

Slučky môžu byť vnorené do iných slučiek.

Poďme demonštrovať prácu vnorené slučky . Nižšie program organizuje výstup hodnôt počítadiel cyklov i, j a k. Z výstupu i,j,k je jasné, ako sa vykonávajú vnorené slučky.

Private Sub frmCycle_DblClick()

ScaleMode = 4 'jednotky - symboly

Pre i = 1 až 3 ‘vonkajšia slučka

Vytlačte "i ="; i;

Pre j = 1 až 4 ‘1. vnorená slučka

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

Tlač "j="; j;

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

Pre k = 1 až 5 ‘2. vnorená slučka

Zobrazený formulár (obr. 1) zobrazuje výsledky zobrazenia počítadiel všetkých troch slučiek: vonkajšej slučky - čítač i, prvej vnorenej slučky - counterj a druhej, najvnútornejšej slučky - counterk. Ako vidíme, "najpomalšie" počítadlo vonkajšej slučky(poi) a „najrýchlejší“ je počítadlo najvnútornejšej slučky (podľak).

Program sa spustí po dvojitom kliknutí na formulár frmCicli ľavým tlačidlom myši.

CurrentX, CurrentY - vlastnosti formulára, ktoré určujú súradnice X, Y počiatočného bodu pre výstup informácií metódou Print (pozri umiestnenie osí X a Y na formulári na obr. 1).

TextWidth() je funkcia, ktorá vracia šírku textu daného vo funkcii ako argument v dvojitých úvodzovkách.

Vnorené slučky sa používajú pri spracovaní dvojrozmerných polí (matíc). Ale v niektorých úlohách, s výnimkou vstupu a výstupu prvkov dvojrozmerného poľa, sa môžete obmedziť na jeden cyklus. Zvážte niekoľko príkladov maticového programovania.

Príklad 9.11. Vstup a výstup matice (dvojrozmerného poľa) celých číselintA(N).

Môžete zadať maticu po riadkoch a po stĺpcoch . Je to jednoduchšie - riadok po riadku, ak výstup prvkov poľa do formulára bude naprogramovaný hneď po ich zadaní.

Maticový vstup a výstupriadok po riadku - fragment 1.

Dim M As Integer, N As Integer, i As Integer, j As Integer

Dim intA() As Integer ‘ deklaruje dynamické pole

M = Val(txtN.Text) ‘ M je počet riadkov

N = Val(txtN.Text) ‘ N je počet stĺpcov

ReDim intA(M, N) As Integer ‘ predefinuje pole

Pre i = 1 až M ‘ si zachová svoju hodnotu, kým nebude úplne

‘vnorená slučka na j sa nevykoná

vytlačiť „ “; intA(i, j); “ výstup riadok po riadku

Print ‘ skok na začiatok nového riadku

Na zadanie matice po stĺpcoch je potrebné vytvoriť vonkajšiu slučku na j (nastavuje čísla stĺpcov) a vnútornú slučku na i (nastavuje čísla riadkov).

Maticový vstup a výstuppodľa stĺpcov fragment 2.

PrY = 2500: CurrentY = PrY ‘ PrY nastavuje súradnicu Y začiatku

‘ vypíše prvý prvok každého stĺpca vo formulári

Pre j = 1 To N ‘ j si zachová svoju hodnotu, kým nebude úplne

‘vnorená slučka na i nebude vykonaná

intA (i, j) = InputBox("Zadajte prvok intA(" & i & "," & j & ")", _

"Vstup matice intA(" & M & "," & N & ")")

Tlačiť tab(6 * j); intA(i, j) ‘ zobrazenie po stĺpcoch

CurrentY = PrY ' na zobrazenie prvého prvku

' ďalší stĺpec

Tento druhý fragment programu neopakuje prvých 5 riadkov z prvého fragmentu. Funkcia Tab(6 * j) nastavuje začiatok výstupu na riadok (v znakoch) začínajúci od ľavého okraja formulára. Súradnica PrY je tu 2500 twipov, ale môžete si vybrať inú hodnotu.

Príklad 9.12 . Usporiadanie hodnôt prvkov poľaV(N) Vzostupne.

Existuje niekoľko algoritmov na usporiadanie polí. Tu je jeden z nich: pomocou vnorených slučiekPreĎalšievyberte prvky od prvého po predposledný a porovnajte každý z nich s nasledujúcimi prvkami; ak sa ukáže, že nasledujúci prvok je menší ako vybraný, vymeňte ich.

Fragment programu, ktorý implementuje tento algoritmus:

Pre i = 1 až N - 1

Pre j = i + 1 až N

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

Poďme vysvetliť tento fragment programu.

Pomocou vonkajšej slučky s počítadlom i vyberieme prvok V (i) na porovnanie s nasledujúcimi prvkami. Vnútorná slučka s čítačom j vyberá nasledujúce prvky V(j) na porovnanie. Počiatočná hodnota j je i + 1. Toto je prvý prvok z nasledujúceho.

Na výmenu hodnôt prvkov V(i) a V(j) zavedieme nejakú premennú P, do ktorej dočasne „schováme“ hodnotu jedného z prvkov poľa (v programe je to V(i )). Potom sa prvku V(i) priradí hodnota prvku V(j) a prvku V(j) sa priradí hodnota V(i), ktorá je uložená v premennej P. Ak „skryjeme“ hodnotu V(j) v P, potom bude kód výmeny hodnoty takýto: P = V(j): V(j) = V(i): V(i) = P. výsledok sa nezmení.

Komu zoradiť pole v zostupnom poradí, stačí napísať podmienku na overenie v tvare V(j) > V(i), teda zmeniť znamienko nerovnosti na iné.

Ak pole nie je číselné, ale reťazcové a prvky poľa sú vyplnené priezviskami, potom pomocou programu v príklade 9.12 môžete zoznam priezvisk zoradiť podľa abecedy. Faktom je, že pre písmená abecedy používané v počítači sú nerovnosti pravdivé: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

Príklad 9.13 . Výpočet súčtu kladných prvkov pre nepárne stĺpce maticeF(M, N) a zobrazenie súm vo formulári.

Algoritmus programu:

    Pomocou vonkajšej slučky s krokom 2 vytvoríme index nepárnych stĺpcov matice, začínajúc od prvého stĺpca.

    Vynulujeme súčet S, v ktorom sa bude kumulovať súčet kladných prvkov.

    Vo vnútornej slučke skontrolujeme znamienko prvku poľa.

    Ak je prvok poľa kladný (> 0), vypočítajte súčet S.

    Po skončení vnútornej slučky vypíšte súčet S do formulára.

Fragment programy:

Pre j = 1 až N Krok 2

Ak F(i, j) > 0, potom S = S + F(i, j)

Vytlačte „Súčet stĺpcov“; j; ":"; S ‘j je číslo stĺpca!

Vnorené slučky umožňujú organizáciu vymenovanie možností a riešiť problémy, ktoré sa nedajú vyriešiť analyticky. V dôsledku enumerácie sa získajú riešenia, medzi ktorými sa vyberie jedno alebo viacero, ktoré spĺňajú podmienku problému.

Príklad 9.14. Existuje 1801 rubľov. Koľko si môžete kúpiť čokolády za 31 rubľov. a rolka za 18 rubľov, aby ste mohli úplne minúť všetky peniaze.

Program:

Suma = 1801

AllChocolates = Suma \ 31: Všetky žemle = Suma \ 18

Pre i = 1 všetkým čokoládam

Pre j = 1 Pre AllBulki

Cena = i * 31 + j * 18 ‘celková kúpna cena

Ak cena = 1801, potom

Tlač "Čokoláda: "; i; Tab(19); "Bulok: "; j

Vysvetlime si program, v ktorom používame premenné pomenované v ruštine.

Najprv si určíme, aký je maximálny počet len ​​čokolád alebo len roliek, ktoré je možné kúpiť za celú sumu. Získané hodnoty VseChocolate a VseBulki sa používajú na obmedzenie počtu vyhľadávaní podľa počtu čokolád a roliek. Pre každú hodnotu počtu čokolád (i) a počtu roliek (j) určujeme celkovú Cenu za ich nákup. Ak je vypočítaná Cena 1801, potom je vybratá možnosť jedným z riešení problému.

Funkcia Tab() určuje, na ktorej pozícii od okraja formulára sa zobrazia informácie nasledujúce po tejto funkcii. Ak Tab(19), tak od 19. pozície.

Program zobrazuje 3 možnosti nákupu:

Čokolády 7, rohlíky 88

Čokolády 25, rohlíky 57

Čokolády 43, rohlíky 26

Ak chcete dať jednoznačnú odpoveď, musíte sformulovať dodatočnú podmienku. Napríklad „kúpilo sa menej buchiet ako čokolády“. Potom by jediným riešením bola 3. možnosť.

Existuje mnoho matematických problémov, ktoré sa dajú jednoducho vyriešiť iteráciou cez programovanie vnorených slučiek.