Smyčka pro popis vba excel. "Příkazy VBA Loop

Smyčky umožňují provést jeden nebo více řádků kódu vícekrát. VBA podporuje následující smyčky:

Pro...Další Pro každou...Další Proveďte... Smyčka

Konstrukce For. . . další. Když je počet opakování znám předem, použije se smyčka For. . . další. Smyčka For používá proměnnou nazývanou proměnná smyčky nebo čítač smyčky, která se zvyšuje nebo snižuje o zadanou hodnotu pokaždé, když se smyčka opakuje. Syntaxe této konstrukce je:

Pro čítač = začátek Na konec Další příkazy

Parametry čítač (čítač), start (začátek cyklu), konec (konec cyklu) a přírůstek (přírůstek) jsou číselné.

Poznámka. Parametr přírůstku může být kladný nebo záporný. Pokud je kladná, musí být počáteční parametr menší nebo roven koncovému parametru, jinak se smyčka nespustí. Pokud je parametr increment záporný, musí být počáteční parametr větší nebo roven hodnotě koncového parametru, aby bylo možné provést tělo smyčky. Pokud není parametr Krok nastaven, je výchozí hodnota parametru přírůstek 1.

VBA spustí cyklus For v následujícím pořadí:

1. Nastaví spuštění počítadla proměnných smyčky.

2. Porovnává hodnotu čítače proměnných smyčky a hodnotu koncového parametru. Pokud je proměnná čítače větší, VBA ukončí smyčku. (Pokud je hodnota parametru increment záporná, pak VBA ukončí smyčku, pokud je hodnota počítadla proměnné smyčky menší než hodnota koncového parametru.)

3. Provede příkazy příkazů těla smyčky.

4. Zvyšuje hodnotu čítače proměnných smyčky o 1 nebo o hodnotu parametru inkrementace, pokud je uveden.

5. Opakujte kroky 2 až 4.

Zvažte příklad: Vypočítejte hodnotu funkce f(t)

dáno a, b, n, pokud se t mění z a na b v přírůstcích Dt=(b-a)/(n-1).

Dílčí příklad3() Dim f() As 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) : Volání 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)") Pro i = 1 až n - 1 t = t + dt If t<= -1 Then f(i) = -1 ElseIf t >1 Potom f(i) = 1 Jinak 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)) Další i End Sub

Konstrukce pro každý. . . další

Pro každou smyčku. . . Další je jako smyčka For. . . Dále, ale opakuje skupinu příkazů pro každý prvek ze sady objektů nebo z pole, místo aby se příkazy opakovaly daný počet opakování. Je to užitečné zejména tehdy, když nevíte, kolik prvků je v sadě.

Syntaxe konstrukce pro každou smyčku. . . Další je:

Pro každý prvek Příkazy skupiny Další prvek

Při použití smyčky For Each mějte na paměti následující omezení. . . Další:

U sad může být parametrem prvku pouze proměnná varianty typu, obecná proměnná typu objekt nebo objekt uvedený v Prohlížeči objektů

U polí může být parametrem prvku pouze proměnná typu Variant

Nemůžete použít smyčku For Each. . . Dále s polem uživatelem definovaného typu, protože proměnná typu varianta nemůže obsahovat hodnotu uživatelem definovaného typu

Dělejte...provedení smyčky

Smyčka Do se používá k provedení bloku příkazů neomezeně mnohokrát. Existuje několik variant konstrukce Do. . . smyčka, ale každý z nich vyhodnotí podmíněný výraz, aby určil, kdy má smyčku opustit. Stejně jako v případě konstrukce If. . . Pak podmínkou musí být hodnota nebo výraz, který se vyhodnotí jako False (nula) nebo True (nenulová).

V následující konstrukci Do . . . Příkazy smyčky se provádějí, pokud je hodnota podmínky True (True):

Příkazy Do While Condition Loop

Při provádění této smyčky VBA nejprve zkontroluje podmínku. Pokud je podmínka False, přeskočí všechny příkazy cyklu. Pokud má hodnotu True, VBA provede příkazy smyčky, vrátí se znovu k příkazu Do While a znovu otestuje podmínku.

Smyčku reprezentovanou tímto konstruktem lze tedy provést libovolný počet opakování, pokud hodnota podmínky není nula nebo True. Všimněte si, že příkazy těla smyčky se nikdy neprovedou, pokud se při první kontrole podmínky ukáže, že je nepravdivá (False).

Zvažte příklad: Vypočítejte součet řady

s danou přesností.

Dílčí pří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") Dělat zatímco 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

Další variace konstrukce Do. . . Loop nejprve provede příkazy těla cyklu a poté zkontroluje podmínku po každém provedení. Tato varianta zajišťuje, že příkazy v těle smyčky budou provedeny alespoň jednou:

Proveďte příkazy Loop While podmínka

Další dvě varianty konstrukce smyčky jsou podobné předchozím, s výjimkou toho, že smyčka se provádí, když je podmínka nepravdivá (False):

Cyklus se nespustí vůbec nebo se provede mnohokrát:

Dělejte do stavu

Příkazy smyčky

Cyklus se provede alespoň jednou:

operátory

Stav smyčky do

