Petlja za vba excel opis. "VBA naredbe petlje

Petlje vam omogućavaju da izvršite jednu ili više linija koda više puta. VBA podržava sljedeće petlje:

Za...Sljedeće Za Svako...Sljedeće Uradi... Petlja

Konstrukt Za. . . sljedeći. Kada je broj ponavljanja poznat unaprijed, koristi se petlja For. . . sljedeći. Petlja For koristi varijablu koja se zove varijabla petlje ili brojač petlje koja se povećava ili smanjuje za određeni iznos svaki put kada se petlja ponavlja. Sintaksa za ovu konstrukciju je:

Za brojač = početak Za kraj Sljedeće izjave

Parametri brojač (brojač), početak (početak ciklusa), kraj (kraj ciklusa) i inkrement (inkrement) su numerički.

Bilješka. Parametar inkrementa može biti pozitivan ili negativan. Ako je pozitivan, početni parametar mora biti manji ili jednak krajnjem parametru, inače se petlja neće izvršiti. Ako je parametar inkrementa negativan, tada početni parametar mora biti veći ili jednak vrijednosti završnog parametra da bi se izvršilo tijelo petlje. Ako parametar Step nije postavljen, tada je zadana vrijednost parametra inkrementa 1.

VBA izvršava For petlju u sljedećem nizu:

1. Postavlja brojač varijable petlje za početak.

2. Uspoređuje vrijednost brojača varijable petlje i vrijednost krajnjeg parametra. Ako je varijabla brojača veća, VBA završava petlju. (Ako je vrijednost parametra inkrementa negativna, tada VBA prekida petlju ako je vrijednost brojača varijable petlje manja od vrijednosti krajnjeg parametra.)

3. Izvršava naredbe naredbi tijela petlje.

4. Povećava vrijednost brojača varijable petlje za 1, ili za vrijednost parametra inkrementa, ako je zadan.

5. Ponovite korake 2 do 4.

Razmotrite primjer: Izračunajte vrijednost funkcije f(t)

dato a, b, n, ako se t mijenja od a do b u prirastu od Dt=(b-a)/(n-1).

Podprimjer3() Dim f() Kao Single Dim a Kao Single, b Kao Single, t Kao Single, dt Kao Single Dim i Kao cijeli broj, n Kao cijeli broj Poziv read("a1", a) : Poziv read("b1" , b) : Poziv read("c1", n) ReDim f(1 Do n - 1) dt = (b - a) / (n - 1) : t = a Poziv ("a2", "i") : Call out("b2", "t") : Call out("c2", "f(t)") Za i = 1 Do n - 1 t = t + dt Ako je t<= -1 Then f(i) = -1 ElseIf t >1 Tada je f(i) = 1 Inače f(i) = t Završi ako Pozovi ("a" & (2 + i), i) : Pozovi ("b" & (2 + i), t) : Pozovi out("c" & (2 + i), f(i)) Next i End Sub

Konstrukt Za svaki. . . Sljedeći

Za svaku petlju. . . Sljedeća je kao petlja For. . . Zatim, ali ponavlja grupu iskaza za svaki element iz skupa objekata ili iz niza, umjesto da ponavlja iskaze određeni broj puta. Posebno je korisno kada ne znate koliko elemenata ima u setu.

Sintaksa konstrukcije petlje For Each. . . Sljedeće je:

Za svaki element U grupnim izjavama Sljedeći element

Budite svjesni sljedećih ograničenja kada koristite petlju za svaki. . . Sljedeći:

Za skupove, parametar elementa može biti samo varijabla tipa varijanta, opća varijabla tipa object ili objekt naveden u pregledniku objekata

Za nizove, parametar elementa može biti samo varijabla tipa Variant

Ne možete koristiti petlju za svaki. . . Zatim s nizom korisnički definiranog tipa jer varijabla tipa varijanta ne može sadržavati vrijednost korisnički definiranog tipa

Do...Loop dizajn

Do petlja se koristi za izvršavanje bloka naredbi neograničen broj puta. Postoji nekoliko varijacija Do konstrukcije. . . Petlja, ali svaki od njih procjenjuje uvjetni izraz kako bi odredio kada treba izaći iz petlje. Kao u slučaju konstrukcije If. . . Tada uslov mora biti vrijednost ili izraz koji ima vrijednost False (nula) ili True (ne-nula).

U sljedećoj konstrukciji, Do . . . Naredbe petlje se izvršavaju sve dok je vrijednost uslova Tačno (True):

Uradite izjave petlje za uvjet

Prilikom izvršavanja ove petlje, VBA prvo provjerava uslov. Ako je uvjet False, preskače sve naredbe petlje. Ako je istina, VBA izvršava naredbe petlje, ponovo se vraća na naredbu Do While i ponovo testira uslov.

Stoga, petlja predstavljena ovom konstrukcijom može se izvršiti bilo koji broj puta sve dok vrijednost uvjeta nije nula ili Tačno. Imajte na umu da se naredbe tijela petlje nikada ne izvršavaju ako se prvi put kada se provjeri uvjet, ispostavi da je netačan (False).

Razmotrite primjer: Izračunajte zbir niza

sa zadatom tačnošću.

Podprimjer4() Dim e As Single, x As Single, s Kao Single Dim Kao Single, p Kao 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") Uradi dok 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 Sub End Loop

Još jedna varijacija Do konstrukcije. . . Petlja prvo izvršava naredbe tijela petlje, a zatim provjerava stanje nakon svakog izvršenja. Ova varijacija osigurava da se izrazi u tijelu petlje izvrše barem jednom:

Uradite naredbe Loop While uslov