7.2 Vnořené smyčky.

Řídicí struktury můžete umístit do jiných řídicích struktur (například If ... Then block uvnitř For ... Next smyčky). Řídicí struktura umístěná uvnitř jiné řídicí struktury se nazývá vnořená.

Hloubka vnoření řídicích struktur ve VBA není omezena. Pro zlepšení čitelnosti kódu je běžnou praxí posouvat tělo rozhodovací konstrukce nebo smyčky v programu, když se používají vnořené řídicí struktury.

Při vnořování jedné nebo více dalších smyček do smyčky se hovoří o vnořených smyčkách, které rozlišují vnější (uzavírající) a vnitřní (vnořené) smyčky.

Uvažujme příklad sečtení prvků Aij matice A(n,m) řádek po řádku.

Dílčí pří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) "Přečtěte matici Pro i = 1 To n Pro j = 1 To m Volejte readcell(i + 1, j, a(i, j)) Další j Další i "Výpočet Pro i = 1 To n s(i) = 0 Pro j = 1 To m s(i) = s(i) + a(i, j) Další j Volání outcell(i + 1, m + 1 , s(i)) Další i End Sub

Všimněte si, že první Next uzavírá vnitřní smyčku For a poslední Next uzavírá vnější smyčku For. Podobně pro vnořené příkazy If se automaticky použijí příkazy End If k uzavření nejbližšího příkazu If. Vnořené struktury Do . . . Smyčky fungují podobným způsobem: nejvzdálenější příkaz Loop odpovídá nejvzdálenějšímu příkazu Do.

Při vstupu/výstupu prvků dvourozměrného pole na listu Microsoft Excel je vhodné použít vlastní vstupní/výstupní procedury:

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).Value = val End Sub

kde I je číslo řádku, j je číslo sloupce listu.

Opuštění řídících struktur

Příkaz Exit umožňuje ukončit přímo smyčku For, smyčku Do, proceduru Sub nebo proceduru Function. Syntaxe příkazu Exit je jednoduchá:

Pro čítač = začátek Konec [blok příkazů] [blok příkazů] Další Proveďte [(Dokud | Do) podmínka] [blok příkazů] [blok příkazů] Smyčka

Exit For uvnitř smyčky For a Exit Do uvnitř smyčky Do se mohou objevit mnohokrát.

Příkaz Exit Do funguje se všemi variantami syntaxe smyčky Do.

Příkazy Exit For a Exit Do se používají, když je nutné okamžitě ukončit cyklus, bez pokračování v dalších iteracích nebo bez čekání na provedení bloku příkazů v těle cyklu.

Když použijete příkaz Exit k ukončení smyčky, hodnoty proměnné smyčky závisí na tom, jak smyčka skončí:

Když smyčka skončí normálně, hodnota proměnné smyčky je o jednu vyšší než horní mez počtu smyček

Při předčasném ukončení smyčky si proměnná smyčky zachovává svou hodnotu, kterou obdržela, s přihlédnutím k obvyklým pravidlům

Když smyčka skončí na konci sady, proměnná smyčky je Nothing, pokud se jedná o objektovou proměnnou, nebo Prázdná, pokud se jedná o variantu.

Poslední aktualizace: 30.10.2015

Dalším typem řídicích struktur jsou smyčky. VB.NET používá několik druhů smyček.

Pro...Další smyčku

Tato smyčka se provede určitý počet opakování a toto číslo je nastaveno čítačem:

For i As Integer = 1 až 9 Console.WriteLine("Čtverec (0) je (1)", i, i * i) Další

Zde proměnná i hraje roli čítače. Po slově Na vložíme maximální hodnotu čítače. S každým cyklem se hodnota čítače zvýší o jedničku. A tato hodnota se porovná s hodnotou po Na. Pokud jsou tyto dvě hodnoty stejné, smyčka skončí.

Při práci se smyčkami můžeme s každým průchodem zvýšit hodnotu čítače nejen o jedničku, ale obecně o libovolné číslo. Chcete-li to provést, musíte buď použít klíčové slovo krok a po něm zadejte krok smyčky, o který se hodnota čítače zvýší, nebo můžete čítač zvýšit přímo ve smyčce:

For i As Integer = 1 až -9 Krok -1 For j As Integer = 1 To 9 Console.WriteLine("Součin i a j je (0)", i * j) j += 1 Další Další

Všimněte si, že záporná hodnota je vybrána jako krok v první smyčce a hodnota čítače se snižuje o jednu s každým průchodem. Ve vnitřní smyčce se čítač j při každé iteraci zvýší o 2, protože se ve výchozím nastavení zvýší o jedničku a my ho také ve smyčce explicitně zvýšíme o jedničku. Výsledkem je, že vnitřní smyčka funguje pětkrát a vnější devětkrát, to znamená ve skutečnosti 45 cyklů.

Pro každou... další smyčku

Smyčka For Each iteruje prvky v konkrétní skupině, jako je pole nebo kolekce. Předpokládejme, že máme nějaké pole typu Integer a potřebujeme toto pole inicializovat náhodnými hodnotami a poté zobrazit všechny jeho prvky na obrazovce:

"Vytvořte pole pěti čí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 " Zobrazit pole prvků Pro každé i Jako celé číslo In nums Console.Write("(0) ", i) Další

V příkazu For Each nejprve určíme proměnnou, která bude přebírat hodnoty prvků pole. A po klíčovém slově v Určete skupinu, ve které chcete seřadit všechny prvky.

zatímco smyčka

V cyklu While se provádí tak dlouho, dokud je splněna určitá podmínka zadaná za slovem While:

Dim j As Integer = 10 Zatímco j > 0 Console.WriteLine(j) j -= 1 End While

Udělejte smyčku

Smyčka Do, stejně jako smyčka While, se provádí, dokud je splněna určitá podmínka. Má však různé podoby. V následujícím příkladu se tedy nejprve zkontroluje podmínka a poté se provede blok kódu definovaný ve smyčce:

Dim j As Integer = 10 Proveďte, zatímco j > 0 Console.WriteLine(j) j -= 1 smyčka

V tomto případě se smyčka provede, když je hodnota j větší než nula. Existuje však další záznam, kde je místo slova použito slovo While Dokud a cyklus se provádí, dokud není splněna určitá podmínka, to znamená, dokud hodnota j nebude menší než nula:

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

Pokud je zpočátku podmínka zadaná ve smyčce nepravdivá, smyčka nebude fungovat. Můžeme však definovat kontrolu na konci cyklu, a proto se naše smyčka spustí alespoň jednou:

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

Pokračovat a ukončit příkazy

Často je potřeba nečekat na konec cyklu, ale okamžitě cyklus opustit, pokud je splněna určitá podmínka. K tomu použijte operátor výstup, následovaný typem smyčky, ze které se má opustit, napří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)

Je tu další úkol - vystoupit ne ze smyčky, ale z aktuálního průchodu nebo iterace a přejít na další. Chcete-li to provést, použijte příkaz Continue, po kterém označují typ smyčky, ze které se provede výstup, napří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 případě v každém průchodu smyčkou odečteme číslo 7 od num a pak uvidíme, zda číslo num patří do intervalu od 25 do 50. A pokud ano, přejdeme k nové iteraci cyklu a pokud ne, zobrazíme jej na obrazovce.

Laboratorní práce ze základů programování

2.1. Tabulace funkcí reprezentovaných analyticky
a sbíhají se poblíž

Objektivní

· Upevňování teoretických znalostí o základech organizace větvících a cyklických struktur.

· Získání praktických dovedností programování s využitím větvících a cyklických struktur v systému Visual Basic.

Ve VB existují tři druhy příkazů smyčky:

cyklus počítání: Pro...Do...Další

Smyčky s předpoklady: Do While...Loop, Do Until...Loop, While...WEnd

Smyčky s dodatečnými podmínkami: Do...Loop While, Do...Loop When.

Cyklus počítání – umožňuje procházet sadou příkazů stanovený počet opakování. Jeho syntaxe je následující:

Pro čelit = Start Na konec

[operátory]

[operátory]

Další[ čelit]

Parametr čelit je číselná proměnná (celé číslo, reálné číslo nebo datum, varianta, měna), která se automaticky zvyšuje po každé iteraci. Počáteční hodnota čelit rovný parametru Start, a konečným parametrem je konec. Pokud není zadáno, pak je krok považován za rovný 1, hodnotu kroku lze změnit. Může to být kladné nebo záporné číslo.

Existují čtyři syntaktické konstrukty pro Do….Loop:

Příkazy mezi klíčovými slovy Do...Loop se provádějí stanoveným počtem opakování v závislosti na podmínce. Například v následujícím fragmentu programu, když C = 100, bude podmínka splněna a smyčka vstoupí. Uvnitř smyčky se zavolá procedura a hodnota C se sníží o 1. Poté se podmínka znovu zkontroluje (C > 0) a znovu se provedou příkazy smyčky (celkem se provedou 100x), až C = 0. Když se podmínka C > 0 stane nepravdivou a smyčka se zastaví.

Proveďte, dokud C > 0

Stejný fragment programu spuštěný pomocí smyčky předběžných podmínek v syntaxi 2:

V tomto případě se smyčka provede, zatímco podmínka je False, na rozdíl od předchozího případu, to znamená, že pokračuje před splnění podmínky C = 0.

Příkazy smyčky v syntaxi 3 a 4 jsou velmi podobné prvním dvěma, až na podmínku ne se vyhodnocuje, dokud se smyčka alespoň jednou neprovede.

V syntaxích těchto smyček můžete použít operátory nepodmíněného odchodu ze smyčky Exit For a Exit Do, které umožňují přenést řízení na operátor za smyčkou. Pokud je například v následujícím fragmentu programu počáteční hodnota C >50, smyčka se okamžitě zastaví.



Dělejte do C<= 0

MsgBox "Start. hodnota je větší než povolená“, „Chyba vstupu“

Smyčka While...Wend byla používána v dřívějších verzích jazyka Visual Basic. Jeho syntaxe je následující:

Zatímco<условие>

<Операторы>

Na rozdíl od cyklu Do..Loop nemá smyčka While ..Wend druhou možnost, ve které se test podmínky provádí na konci smyčky. Navíc nemá příkaz ukončení smyčky jako Exit Do.