Druge dvije varijante konstrukcije petlje slične su prethodnim, osim što se petlja izvršava dok je uvjet netačan (False):

Petlja se uopće ne izvršava ili se izvršava mnogo puta:

Radite do stanja

Naredbe petlje

Petlja se izvršava najmanje jednom:

operateri

Petlja do uvjeta

7.2 Ugniježđene petlje.

Možete staviti kontrolne strukture unutar drugih kontrolnih struktura (na primjer, If... Zatim blokirati unutar For... Next petlje). Kaže se da je kontrolna struktura smještena unutar druge kontrolne strukture ugniježđena.

Dubina ugnježđenja kontrolnih struktura u VBA nije ograničena. Da bi se poboljšala čitljivost koda, uobičajena je praksa da se pomjeri tijelo konstrukcije odluke ili petlje u programu kada se koriste ugniježđene kontrolne strukture.

Kada se ugniježdi jedna ili više drugih petlji u petlji, govorimo o ugniježđenim petljama, koje razlikuju vanjske (obuhvatne) i unutrašnje (ugniježđene) petlje.

Razmotrimo primjer sabiranja elemenata Aij matrice A(n,m) red po red.

Podprimjer5() Dim a() Kao Single, s() Kao Single Dim n Kao cijeli broj, m Kao Integer Dim i Kao cijeli broj, j Kao Integer Poziv read("a1", n): Poziv read("b1", m ) ReDim a(1 do n, 1 do m), s(1 do n) "Pročitaj matricu za i = 1 do n Za j = 1 do m Pozovi readcell(i + 1, j, a(i, j)) Sljedeće j Sljedeće i "Izračun Za i = 1 Do n s(i) = 0 Za j = 1 Do m s(i) = s(i) + a(i, j) Sljedeće j Pozovi outcell(i + 1, m + 1 , s(i)) Sljedeće i Kraj pod

Imajte na umu da prvi Next zatvara unutrašnju For petlju, a posljednji Next zatvara vanjsku For petlju. Slično, za ugniježđene If naredbe, naredbe End If se automatski primjenjuju kako bi se zatvorila najbliža If naredba. Ugniježđene strukture Do . . . Petlje rade na sličan način: najudaljeniji izraz Loop odgovara najdaljem Do izrazu.

Prilikom unosa/izlaza elemenata dvodimenzionalnog niza na radnom listu Microsoft Excel-a, zgodno je koristiti prilagođene procedure za unos/izlaz:

Sub readcell(i Kao cijeli broj, j kao cijeli broj, val kao varijanta) val = Leaf1.Cells(i, j).Value End Sub Sub outcell(i Kao cijeli broj, j Kao cijeli broj, val Kao varijanta) Leaf1.Cells(i, j).Vrijednost = val Kraj pod

gdje je I broj reda, j je broj kolone radnog lista.

Napuštanje kontrolnih struktura

Naredba Exit vam omogućava da izađete direktno iz For petlje, Do petlje, Sub procedure ili Function procedure. Sintaksa naredbe Exit je jednostavna:

Za brojač = početak Za kraj [blok iskaza] [blok izraza] Sljedeće Uradi [(Dok | Dok) uvjet] [blok izraza] [blok izraza] Petlja

Exit For unutar For petlje i Exit Do unutar Do petlje mogu se pojaviti bilo koji broj puta.

Naredba Exit Do radi sa svim varijacijama sintakse Do petlje.

Izrazi Exit For i Exit Do se koriste kada je potrebno prekinuti petlju odmah, bez nastavka daljih iteracija ili bez čekanja na izvršenje bloka naredbi u tijelu petlje.

Kada koristite naredbu Exit za izlazak iz petlje, vrijednosti varijable petlje zavise od toga kako se petlja završava:

Kada se petlja normalno završava, vrijednost varijable petlje je jedna veća od gornje granice za broj petlji

Kada se petlja prerano završi, varijabla petlje zadržava svoju vrijednost koju je primila, uzimajući u obzir uobičajena pravila

Kada se petlja završi na kraju skupa, varijabla petlje je Ništa ako je varijabla objekta ili Prazna ako je varijanta

Posljednje ažuriranje: 30.10.2015

Druga vrsta kontrolnih struktura su petlje. VB.NET koristi nekoliko vrsta petlji.

Za...Sljedeću petlju

Ova petlja se izvršava određeni broj puta, a taj broj postavlja brojač:

Za i As Integer = 1 do 9 Console.WriteLine("Kvadrat od (0) je (1)", i, i * i) Dalje

Ovdje varijabla i igra ulogu brojača. Posle reči To stavljamo maksimalnu vrijednost brojača. Sa svakim ciklusom, vrijednost brojača se povećava za jedan. I ova vrijednost se upoređuje sa vrijednošću nakon To. Ako su ove dvije vrijednosti jednake, onda se petlja završava.

Kada radimo sa petljama, možemo povećati vrijednost brojača sa svakim prolazom, ne samo za jedan, već za bilo koji broj općenito. Da biste to učinili, morate koristiti ključnu riječ korak a nakon njega navedite korak petlje za koji će se povećati vrijednost brojača, ili možete povećati brojač direktno u petlji:

Za i As Integer = 1 do -9 Korak -1 Za j As Integer = 1 do 9 Console.WriteLine("Proizvod i i j je (0)", i * j) j += 1 Sljedeći Sljedeći

Imajte na umu da je negativna vrijednost odabrana kao korak u prvoj petlji, a vrijednost brojača se smanjuje za jedan sa svakim prolazom. U unutrašnjoj petlji, brojač j se povećava za 2 na svakoj iteraciji, jer se po defaultu povećava za jedan, a mi ga takođe eksplicitno povećavamo u petlji za jedan. Kao rezultat, unutrašnja petlja radi pet puta, a vanjska devet, odnosno, u stvari, dobije se 45 ciklusa.