VBA. Organizace cyklů.

Příkazy smyčky se používají k opakování provedení akce nebo skupiny akcí daný počet opakování. Počet opakování (opakování smyčky) lze předdefinovat nebo vypočítat.

VBA podporuje dva druhy cyklických konstrukcí:

  1. Smyčky s pevným počtem opakování ( cykly s čítačem).
  2. Smyčky s neurčitým počtem opakování ( podmíněné smyčky).

Pro všechny typy cyklů se používá koncept tělo smyčky A, které definuje blok příkazů uzavřený mezi počáteční a koncový příkaz cyklu. Zavolá se každé opakování příkazů v těle smyčky iterace .

Pevné cykly

VBA poskytuje dvě řídicí struktury pro organizaci pevné smyčky: For ... Next (smyčka s čítačem) a For Each ... Next (smyčka s výčtem).

Pro...Další prohlášení je to typická smyčka s čítačem, který provede daný počet iterací. Syntaxe příkazu For … Next je:

Pro<счетчик> = <начЗначение>Že<конЗначение>

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

Další[<счетчик>]

Příklad použití příkazu For … Next.

Výpis 1. Pro … Další výpis

‘ CÍL: Napište program, který od uživatele obdrží dvě čísla.

‘ Sečte všechna čísla v rozsahu daném těmito dvěma čísly a poté

‘ Zobrazuje výsledný součet.

Dílčí ukázka7()

Dim i As Integer ‘počítadlo smyček

Dim sStart ‘počáteční hodnota počítadla

Dim sEnd ' koncová hodnota čítače

Dim sSum As Long ‘výsledná suma

sStart = InputBox("Zadejte první číslo:")

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

součet = 0

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

sSoučet = sSoučet + i

Příště já

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

konec sub

Pro každý … Příkaz další smyčkypatří do kategorie operátorů objektového typu, tzn. platí především pro sbírky objekty i pole . Tělo smyčky se provede pevně stanoveným počtem opakování, což odpovídá počtu prvků v poli nebo kolekci. Formát příkazu For Each … Next je:

Pro každého<элемент>v<группа> <блок операторов>Další[<элемент>]

Podmíněné smyčky (neurčité smyčky)

Podmíněné smyčky se používají, když je třeba provádět opakované akce pouze za určitých podmínek. Počet iterací není definován a v obecném případě může být roven nule (zejména pro smyčky s předběžnou podmínkou). VBA nabízí vývojářům několik řídicích struktur pro organizaci podmíněných smyček:

  • Čtyři typy smyček Do..Loop, které se liší typem kontrolované podmínky a časem provedení této kontroly.
  • Nepřerušovaná smyčka While… Wend.

Do Zatímco... Smyčka – Typické smyčka s předpokladem. Podmínka je zkontrolována před provedením těla smyčky. Cyklus pokračuje ve své práci, dokud ne<условие>je proveden (tj. je True). Protože se kontrola provádí na začátku, tělo smyčky se nemusí nikdy provést. Formát smyčky Do While…

Dělat, zatímco<условие>

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

smyčka

Výpis 2. Do While… Smyčka

‘ CÍL: Napsat program, který přijímá vstup uživatele

„libovolná posloupnost čísel. Vstup musí být ukončen

‘ až poté, co součet zadaných lichých čísel překročí 100.

Dílčí vzorek8()

Dim OddSum jako celé číslo

Dim OddStr As String 'řetězec s lichými čísly

Dim Num 'akceptuje vstupní čísla

OddStr = "" 'inicializace výstupního řetězce

OddSum = 0 ‘inicializace součtu OddSum

Do While OddSum< 100 ‘начало цикла

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

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

OddSum = OddSum + Num ‘akumulace součtu lichých čísel

OddStr = OddStr & Num & ” ”

Konec, pokud

smyčka

‘vytisknout řetězec s lichými čísly

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

konec sub

Do...Loop While Statementurčené k organizacismyčka s postpodmínkou. Podmínka je zkontrolována poté, co je tělo smyčky alespoň jednou provedeno. Cyklus pokračuje až do<условие>zůstává pravdou. Formát Do...Loop While:

Dělat<блок операторов>smyčka zatímco<условие>

Výpis 3. Smyčka s postcondition

‘ CÍL: Vytvořit program pro hru „Hádej číslo“. Program by měl být náhodný

‘ způsobem, aby vygeneroval číslo v rozsahu od 1 do 1000, musí uživatel

„Hádej toto číslo. Ke každému zadanému číslu program zobrazí nápovědu.

' "víceméně".

Dílčí vzorek8()

Randomize Timer ‘ inicializace generátoru náhodných čísel

Dim msg As String ‘ řetězec zprávy

Dim SecretNumber As Long, UserNumber As Variant

Začátek: SecretNumber = Round(Rnd * 1000) ‘ číslo vygenerované počítačem

UserNumber = Empty ‘ číslo zadané uživatelem

Dělejte hru

Vyberte možnost Case True

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

Case UserNumber > SecretNumber: msg = „Příliš mnoho!“

Uživatelské číslo případu< SecretNumber: msg = “Слишком мало!”

Konec Vyberte

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

Loop While UserNumber<>tajné číslo

'vyšetření

If MsgBox("Chcete hrát znovu?", vbYesNo + vbQuestion, "Hádali jste správně!") = vbYes Then

Přejít na začátek

Konec, pokud

konec sub

Do dokud… Smyčka a Do… Smyčka dokud Smyčka jsou inverzemi dříve uvažovaných podmíněných smyček. Obecně fungují podobně, až na to, že tělo smyčky se provádí za falešných podmínek (tj.<условие>= Nepravda). Formát cyklu Do dokud ... je:

Do dokud<условие> <блок операторов>smyčka

Formát smyčky Do… Loop Until je:

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

Opakovat dokud<условие>

Praktický úkol:Přepište programy ve výpisech 10 a 11 pomocí příkazů invertované smyčky.

Zatímco smyčka... Wend platí také pro podmíněné smyčky. Toto prohlášení plně odpovídá struktuře Do While… Loop. Formát smyčky While… Wend je:

Zatímco<условие>

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

Zamířit

Charakteristickým rysem tohoto příkazu je nemožnost vynuceného ukončení (přerušení) těla smyčky (příkaz Exit Do nefunguje ve smyčce While ... Wend).

Přerušení smyčky

Příkaz Exit se používá k ukončení iterace a ukončení cyklu. Toto tvrzení je použitelné v jakékoli cyklické struktuře, kromě While ... Wend. Obecná syntaxe pro použití Exit k přerušení smyčky je:

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

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

Ukončit (pro | Provést)

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

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

Po provedení příkazu Exit se smyčka přeruší a řízení se přenese na příkaz následující za příkazem<конец_цикла>. Tělo smyčky může obsahovat více příkazů Exit.

Výpis 4. Ukončení nucené smyčky

Dílčí vzorek9()

Pro i = 1 až 1 000 000

Pokud i = 10, pak Exit For ' opusťte smyčku, když počítadlo dosáhne 10

další

Syntaxe operátora:

ProČelit= Start TÓKonec[krokKrok]

Statement_Block

dalšíČelit

Je to označeno zde:

Pro pro (povinné klíčové slovo VB);

Na před (povinné klíčové slovo VB);

Statement_Block volal jeden nebo více operátorů tělo cyklu;

počítadlo - celočíselná proměnná, která počítá počet cyklů, které mají být provedeny;

Začátek, konec - počáteční a konečné hodnoty počítadla;

krok krok (klíčové slovo VB);

krok - krok změny počítadla; může být negativní; parametr je volitelný, protože pokud je krok 1, můžete Krok Krok dolní;

Další - další (povinné klíčové slovo VB, záznam příkazu konec smyčky).

Hodnota počítadla (Začátek, konec) může být číselné konstanty nebo proměnné typu integer nebo real, mohou být záporná nebo kladná čísla. Aby bylo tělo smyčky provedeno alespoň jednou, musí být Začátek ≤ Konec,-li Krok> 0 a Začátek ≥ Konec,-li Krok< 0. Jakmile se to ukáže Čelit>Konec (-li Start< Конец), provádění smyčky končí. Pokud Start =Konec, smyčka bude provedena jednou;

Příklad 9.1 .Hodnocení funkceY = 2 – 1.5 sinxpři změně X v krocích po 0,2 v rozsahu .

Fragment programu pro výpočet Y a výstup argumentu X a funkce Y:

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

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

Abyste pochopili, jak tato smyčka funguje, zde je program pro podobnou smyčku vytvořený pomocí operátorjít do, štítky, operátorLiPak.

M1:X=X+0,2

Pokud X<= 2.4 Then

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

Pojďme analyzovat, jak tento program funguje. První výpočet Y je nestandardní, jakoby vypadne ze smyčky. Smyčka začíná po prvním přenosu ovládání GoToM1 na štítek M1. V řádku označeném M1 se argument X zvýší o krok 0,2 a okamžitě se zkontroluje, zda nová hodnota X nepřesahuje konečnou hodnotu 2,4. Pokud nepřekročí, pak se výpočet Y zopakuje s tímto novým X. Poté se znovu provede operátor GoToM1 - předání řízení na řádek s označením M1. Tato opakování (cykly) výpočtu Y skončí, jakmile X překročí 2,4.

Nyní je program If srovnatelný se smyčkou For...Next.

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

nahradí dva řádky

M1:X=X+0,2

Pokud X<= 2.4 Then

Jsou to poslední dva řádky kódu, které se provádějí ve smyčce For, ale nevidíme to. Zakódovali jsme je řetězcem cFor... Kódový řádek GoTo M1 je zakódován slovem Next X (doslova: next X). Výsledkem je kompaktní design.

Při používání smyčky For...Next se musíte naučit, jak používat čítač smyček při řešení různých problémů. Chcete-li zjistit, jak můžete použít počítadlo k vyřešení problému, musíte analyzovat prohlášení o problému, najít vzory změn v některých parametrech problému.

Příklad 9.2 . Určení součtu prvků řady: .

Fragment programu:

S = 0 ‘S je součet řady

Pro i = 1 až 16‘ je čítač i jmenovatelem zlomku

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