Za svaku...sljedeću petlju

Petlja For Each ponavlja elemente u određenoj grupi, kao što je niz ili kolekcija. Pretpostavimo da imamo neki niz tipa Integer i trebamo inicijalizirati ovaj niz nasumičnim vrijednostima, a zatim prikazati sve njegove elemente na ekranu:

"Kreirajte niz od pet brojeva Dim nums(4) As Integer Dim r As New Random() "inicijalizirajte niz For i As Integer = 0 To nums.Length - 1 nums(i) = r.Next(100) Next " Prikaz elemenata niza Za svaki i kao cijeli broj u brojevima Console.Write("(0) ", i) Dalje

U izrazu For Each, prvo specificiramo varijablu koja će uzeti vrijednosti elemenata niza. I nakon ključne riječi U Odredite grupu u kojoj želite da sortirate sve elemente.

while petlja

U while petlji, ona se izvršava sve dok je ispunjen određeni uslov, naveden nakon riječi While:

Dim j As Integer = 10 Dok j > 0 Console.WriteLine(j) j -= 1 Kraj Dok

Do loop

Do petlja, kao i while petlja, izvršava se sve dok je ispunjen određeni uslov. Međutim, ima različite oblike. Dakle, u sljedećem primjeru, prvo se provjerava uvjet, a zatim se izvršava blok koda definiran u petlji:

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

U ovom slučaju, petlja se izvršava dok je vrijednost j veća od nule. Ali postoji još jedan unos gdje se umjesto riječi koristi riječ Dok Do, a petlja se izvršava sve dok se ne ispuni određeni uvjet, odnosno dok vrijednost j ne postane manja od nule:

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

Ako je inicijalno uslov naveden u petlji netačan, tada petlja neće raditi. Ali možemo definirati provjeru na kraju petlje i tako će se naša petlja pokrenuti barem jednom:

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

Izjave za nastavak i izlaz

Često postoji potreba da se ne čeka kraj ciklusa, već da se odmah izađe iz ciklusa, ako je ispunjen određeni uslov. Da biste to učinili, koristite operatera Izlaz, nakon čega slijedi tip petlje iz koje treba izaći, na primjer, Exit Do (Exit While) :

Dim r As New Random() Dim num As Integer = r.Next(100) Za i As Integer = 0 do 100 num -= 1 Ako br.< 50 Then Exit For Next Console.WriteLine(num)

Postoji još jedan zadatak - izaći ne iz petlje, već iz trenutnog prolaza ili iteracije i prijeći na sljedeću. Da biste to učinili, koristite naredbu Continue, nakon čega oni označavaju tip petlje iz koje se izlazi, na primjer, Continue While:

Dim r As New Random() Dim num As Integer = r.Next(100) Za i As Integer = 0 do 10 num -= 7 Ako br.< 50 AndAlso num >25 Zatim nastavite za Kraj ako Console.WriteLine(num) Next

U ovom slučaju, u svakom prolazu petlje, oduzimamo broj 7 od broja i onda vidimo da li broj num pripada intervalu od 25 do 50. A ako jeste, idemo na novu iteraciju petlje, i ako nije, prikazujemo ga na ekranu.

Laboratorijski rad iz osnova programiranja

2.1. Tabelarni prikaz funkcija predstavljenih analitički
i konvergiraju u blizini

Cilj

· Učvršćivanje teorijskih znanja o osnovama organizacije granastih i cikličnih struktura.

· Sticanje praktičnih vještina programiranja korištenjem grananja i cikličkih struktura u Visual Basic sistemu.

Postoje tri vrste naredbi petlje u VB:

Ciklus brojanja: Za…Do…Sljedeće

Petlje sa preduvjetima: Do While...Loop, Do Until...Loop, While...WEnd

Petlje sa postuslovima: Do...Loop While, Do...Loop Until.

Ciklus brojanja - omogućava vam da kružite kroz skup iskaza određeni broj puta. Njegova sintaksa je sljedeća:

Za counter = Počni To kraj

[operateri]

[operateri]

Sljedeći[ counter]

Parametar counter je numerička varijabla (cjelobrojna, realna ili datum, varijanta, valuta) koja se automatski povećava nakon svake iteracije. Početna vrijednost counter jednak parametru počni, a konačni parametar je kraj. Ako nije navedeno, tada se korak smatra jednakim 1, vrijednost koraka se može promijeniti. Može biti pozitivan ili negativan broj.

Postoje četiri sintaktičke konstrukcije za Do….petlju:

Naredbe između ključnih riječi Do...Loop se izvode određeni broj puta ovisno o uvjetu. Na primjer, u sljedećem fragmentu programa, kada je C = 100, uvjet će biti ispunjen i petlja će ući. Unutar petlje se poziva procedura i vrijednost C se smanjuje za 1. Zatim se ponovo provjerava uvjet (C > 0) i naredbe petlje se ponovo izvršavaju (ukupno će se izvršiti 100 puta), do C = 0. Kada uslov C > 0 postane netačan i petlja se zaustavlja.

Uradite Dok je C > 0

Isti programski fragment koji se izvršava korištenjem petlje preduvjeta u sintaksi 2:

U ovom slučaju, petlja se izvršava dok je uslov False, za razliku od prethodnog slučaja, odnosno nastavlja se prije ispunjenje uslova C = 0.

Naredbe petlje u sintaksi 3 i 4 su vrlo slične prve dvije, osim uvjeta ne se evaluira sve dok se petlja ne izvrši barem jednom.

U sintaksi ovih petlji možete koristiti operatore bezuslovnog izlaska iz petlje Exit For i Exit Do, koji vam omogućavaju da prenesete kontrolu na operatora iza petlje. Na primjer, u sljedećem fragmentu programa, ako je početna vrijednost C >50, tada će se petlja odmah zaustaviti.



Uradi do C<= 0

MsgBox "Počni. vrijednost je veća od dozvoljene”, “Greška u unosu”

U ranim verzijama Visual Basica korištena je petlja While...Wend. Njegova sintaksa je sljedeća:

Dok<условие>

<Операторы>

Za razliku od Do..Loop-a, petlja While ..Wend nema drugu opciju, u kojoj se ispitivanje uslova izvodi na kraju petlje. Osim toga, nema naredbu za izlaz iz petlje kao što je Exit Do.

VBA. Organizacija ciklusa.

Naredbe petlje se koriste za ponavljanje izvršenja akcije ili grupe akcija određeni broj puta. Broj ponavljanja (iteracije petlje) može se unaprijed definirati ili izračunati.

VBA podržava dvije vrste konstrukcija petlje:

  1. Petlje sa fiksnim brojem ponavljanja ( ciklusi sa brojačem).
  2. Petlje sa neograničenim brojem ponavljanja ( uslovne petlje).

Za sve vrste ciklusa koristi se koncept tijelo petlje A koji definira blok naredbi zatvoren između početnih i završnih izraza petlje. Poziva se svako ponavljanje iskaza u tijelu petlje iteracija .

Fiksni ciklusi

VBA obezbeđuje dve kontrolne strukture za organizovanje fiksne petlje: For ... Next (petlja sa brojačem) i For Every ... Next (petlja sa nabrajanjem).

Za…Sljedeća izjava to je tipična petlja sa brojačem koji izvodi zadati broj iteracija. Sintaksa For… Sljedeća izjava je:

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

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

Sljedeći[<счетчик>]

Primjer korištenja naredbe For… Next.

Listing 1. Za … Sljedeća izjava

' CILJ: Napisati program koji prima dva broja od korisnika.

‘ Sabira sve brojeve u rasponu datom ta dva broja, a zatim

‘ Prikazuje rezultujuću sumu.

Poduzorak7()

Dim i As Integer 'brojač petlje

Dim sStart 'vrijednost startnog brojača

Dim sEnd ' krajnja vrijednost brojača

Dim sSum As Long 'rezultantna suma

sStart = InputBox("Unesite prvi broj:")

sEnd = InputBox("Unesite drugi broj:")

sSum = 0

Za i = CInt(sStart) Do CInt(sEnd)

sSum = sSum + i

Sljedeći i

MsgBox “Zbroj brojeva od ” & sPočetak & ” do ” & slanje & ” je: ” & sSum

end sub

Za svaku … Naredbu sljedeće petljespada u kategoriju operatora tipa objekta, tj. odnosi se prvenstveno na kolekcije objekata kao i nizova . Tijelo petlje se izvršava fiksni broj puta, što odgovara broju elemenata u nizu ili kolekciji. Format For Every … Sljedeća izjava je:

Za svaki<элемент>U<группа> <блок операторов>Sljedeći[<элемент>]

Uslovne petlje (neodređene petlje)

Uslovne petlje se koriste kada se ponavljajuće radnje moraju izvoditi samo pod određenim uvjetima. Broj iteracija nije definisan i u opštem slučaju može biti jednak nuli (posebno za petlje sa preduslovom). VBA nudi programerima nekoliko kontrolnih struktura za organiziranje uvjetnih petlji:

  • Četiri tipa petlji Do..Loop, koje se razlikuju po tipu uslova koji se provjerava i vremenu izvršenja ove provjere.
  • Neprekidna petlja While… Wend.

Uradi dok... Petlja - tipično petlja sa preduslovom. Uslov se provjerava prije nego što se izvrši tijelo petlje. Ciklus nastavlja svoj rad do njega<условие>se izvršava (tj. je Tačno). Pošto se provjera izvodi na početku, tijelo petlje se možda nikada neće izvršiti. Format petlje Do While…:

Uradi Dok<условие>

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

petlja

Listing 2. Uradite While… Loop

' CILJ: Napisati program koji prihvaća korisnički unos

' proizvoljan niz brojeva. Ulazak mora biti prekinut

‘ tek nakon što zbir unesenih neparnih brojeva pređe 100.

Poduzorak8()

Dim OddSum kao cijeli broj

Dim OddStr As String 'string sa neparnim brojevima

Dim Num 'za prihvatanje ulaznih brojeva

OddStr = "" 'inicijalizacija izlaznog niza

OddSum = 0 'inicijalizacija zbroja OddSum

Uradi Dok OddSum< 100 ‘начало цикла

Num = InputBox("Unesite broj: ")

Ako (Br. Mod 2)<>0 Zatim 'parnost

OddSum = OddSum + Num ‘akumulacija zbira neparnih brojeva

OddStr = OddStr & Num & ” ”

End If

petlja

'izvesti niz sa neparnim brojevima

MsgBox prompt:=”Neparni brojevi: ” & OddStr

end sub

Naredba Do...Loop Whilenamenjeno organizacijipetlja sa postuslovom. Uslov se provjerava nakon što se tijelo petlje izvrši barem jednom. Ciklus se nastavlja do<условие>ostaje istinito. Format Do...Loop While:

Uradi<блок операторов>petlja while<условие>

Listing 3. Petlja s postuvjetom

‘ CILJ: Napravite program za igru ​​„Pogodi broj”. Program bi trebao biti nasumičan

‘ na način da generira broj u rasponu od 1 do 1000, korisnik mora