Tisk "S="; S ‘ výstup součtu S do formuláře

Pro každou hodnotu čítače i tvoří výraz 1/i postupně prvky řady, počínaje 1.

Příklad 9.3 . Výpočet součtu řady prvků
.

Fragment programu:

S = 0 ‘S je součet řady

Pro i = 1 až 18‘ čítač i - čitatel

S = S + i/(i + 1) ‘ jmenovatel je větší než čitatel o 1

Tisk "S="; S ‘ výstup součtu S do formuláře

Příklad 9.4 . Výpočet součtu: 5 + 8 + 11 + ... + 32 + 35

Fragment programu:

S = 0 ‘S je součet řady

Pro i = 5 až 35 Krok 3 ‘ získat aritmetiku _

postup se jmenovatelem 3

Tisk "S="; S

Příklad 9.5. Výpočet součtu pro dané x:

Analýza problému ukazuje, že stupeň na X se mění z 1 na 10. V tomto případě je čitatel v koeficientu na X větší než stupeň o 1 a jmenovatel je o 2. Hodnota stupně bude tvořena pomocí počítadla i. Poté můžete napsat následující program (fragment):

S = 1 ‘S je součet řady

Pro i = 1 až 10‘ jako čítač i se stupeň mění v X

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

Tisk "S="; S

CyklyProdalšípoužito vvstup výstup azpracování pole .

Příklad 9.6. Vstup a výstup hodnot prvků pole B(N).

Fragment programu:

‘ Vynechejte přiřazení hodnoty N k proměnné, _

zadané ve formuláři do textového pole txtN:

B(i) = InputBox("Zadejte prvek B(" & i & ")", _

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

tisk " "; Bi);

Funkce InputBox() zobrazí dialogové okno s tlačítkem Zavřít, danou zprávou, vstupním polem, tlačítky OK,Zrušení, záhlaví (nebo bez něj). Pokud je zadáno číslo 12 - velikost pole N, pak v našem příkladu při prvním vzhledu bude toto okno vypadat takto:

Jak vidíte, zpráva Zadejte prvek B(1) vás vyzve k zadání hodnoty 1. prvku do textového pole. Toto okno se objeví 12krát, protože pole obsahuje 12 prvků. Vyplývá to z hlavičky formuláře. Index prvku B(i) ve výzvě se bude lišit od 1 do 12.

Pokud je požadováno zobrazení pouze hodnot prvků pole B(N) ve formuláři, pak se tělo smyčky bude skládat z jednoho příkazu:

Prohlížení prvků pole za účelem provedení nějaké akce s nimi také probíhá pomocí operátoru smyčky For...Next.

Pojďme přinést příklady zpracování jednorozměrných polí.

Příklad 9.7 . Určení maximálního prvku v poli B(M).

Kromě vstupu počátečních dat a výstupu výsledků stručně popíšeme algoritmus:

    Deklarujme proměnnou Bmax, do které zadáme hodnotu prvního prvku pole, a proměnnou Imax, které přiřadíme 1 - index prvního prvku pole.

    Ve smyčce pomocí operátoru For…Next procházíme všechny prvky pole, počínaje 2. Pomocí operátoru If…Then porovnáme jejich hodnoty s hodnotou uloženou v proměnné Bmax.

    Pokud se ukáže, že hodnota prvku pole je větší než Bmax, pak Bmax je přiřazena hodnota tohoto prvku a hodnota Imax je index tohoto prvku pole.

Po skončení cyklu bude proměnná Bmax obsahovat hodnotu maximálního prvku a Imax jeho index (číslo).

Program této části algoritmu.

Bmax = B(1): Imax = 1

Jestliže B(i) > Bmax, pak Bmax = B(i): Imax = i

Příklad 9.8. Určení součtu, součinu a počtu kladných prvků poleD(M).

Proměnné: S, P, K jsou součet, součin a počet kladných prvků.

Algoritmus tato definice:

    Proměnným S a K přiřadíme nulu, proměnné P přiřadíme 1. Zpravidla se proměnné, kde je součet akumulován, zde je to S a k, před cyklem vynulují a 1 se přiřadí proměnné, ve kterých se součin počítá.

    Pomocí cyklu For…Next projdeme všechny prvky pole a zkontrolujeme, zda jsou kladné (D(i) > 0).

    Pokud se ukáže, že prvek je kladný, pak jeho hodnotu přičteme k hodnotě součtu S a nový součet uložíme do stejné proměnné. Proměnnou P vynásobíme kladnou hodnotou prvku a uložíme také do proměnné P. A do proměnné K přidáme 1 a novou hodnotu uložíme do stejné proměnné

Program tato část algoritmu vypadá takto:

S=0: P=1: K=0

Jestliže D(i) > 0 Pak

S = S + D(i) ‘ takto akumulace součtu _

kladné hodnoty prvků pole D(i)

P = P*D(i) ‘ definice součinu klad

prvky pole

K = K + 1 ‘ tento operátor se nazývá COUNTER, zde je

‘ určuje počet kladných prvků pole

Příklad 9.9. Určení součtu, součinu, počtu a průměru prvků lichého poleD(M).