'Pogodi ovaj broj. Program prikazuje savjet za svaki uneseni broj.

' "više ili manje".

Poduzorak8()

Randomize Timer ‘ inicijalizacija generatora slučajnih brojeva

Zatamni msg As String ‘ string poruke

Dim SecretNumber As Long, UserNumber As Variant

Početak: Tajni broj = Okrugli (Rnd * 1000) ‘ kompjuterski generisani broj

UserNumber = Empty ‘ broj koji je unio korisnik

Igraj

Odaberite Istina

Case IsEmpty(UserNumber): msg = "Molimo unesite broj"

Case UserNumber > SecretNumber: msg = "Previše!"

Broj korisnika slučaja< SecretNumber: msg = “Слишком мало!”

Kraj Odaberite

UserNumber = InputBox(prompt:=msg, Title:=”Pogodi broj”)

Loop while UserNumber<>tajni broj

' pregled

Ako MsgBox("Želite li ponovo igrati?", vbYesNo + vbQuestion, "Pogodili ste dobro!") = vbYes Onda

Idi na početak

End If

end sub

Uradi do … petlja i uradi … petlja do petlje su inverzije prethodno razmatranih uslovnih petlji. Općenito, oni rade slično, osim što se tijelo petlje izvršava pod lažnim uvjetom (tj.<условие>=False). Format petlje Do Until ... je:

Do Until<условие> <блок операторов>petlja

Format petlje Do… Loop Until je:

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

Loop Until<условие>

Praktični zadatak:Prepišite programe u Listings 10 i 11 koristeći naredbe obrnute petlje.

Dok petlja ... Wend također se odnosi na uvjetne petlje. Ova izjava u potpunosti odgovara strukturi Do While ... petlje. Format petlje While … Wend je:

Dok<условие>

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

Wend

Karakteristična karakteristika ove izjave je nemogućnost prinudnog prekida (prekidanja) tela petlje (naredba Exit Do ne radi u petlji While ... Wend).

Prekid petlje

Naredba Exit se koristi za završetak iteracije i izlazak iz petlje. Ova izjava je primjenjiva u bilo kojoj cikličnoj strukturi, osim While ... Wend. Opća sintaksa za korištenje Exit-a za prekid petlje je:

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

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

Izađi (Za | Uradi)

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

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

Kada se izvrši naredba Exit, petlja se prekida i kontrola se prenosi na naredbu nakon naredbe<конец_цикла>. Tijelo petlje može sadržavati više naredbi Exit.

Listing 4. Prisilni izlaz iz petlje

Poduzorak9()

Za i = 1 do 10000000

Ako je i = 10, onda Exit For ' izlazi iz petlje kada brojač dostigne 10

Sljedeći

Sintaksa operatora:

ZaCounter= Počni ToKraj[korakKorak]

Izjava_Blok

SljedećiCounter

Ovdje je označeno:

Za za (obavezna VB ključna riječ);

To prije (obavezna VB ključna riječ);

Izjava_Blok poziva jedan ili više operatera tijelo ciklusa;

Counter - cjelobrojna varijabla koja broji broj ciklusa koji će se izvršiti;

Početak, kraj - početne i konačne vrijednosti brojača;

korak korak (ključna riječ VB);

Korak - korak promjene brojača; može biti negativan; parametar je opcioni, jer ako je korak 1, možete Step Korak niže;

Sljedeće - sljedeće (obavezna VB ključna riječ, kraj unosa izraza petlje).

Protuvrijednost (Početak, Kraj) može biti numeričke konstante ili varijable cjelobrojnog ili realnog tipa, mogu biti negativni ili pozitivni brojevi. Da bi se tijelo petlje izvršilo barem jednom, mora biti Početak ≤ ​​Kraj, ako Korak> 0, i Početak ≥ Kraj, ako Korak< 0. Čim se to ispostavi Counter>Kraj ( ako Počni< Конец), završava se izvođenje petlje. Ako a Početak =kraj, petlja će se izvršiti jednom;

Primjer 9.1 .Evaluacija funkcijeY = 2 – 1.5 sinxkada se X mijenja u koracima od 0,2 u rasponu .

Fragment programa za izračunavanje Y i izlaz argumenta X i funkcije Y:

Za X = 0 do 2.4 Korak 0.2

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

Da biste razumjeli kako ova petlja funkcionira, evo programa za sličnu petlju kreiranu pomoću operateridi, oznake, operatorAkoOnda.

M1:X=X+0,2

Ako je X<= 2.4 Then

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

Hajde da analiziramo kako ovaj program radi. Prvi proračun Y je nestandardan, takoreći, ispada iz petlje. Petlja počinje nakon prvog prijenosa kontrole GoToM1 na oznaku M1. U redu označenom sa M1, argument X se povećava za korak od 0,2 i odmah se provjerava da li nova vrijednost X ne prelazi konačnu vrijednost 2.4. Ako ne premaši, onda se izračunavanje Y ponavlja sa ovim novim X. Zatim se ponovo izvršava operator GoToM1 - prenos kontrole na liniju sa oznakom M1. Ova ponavljanja (ciklusi) izračunavanja Y će se završiti čim X pređe 2,4.

Sada je program If uporediv sa petljom For…Next.

Za X = 0 do 2.4 Korak 0.2

zamjenjuje dva reda

M1:X=X+0,2

Ako je X<= 2.4 Then

To su posljednje dvije linije koda koje se izvršavaju u For petlji, ali mi to ne vidimo. Kodirali smo ih nizom cFor... Kodna linija GoTo M1 je kodirana riječju Next X (doslovno: sljedeći X). Ovo rezultira kompaktnim dizajnom.