Představujeme fragment programu takové definice.

S=0: P=1: K=0

Pokud D(i) Mod 2<>0 Pak

Ssr = S/k ‘ výpočet průměru lichých prvků

Porovnejte tento fragment programu s programem v příkladu 9.8. Tento program téměř úplně opakuje předchozí. Změnila se pouze podmínka v příkazu If. Podmínka D(i) Mod 2<>0 znamená, že hledáme prvky pole D(i), které nejsou dělitelné ani 2, tedy liché prvky. Pokud zaškrtneme podmínku D(i) Mod 2 = 0, vybereme sudé prvky pole.

Jak víte, rozdělení Mod dává jako výsledek zbytek dělení v celých číslech. Například po provedení operátoru d= 34Mod4 bude proměnná d rovna 2. Chcete-li tedy vybrat prvky pole, které jsou násobky 4, musíte zkontrolovat podmínku D(i) Mod 4 = 0. být podobný, pokud hledáme prvky, které jsou násobky jiných čísel. Místo 4 se budou psát tato další čísla.

Příklad 9.10. Zápis prvků poleR(N) dělitelné 5 do jiného pole a zobrazení nového pole ve formuláři.

Druhé pole bude označeno například R5(N). Velikost tohoto nového pole by měla být považována za stejnou jako původní, protože v limitním případě mohou být všechny prvky násobky 5.

Algoritmus úkolu:

    Vynulujeme počítadlo k. Pomocí operátoru For…Next smyčky prohlédneme všechny prvky pole R(N).

    Každý prvek zkontrolujeme na násobek 5 pomocí operátoru If…Then a rozdělení prvku pole pomocí Mod.

    Pokud je prvek násobkem 5, pak pomocí čítače jako k=k+ 1 vytvoříme indexy pole R5(N), počínaje 1, a zapíšeme je do tohoto druhého pole –R5(N).

    Pokud je k nenulové, vypíše do formuláře poleR5().

    Pokud je k rovno nule, vypíšeme: "Neexistují žádné prvky, které jsou násobky 5".

Fragment programu:

Jestliže R(i) Mod 5 Pak k = k + 1: R5(k) = R(i)

Pokud k<>0 Pak

Vytisknout „Žádné prvky dělitelné 5“

Smyčky lze vnořit do jiných smyček.

Pojďme si práci ukázat vnořené smyčky . Níže program organizuje výstup hodnot čítačů cyklů i, j a k. Z výstupu i,j,k je jasné, jak se vnořené smyčky provádějí.

Private Sub frmCycle_DblClick()

ScaleMode = 4 'jednotky - symboly

Pro i = 1 až 3 ‚vnější smyčka

Tisk "i ="; i;

Pro j = 1 až 4 ‚1. vnořená smyčka

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

Tisk "j="; j;

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

Pro k = 1 až 5 ‘2. vnořená smyčka

Zobrazený formulář (obr. 1) ukazuje výsledky zobrazení čítačů všech tří smyček: vnější smyčky - čítač i, první vnořené smyčky - counterj a druhé, nejvnitřnější smyčky - counterk. Jak vidíme, "nejpomalejší" čítač vnější smyčky(poi) a „nejrychlejší“ je čítač nejvnitřnější smyčky (podlek).

Program se spustí po dvojitém kliknutí na formulář frmCicli levým tlačítkem myši.

CurrentX, CurrentY - vlastnosti formuláře, které specifikují souřadnice X, Y počátečního bodu pro výstup informací metodou Print (viz umístění os X a Y na formuláři na obr. 1).

TextWidth() je funkce, která vrací šířku textu zadaného ve funkci jako argument v uvozovkách.

Vnořené smyčky se používají při zpracování dvourozměrných polí (matic). Ale v některých úlohách, s výjimkou vstupu a výstupu prvků dvourozměrného pole, se můžete omezit na jeden cyklus. Zvažte některé příklady maticového programování.

Příklad 9.11. Vstup a výstup matice (dvourozměrné pole) celých číselintA(N).

Můžete zadat matici po řádcích a po sloupcích . Je to jednodušší - řádek po řádku, pokud výstup prvků pole do formuláře bude naprogramován ihned po jejich zadání.

Maticový vstup a výstupřádek po řádku - 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 řádků

N = Val(txtN.Text) ‘ N je počet sloupců

ReDim intA(M, N) As Integer ‘ předefinuje pole

Pro i = 1 až M ‘ i zachová svou hodnotu, dokud nebude úplně

‘vnořená smyčka na j nebude provedena

tisk " "; intA(i, j); ‘ výstup řádek po řádku

Print ‘ skok na začátek nového řádku

Pro zadání matice po sloupcích je nutné vytvořit vnější smyčku na j (nastavuje čísla sloupců) a vnitřní smyčku na i (nastavuje čísla řádků).

Maticový vstup a výstuppo sloupcích fragment 2.

PrY = 2500: CurrentY = PrY ‘ PrY nastavuje souřadnici Y začátku

‘ vypíše první prvek každého sloupce ve formuláři

Pro j = 1 To N ‘ j zachová svou hodnotu, dokud nebude úplně

‘vnořená smyčka na i nebude provedena