Kada koristite petlju For…Next, morate naučiti kako koristiti brojač petlje prilikom rješavanja različitih problema. Da biste shvatili kako možete koristiti brojač za rješavanje problema, morate analizirati iskaz problema, pronaći obrasce promjene nekih parametara problema.

Primjer 9.2 . Određivanje zbira elemenata niza: .

Fragment programa:

S = 0 'S je zbir serije

Za i = 1 do 16, brojač i je imenilac razlomka

S = S + 1/i ‘ zbroj akumulacije

Print "S="; S ‘ izlaz sume S u formu

Za svaku vrijednost brojača i, izraz 1/i sekvencijalno formira elemente niza, počevši od 1.

Primjer 9.3 . Izračunavanje zbira niza elemenata
.

Fragment programa:

S = 0 'S je zbir serije

Za i = 1 do 18 ‘ brojač i - brojilac

S = S + i/(i + 1) ‘ imenilac je veći od brojnika za 1

Print "S="; S ‘ izlaz sume S u formu

Primjer 9.4 . Obračun sume: 5 + 8 + 11 + ... + 32 + 35

Fragment programa:

S = 0 'S je zbir serije

Za i = 5 do 35, korak 3 ‘ dobijte aritmetiku _

progresija sa nazivnikom 3

Print "S="; S

Primjer 9.5. Izračunavanje sume za dati x:

Analiza zadatka pokazuje da se stepen na X mijenja od 1 do 10. U tom slučaju je brojilac u koeficijentu na X veći od stepena za 1, a imenilac za 2. Vrijednost stepena će se formirati koristeći brojač i. Tada možete napisati sljedeći program (fragment):

S = 1 'S je zbir niza

Za i = 1 do 10’ kao brojač i, stepen se menja na X

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

Print "S="; S

CiklusiZaSljedećikoristi se uulaz, izlaz iobrada niza .

Primjer 9.6. Unos i izlaz vrijednosti elemenata niza B(N).

Fragment programa:

‘ Izostavite dodjelu vrijednosti N varijabli, _

uneseno na formular u tekstualno polje txtN:

B(i) = InputBox("Unesite element B(" & i & ")", _

"Ulazni niz B(" & N & ")"))

print " "; B(i);

Funkcija InputBox() prikazuje dijaloški okvir sa dugmetom za zatvaranje, datom porukom, poljem za unos, dugmadima uredu,Otkaži, zaglavlje (ili bez njega). Ako se unese broj 12 - veličina niza N, tada će u našem primjeru, pri prvom pojavljivanju, ovaj prozor izgledati ovako:

Kao što vidite, poruka Unesite element B(1) traži od vas da unesete vrijednost 1. elementa u okvir za tekst. Ovaj prozor će se pojaviti 12 puta jer niz sadrži 12 elemenata. Ovo slijedi iz zaglavlja obrasca. Indeks elementa B(i) u promptu će varirati od 1 do 12.

Ako je potrebno prikazati samo vrijednosti elemenata niza B(N) na obrascu, tada će se tijelo petlje sastojati od jedne izjave:

Pregledanje elemenata niza da bi se izvršila neka radnja nad njima se takođe dešava pomoću operatora petlje For…Next.

Hajde da donesemo primjeri obrade jednodimenzionalnih nizova.

Primjer 9.7 . Određivanje maksimalnog elementa u nizu B(M).

Isključujući unos početnih podataka i izlaz rezultata, ukratko opisujemo algoritam:

    Deklarismo varijablu Bmax u koju ćemo unijeti vrijednost prvog elementa niza i varijablu Imax kojoj ćemo dodijeliti 1 - indeks prvog elementa niza.

    U petlji, koristeći For…Next operator, pregledavamo sve elemente niza, počevši od 2. Koristeći If…Then operator, upoređujemo njihove vrijednosti sa vrijednošću pohranjenom u varijabli Bmax.

    Ako se ispostavi da je vrijednost elementa niza veća od Bmax, tada se Bmax dodjeljuje vrijednost ovog elementa, a vrijednost Imax je indeks ovog elementa niza.

Nakon završetka petlje, varijabla Bmax će sadržavati vrijednost maksimalnog elementa, a Imax će sadržavati njegov indeks (broj).

Program ovog dijela algoritma.

Bmax = B(1): Imax = 1

Ako je B(i) > Bmax Tada je Bmax = B(i): Imax = i

Primjer 9.8. Određivanje sume, proizvoda i broja pozitivnih elemenata nizaD(M).

Varijable: S, P, K su zbir, proizvod i broj pozitivnih elemenata, redom.

Algoritam ova definicija:

    Varijablama S i K dodjeljujemo nulu, varijabli P dodjeljujemo 1. Po pravilu, varijable kod kojih je suma akumulirana, ovdje su S i k, se vraćaju na nulu prije ciklusa, a 1 se dodjeljuje varijable u kojima se proizvod izračunava.

    Koristeći For…Next petlju, prolazimo kroz sve elemente niza i provjeravamo da li su pozitivni (D(i) > 0).

    Ako se ispostavi da je element pozitivan, tada njegovu vrijednost dodajemo vrijednosti sume S i pohranjujemo novi zbir u istu varijablu. Varijablu P množimo pozitivnom vrijednošću elementa i pohranjujemo je u varijablu P. I dodajemo 1 varijabli K i spremamo novu vrijednost u istu varijablu

Program ovaj dio algoritma izgleda ovako:

S=0: P=1: K=0

Ako je D(i) > 0 Onda

S = S + D(i) ‘ ovako se akumulira suma _

pozitivne vrijednosti elemenata niza D(i)

P = P*D(i) ‘ definicija proizvoda pozitivnog

‘ elementi niza

K = K + 1 ‘ ovaj operator se zove COUNTER, evo ga

‘ određuje broj pozitivnih elemenata niza

Primjer 9.9. Određivanje zbira, proizvoda, broja i prosjeka neparnih elemenata nizaD(M).

Predstavljamo fragment programa takve definicije.

S=0: P=1: K=0

Ako je D(i) Mod 2<>0 Onda

Ssr = S/k ‘ izračunavanje srednje vrijednosti neparnih elemenata

Uporedite ovaj programski fragment sa programom iz primjera 9.8. Ovaj program gotovo u potpunosti ponavlja prethodni. Promijenjen je samo uvjet u naredbi If. Uvjet D(i) Mod 2<>0 znači da tražimo elemente niza D(i) koji nisu ni djeljivi sa 2, odnosno neparne elemente. Ako provjerimo uvjet D(i) Mod 2 = 0, tada ćemo odabrati parne elemente niza.

Kao što znate, divizija Mod daje kao rezultat ostatak dijeljenja u cijelim brojevima. Na primjer, nakon izvršenja operatora d= 34Mod4, varijabla d će biti jednaka 2. Stoga, da odaberete elemente niza koji su višestruki od 4, morate provjeriti uvjet D(i) Mod 4 = 0. Uslov će biti sličan ako tražimo elemente koji su višestruki od drugih brojeva. Umjesto 4, ovi drugi brojevi će biti upisani.

Primjer 9.10. Pisanje elemenata nizaR(N) djeljiv sa 5 u drugi niz i prikazuje novi niz na obrascu.

Drugi niz će biti označen, na primjer, sa R5(N). Treba pretpostaviti da je veličina ovog novog niza ista kao i originalnog, jer u graničnom slučaju svi elementi mogu biti višestruki od 5.

Algoritam zadatka:

    Resetujemo brojač k. Koristeći operator petlje For…Next, pregledavamo sve elemente R(N) niza.

    Provjeravamo svaki element za višestrukost od 5 koristeći If…Then operator i dijeljenje elementa niza Mod.

    Ako je element višestruki od 5, onda koristeći brojač kao k=k+ 1, formiramo indekse niza R5(N), počevši od 1, i upisujemo ga u ovaj drugi niz –R5(N).

    Ako je k različit od nule, ispišite nizR5() u obrazac.

    Ako je k jednako nuli, ispisujemo: "Nema elemenata koji su višestruki od 5".

Fragment programa:

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

Ako je k<>0 Onda

Odštampaj “Nema elemenata djeljivih sa 5”

Petlje mogu biti ugniježđene unutar drugih petlji.

Hajde da demonstriramo rad ugniježđene petlje . U nastavku, program organizira izlaz vrijednosti brojača ciklusa i, j i k. Iz izlaza i,j,k postaje jasno kako se izvode ugniježđene petlje.

Privatni sub frmCycle_DblClick()

ScaleMode = 4 'jedinice - simboli

Za i = 1 do 3 ‘spoljna petlja

Ispiši "i = "; i;

Za j = 1 do 4 ‘1. ugniježđena petlja

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

Print "j="; j;

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

Za k = 1 do 5 ‘2. ugniježđena petlja

Prikazani obrazac (slika 1) prikazuje rezultate prikaza brojača sve tri petlje: vanjske petlje - brojač i, prve ugniježđene petlje - counterj i druge, najunutrašnje petlje - counterk. kao što vidimo, "najsporiji" brojač vanjske petlje(poi), i „najbrži“ je brojač najunutarnje petlje (premak).

Program se izvršava nakon dvostrukog klika na frmCicli formu lijevom tipkom miša.

CurrentX, CurrentY - svojstva forme koja specificiraju koordinate X, Y početne tačke za izlaz informacija metodom Print (pogledajte lokaciju X i Y osa na obrascu na slici 1).

TextWidth() je funkcija koja vraća širinu teksta danog u funkciji kao argument u dvostrukim navodnicima.

Ugniježđene petlje se koriste prilikom obrade dvodimenzionalnih nizova (matrica). Ali u nekim zadacima, isključujući unos i izlaz elemenata dvodimenzionalnog niza, možete se ograničiti na jedan ciklus. Razmotrite neke primjere matričnog programiranja.

Primjer 9.11. Unos i izlaz matrice (dvodimenzionalni niz) cijelih brojevaintA(N).

Možete unijeti matricu po redovima i po kolonama . Lakše je - red po red, ako će se izlaz elemenata niza u formu programirati odmah nakon njihovog unosa.

Matrični ulaz i izlazred po red - fragment 1.

Dim M kao cijeli broj, N kao cijeli broj, i Kao cijeli broj, j kao cijeli broj

Dim intA() As Integer ‘ deklariše dinamički niz

M = Val(txtN.Text) ‘ M je broj redova

N = Val(txtN.Text) ‘ N je broj kolona

ReDim intA(M, N) As Integer ‘ redefinirajte niz

Za i = 1 To M ‘ i zadržat će svoju vrijednost do kraja

'ugniježđena petlja na j neće biti izvršena

print " "; intA(i,j); ‘ izlaz red po red

Ispiši ‘ skoči na početak novog reda

Za unos matrice po kolonama potrebno je napraviti vanjsku petlju na j (postavlja brojeve kolona), a unutrašnju petlju na i (postavlja brojeve redova).

Matrični ulaz i izlazpo kolonama fragment 2.

PrY = 2500: CurrentY = PrY ‘ PrY postavlja Y koordinate početka

‘ ispisati prvi element svake kolone na obrascu

Za j = 1 do N ‘ j će zadržati svoju vrijednost do kraja