intA (i, j) = InputBox("Zadejte prvek intA(" & i & "," & j & ")", _

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

Tisk Tab(6 * j); intA(i, j) ‘ zobrazení po sloupcích

CurrentY = PrY ' pro zobrazení prvního prvku

' další sloupec

Tento druhý fragment programu neopakuje prvních 5 řádků z prvního fragmentu. Funkce Tab(6 * j) nastavuje začátek výstupu na řádek (ve znacích) začínající od levého okraje formuláře. Souřadnice PrY je zde 2500 twipů, ale můžete zvolit jinou hodnotu.

Příklad 9.12 . Uspořádání hodnot prvků polePROTI(N) Vzestupně.

Existuje několik algoritmů pro řazení polí. Zde je jeden z nich: pomocí vnořených smyčekProdalšívyberte prvky od prvního po předposlední a porovnejte každý z nich s následujícími prvky; pokud se ukáže, že další prvek je menší než vybraný, vyměňte je.

Fragment programu, který implementuje tento algoritmus:

Pro i = 1 až N - 1

Pro j = i + 1 až N

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

Pojďme si vysvětlit tento fragment programu.

Pomocí vnější smyčky s čítačem i vybereme prvek V (i) pro porovnání s následujícími prvky. Vnitřní smyčka s čítačem j vybírá následující prvky V(j) pro porovnání. Počáteční hodnota j je i + 1. Toto je první prvek z následujícího.

Pro výměnu hodnot prvků V(i) a V(j) zavedeme nějakou proměnnou P, do které dočasně „schováme“ hodnotu jednoho z prvků pole (v programu je to V(i )). Potom je prvku V(i) přiřazena hodnota prvku V(j) a prvku V(j) je přiřazena hodnota V(i), která je uložena v proměnné P. Pokud „skryjeme“ hodnotu V(j) v P, pak bude kód výměny hodnot následující: P = V(j): V(j) = V(i): V(i) = P. výsledek se nezmění.

Na seřadit pole v sestupném pořadí, stačí podmínku pro ověření napsat ve tvaru V(j) > V(i), tedy změnit znaménko nerovnosti na jiné.

Pokud pole není číselné, ale řetězcové a prvky pole jsou vyplněny příjmeními, můžete pomocí programu v příkladu 9.12 seřadit seznam příjmení podle abecedy. Faktem je, že pro písmena abecedy používaná v počítači platí nerovnosti: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

Příklad 9.13 . Výpočet součtu kladných prvků pro liché sloupce maticeF(M, N) a zobrazení součtů na formuláři.

Algoritmus programu:

    Pomocí vnější smyčky s krokem 2 vytvoříme index lichých sloupců matice, počínaje prvním sloupcem.

    Vynulujeme součet S, ve kterém se bude sčítat součet kladných prvků.

    Ve vnitřní smyčce kontrolujeme znaménko prvku pole.

    Pokud je prvek pole kladný (> 0), vypočítejte součet S.

    Po skončení vnitřní smyčky vypište součet S do formuláře.

Fragment programy:

Pro j = 1 až N Krok 2

Pokud F(i, j) > 0, pak S = S + F(i, j)

Vytisknout „Součet sloupců“; j; ":"; S ‘j je číslo sloupce!

Vnořené smyčky vám umožní organizovat výčet možností a řešit problémy, které nelze řešit analyticky. V důsledku výčtu jsou získána řešení, mezi nimiž je vybráno jedno nebo více, které splňují podmínku problému.

Příklad 9.14. Je tam 1801 rublů. Kolik si můžete koupit čokolády za 31 rublů. a roli za 18 rublů, abyste mohli plně utratit všechny peníze.

Program:

Částka = 1801

AllChocolates = Součet \ 31: Všechny buchty = Součet \ 18

Pro i = 1 Všem čokoládám

Pro j = 1 To AllBulki

Cena = i * 31 + j * 18 ‘celková kupní cena

Pokud cena = 1801, pak

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

Pojďme si vysvětlit program, ve kterém používáme proměnné pojmenované v ruštině.

Nejprve určíme, jaký je maximální počet pouze čokolád nebo pouze rohlíků, které lze zakoupit za celou částku. Získané hodnoty VseChocolate a VseBulki se používají k omezení počtu vyhledávání podle počtu čokolád a rohlíků. Pro každou hodnotu počtu čokolád (i) a počtu rohlíků (j) určujeme celkovou Cenu za jejich nákup. Pokud je vypočítaná Cena 1801, pak je vybraná možnost jedním z řešení problému.

Funkce Tab() určuje, na jaké pozici od okraje formuláře se zobrazí informace následující za touto funkcí. Pokud Tab(19), tak od 19. pozice.

Program zobrazuje 3 možné možnosti nákupu:

Čokolády 7, rohlíky 88

Čokolády 25, rohlíky 57

Čokolády 43, rohlíky 26

Pokud chcete dát jednoznačnou odpověď, musíte formulovat další podmínku. Například „bylo nakoupeno méně buchet než čokolády“. Pak by jediným řešením byla 3. možnost.

Existuje mnoho matematických problémů, které lze jednoduše vyřešit iterací pomocí programování vnořené smyčky.