'ugniježđena petlja na i neće biti izvršena

intA (i, j) = InputBox("Unesite element intA(" & i & "," & j & ")", _

"Matrični ulaz intA(" & M & "," & N & ")")

Print Tab(6 * j); intA(i, j) ‘ prikaz po kolonama

CurrentY = PrY ' za prikaz prvog elementa

' sledeća kolona

Ovaj drugi fragment programa ne ponavlja prvih 5 redova iz prvog fragmenta. Funkcija Tab(6 * j) postavlja početak izlaza na liniji (u znakovima) počevši od lijevog ruba obrasca. PrY koordinata ovdje je 2500 twips-a, ali možete odabrati drugu vrijednost.

Primjer 9.12 . Redoslijed vrijednosti elemenata nizaV(N) Uzlazno.

Postoji nekoliko algoritama za naručivanje nizova. Evo jednog od njih: koristeći ugniježđene petljeZaSljedećiodaberite elemente od prvog do pretposljednjeg i uporedite svaki od njih sa sljedećim elementima; ako se ispostavi da je sljedeći element manji od odabranog, zamijenite ih.

Fragment programa koji implementira ovaj algoritam:

Za i = 1 do N - 1

Za j = i + 1 do N

Ako je V(j)< V(i) Then P = V(i): V(i) = V(j): V(j) = P

Hajde da objasnimo ovaj fragment programa.

Uz pomoć vanjske petlje sa brojačem i biramo element V (i) za poređenje sa sljedećim elementima. Unutrašnja petlja sa brojačem j bira sledeće elemente V(j) za poređenje. Početna vrijednost j je i + 1. Ovo je prvi element sljedećeg.

Da bismo razmijenili vrijednosti elemenata V(i) i V(j), uvodimo neku varijablu P, u koju privremeno „sakrijemo“ vrijednost jednog od elemenata niza (u programu je to V(i )). Tada se elementu V(i) dodjeljuje vrijednost elementa V(j), a elementu V(j) dodjeljuje se vrijednost V(i), koja je pohranjena u varijablu P. Ako “sakrijemo” vrijednost V(j) u P, tada će kod razmjene vrijednosti biti sljedeći: P = V(j): V(j) = V(i): V(i) = P. rezultat se neće promijeniti.

To sortiraj niz u opadajućem redosledu, dovoljno je zapisati uslov za verifikaciju u obliku V(j) > V(i), odnosno promeniti znak nejednakosti u drugi.

Ako niz nije numerički, već niz, a elementi niza su popunjeni prezimenima, onda pomoću programa iz primjera 9.12 možete sortirati listu prezimena po abecednom redu. Činjenica je da su za slova abecede koja se koriste u kompjuteru tačne nejednakosti: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

Primjer 9.13 . Izračunavanje zbira pozitivnih elemenata za neparne stupce matriceF(M, N) i prikaz iznosa na obrascu.

Programski algoritam:

    Koristeći vanjsku petlju s korakom od 2, formiramo indeks neparnih stupaca matrice, počevši od prvog stupca.

    Resetujemo zbir S, u kojem će se akumulirati zbir pozitivnih elemenata.

    U unutrašnjoj petlji provjeravamo predznak elementa niza.

    Ako je element niza pozitivan (> 0), izračunajte zbir S.

    Nakon završetka unutrašnje petlje, izbacite zbir S u obrazac.

Fragment programe:

Za j = 1 do N korak 2

Ako je F(i, j) > 0 Tada je S = S + F(i, j)

Štampati “Zbir kolone”; j; ":"; S’ j je broj kolone!

Ugniježđene petlje vam omogućavaju organiziranje nabrajanje opcija i rješavaju probleme koji se ne mogu riješiti analitički. Kao rezultat nabrajanja dobijaju se rješenja među kojima se bira jedno ili više njih koji ispunjavaju uvjet problema.

Primjer 9.14. Ima 1801 rubalja. Koliko možete kupiti čokolade za 31 rublju. i rolnu za 18 rubalja kako biste u potpunosti potrošili sav novac.

Program:

Iznos = 1801

Sve čokolade = Zbroj \ 31: Sve lepinje = Zbroj \ 18

Za i = 1 Za sve čokolade

Za j = 1 To AllBulki

Cijena = i * 31 + j * 18 ‘ukupna kupovna cijena

Ako je cijena = 1801 Onda

Štampa "Čokolada: "; i; Tab(19); "Bulok: "; j

Hajde da objasnimo program u kojem koristimo varijable nazvane na ruskom jeziku.

Prvo odredimo koji je maksimalan broj samo čokolada ili samo kiflica koji se mogu kupiti za cijeli iznos. Dobivene vrijednosti VseChocolate i VseBulki koriste se za ograničavanje broja pretraga brojem čokolada i peciva. Za svaku vrijednost broja čokolada (i) i broja peciva (j) utvrđujemo ukupnu cijenu za njihovu kupovinu. Ako je izračunata cijena 1801, tada je odabrana opcija jedno od rješenja problema.

Funkcija Tab() određuje na kojoj poziciji od ruba obrasca će biti prikazane informacije koje slijede ovu funkciju. Ako Tab(19), onda sa 19. pozicije.

Program prikazuje 3 moguće opcije kupovine:

Čokolada 7, rolnice 88

Čokolade 25, rolnice 57

Čokolade 43, kiflice 26

Ako želite dati nedvosmislen odgovor, morate formulirati dodatni uvjet. Na primjer, „kupljeno je manje lepinja nego čokolada“. Tada bi jedino rješenje bila 3. opcija.

Postoje mnogi matematički problemi koji se jednostavno rješavaju ponavljanjem kroz programiranje ugniježđene petlje.