Buclă pentru descrierea vba excel. „Instrucțiuni de buclă VBA

Buclele vă permit să executați una sau mai multe linii de cod de mai multe ori. VBA acceptă următoarele bucle:

Pentru... Următorul Pentru fiecare... Următorul Do... Buclă

Construcția Pentru. . . Următorul. Când numărul de repetări este cunoscut în prealabil, se folosește o buclă For. . . Următorul. O buclă For folosește o variabilă numită variabilă de buclă sau contor de buclă care crește sau decrește cu o cantitate specificată de fiecare dată când bucla se repetă. Sintaxa pentru acest construct este:

Pentru contor = start Pentru a termina Instrucțiunile următoare

Parametrii contor (contor), start (start ciclu), sfârşit (sfârşit ciclu) şi increment (increment) sunt numerici.

Notă. Parametrul de increment poate fi pozitiv sau negativ. Dacă este pozitiv, parametrul start trebuie să fie mai mic sau egal cu parametrul final, altfel bucla nu se va executa. Dacă parametrul de increment este negativ, atunci parametrul de început trebuie să fie mai mare sau egal cu valoarea parametrului de final pentru a executa corpul buclei. Dacă parametrul Step nu este setat, atunci valoarea implicită a parametrului de increment este 1.

VBA execută bucla For în următoarea secvență:

1. Setează contorul variabilelor buclei să înceapă.

2. Compară valoarea contorului variabilei buclei și valoarea parametrului final. Dacă variabila contor este mai mare, VBA încheie bucla. (Dacă valoarea parametrului de increment este negativă, atunci VBA încheie bucla dacă valoarea contorului variabilei buclei este mai mică decât valoarea parametrului final.)

3. Execută instrucțiunile instrucțiunilor bucle body.

4. Mărește valoarea contorului variabilei buclei cu 1, sau cu valoarea parametrului de increment, dacă este dat unul.

5. Repetați pașii de la 2 la 4.

Luați în considerare un exemplu: Calculați valoarea funcției f(t)

dat a, b, n, dacă t se schimbă de la a la b în trepte de Dt=(b-a)/(n-1).

Sub example3() Dim f() As Single Dim a As Single, b As Single, t As Single, dt As Single Dim i Ca Integer, n As Integer Call read("a1", a): Call read("b1" , b): Apel read("c1", n) ReDim f(1 To n - 1) dt = (b - a) / (n - 1) : t = a Call out("a2", "i") : Call out("b2", "t"): Call out("c2", "f(t)") Pentru i = 1 To n - 1 t = t + dt Dacă t<= -1 Then f(i) = -1 ElseIf t >1 Atunci f(i) = 1 Else f(i) = t End If Call out("a" & (2 + i), i): Call out("b" & (2 + i), t): Apel out("c" & (2 + i), f(i)) Next i End Sub

Construcția Pentru fiecare. . . Următorul

Pentru fiecare buclă. . . Următorul este ca o buclă For. . . Apoi, dar repetă un grup de instrucțiuni pentru fiecare element dintr-un set de obiecte sau dintr-o matrice, în loc să repete instrucțiunile de un număr dat de ori. Este util mai ales atunci când nu știi câte elemente sunt în set.

Sintaxa constructului de buclă For Each. . . Următorul este:

Pentru fiecare element În instrucțiuni de grup Următorul element

Fiți conștienți de următoarele restricții atunci când utilizați o buclă For Each. . . Următorul:

Pentru seturi, parametrul elementului poate fi doar o variabilă de tip variantă, o variabilă generală de tip obiect sau un obiect listat în Object Browser

Pentru matrice, parametrul element poate fi doar o variabilă de tip Variant

Nu puteți utiliza o buclă For Each. . . Urmează o matrice de tip definit de utilizator deoarece o variabilă de tip variantă nu poate conține o valoare de tip definit de utilizator

Faceți... Design bucle

Bucla Do este folosită pentru a executa un bloc de instrucțiuni de un număr nelimitat de ori. Există mai multe variante ale constructului Do. . . Buclă, dar fiecare dintre ele evaluează o expresie condiționată pentru a determina când să iasă din buclă. Ca și în cazul constructului If. . . Atunci condiția trebuie să fie o valoare sau o expresie care se evaluează la Fals (zero) sau True (diferit de zero).

În construcția următoare, Do . . . Instrucțiunile buclei sunt executate atâta timp cât valoarea condiției este True (True):

Do While Condition Loop declarații

La executarea acestei bucle, VBA verifică mai întâi condiția. Dacă condiția este False, omite toate instrucțiunile buclei. Dacă este adevărat, VBA execută instrucțiunile buclei, revine la instrucțiunea Do While din nou și testează din nou condiția.

Prin urmare, bucla reprezentată de acest construct poate fi executată de orice număr de ori atâta timp cât valoarea condiției nu este zero sau adevărată. Rețineți că instrucțiunile corpului buclei nu sunt niciodată executate dacă prima dată când condiția este verificată, se dovedește a fi falsă (False).

Luați în considerare un exemplu: Calculați suma unei serii

cu o precizie dată.

Sub example4() Dim e As Single, x As Single, s As Single Dim m As Single, p As Single, i As Single Call read("a1", x): Apel read("b1", e) s = 0 : i = 1: m = 1: p = -1 Call out("a2", "i"): Call out("b2", "m"): Call out("c2", "s") Do While 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

O altă variantă a constructului Do. . . Loop execută mai întâi instrucțiunile corpului buclei și apoi verifică condiția după fiecare execuție. Această variație asigură că instrucțiunile din corpul buclei sunt executate cel puțin o dată:

Efectuați declarațiile Loop While condiție

Celelalte două variante ale construcției buclei sunt similare cu cele anterioare, cu excepția faptului că bucla este executată în timp ce condiția este falsă (False):

Bucla nu este executată deloc sau este executată de mai multe ori:

Faceți până la condiție

Instrucțiuni de buclă

Bucla este executată cel puțin o dată:

operatori

Loop Până la stare

7.2 Bucle imbricate.

Puteți pune structuri de control în interiorul altor structuri de control (de exemplu, un If... Then block în interiorul unei bucle For... Next). Se spune că o structură de control plasată în interiorul unei alte structuri de control este imbricată.

Adâncimea de imbricare a structurilor de control în VBA nu este limitată. Pentru a îmbunătăți lizibilitatea codului, este o practică obișnuită să mutați corpul unui construct de decizie sau al unei bucle în program atunci când sunt utilizate structuri de control imbricate.

Când imbricați una sau mai multe alte bucle într-o buclă, se vorbește de bucle imbricate, care fac distincția între buclele exterioare (înglobate) și cele interioare (imbricate).

Luați în considerare un exemplu de însumare a elementelor Aij ale matricei A(n,m) rând cu rând.

Sub example5() 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): Apel read("b1", m ) ReDim a(1 To n, 1 To m), s(1 To n) "Citește matricea Pentru i = 1 To n Pentru j = 1 To m Apelați readcell(i + 1, j, a(i, j)) Următorul j Următorul i „Calcul Pentru i = 1 La n s(i) = 0 Pentru j = 1 La m s(i) = s(i) + a(i, j) Următorul j Apelați celula(i + 1, m + 1) , s(i)) Next i End Sub

Rețineți că primul Next închide bucla For interioară, iar ultimul Next închide bucla For externă. În mod similar, pentru instrucțiunile If imbricate, instrucțiunile End If sunt aplicate automat pentru a închide cea mai apropiată instrucțiune If. Structuri imbricate Do . . . Buclele funcționează într-un mod similar: cea mai îndepărtată instrucțiune Loop corespunde celei mai îndepărtate instrucțiuni Do.

La introducerea/ieșirea elementelor unei matrice bidimensionale pe o foaie de lucru Microsoft Excel, este convenabil să utilizați proceduri personalizate de intrare/ieșire:

Sub readcell(i Ca Integer, j Ca Integer, val Ca Varianta) val = Leaf1.Cells(i, j).Value End Sub Sub Outcell(i Ca Integer, j Ca Integer, val Ca Varianta) Leaf1.Cells(i, j).Valoare = val End Sub

unde I este numărul rândului, j este numărul coloanei foii de lucru.

Părăsirea structurilor de control

Instrucțiunea Exit vă permite să ieșiți direct dintr-o buclă For, o buclă Do, o procedură Sub sau o procedură Function. Sintaxa instrucțiunii Exit este simplă:

For counter = start To end [bloc de instrucțiuni] [bloc de instrucțiuni] Next Do [(While | Until) condiție] [bloc de instrucțiuni] [bloc de instrucțiuni] Buclă

Exit For în interiorul unei bucle For și Exit Do în interiorul unei bucle Do pot apărea de orice număr de ori.

Instrucțiunea Exit Do funcționează cu toate variațiile sintaxei buclei Do.

Instrucțiunile Exit For și Exit Do sunt folosite atunci când este necesar să se încheie imediat bucla, fără a continua iterații ulterioare sau fără a aștepta execuția unui bloc de instrucțiuni în corpul buclei.

Când utilizați instrucțiunea Exit pentru a ieși dintr-o buclă, valorile variabilei buclei depind de modul în care se termină bucla:

Când bucla se termină normal, valoarea variabilei buclei este cu o mai mare decât limita superioară a numărului de bucle

Când bucla se termină prematur, variabila buclă își păstrează valoarea pe care a primit-o, ținând cont de regulile uzuale

Când bucla se termină la sfârșitul setului, variabila buclă este Nimic dacă este o variabilă obiect sau goală dacă este o Variantă

Ultima actualizare: 30.10.2015

Un alt tip de structuri de control sunt buclele. VB.NET folosește mai multe tipuri de bucle.

Pentru... bucla următoare

Această buclă este executată de un anumit număr de ori, iar acest număr este stabilit de contor:

Pentru i As Integer = 1 To 9 Console.WriteLine("Pătratul lui (0) este (1)", i, i * i) Următorul

Aici variabila i joacă rolul unui contor. După cuvânt La punem valoarea maximă a contorului. Cu fiecare ciclu, valoarea contorului este crescută cu unu. Și această valoare este comparată cu valoarea de după La. Dacă aceste două valori sunt egale, atunci bucla se termină.

Când lucrăm cu bucle, putem crește valoarea contorului cu fiecare trecere, nu numai cu una, ci cu orice număr în general. Pentru a face acest lucru, trebuie fie să utilizați cuvântul cheie Etapa iar după aceasta, specificați pasul buclei prin care valoarea contorului va crește sau puteți crește contorul direct în buclă:

Pentru i Ca întreg = 1 până la -9 Pasul -1 Pentru j Ca întreg = 1 până la 9 Console.WriteLine("Produsul lui i și j este (0)", i * j) j += 1 Următorul Următorul

Rețineți că o valoare negativă este aleasă ca pas în prima buclă, iar valoarea contorului scade cu una cu fiecare trecere. În bucla interioară, contorul j este incrementat cu 2 la fiecare iterație, deoarece se incrementează cu unul în mod implicit și, de asemenea, îl incrementăm în mod explicit în buclă cu unul. Ca urmare, bucla interioară funcționează de cinci ori, iar cea exterioară de nouă, adică de fapt, se obțin 45 de cicluri.

Pentru fiecare... buclă următoare

Bucla For Each iterează peste elementele dintr-un anumit grup, cum ar fi o matrice sau o colecție. Să presupunem că avem o matrice de tip Integer și trebuie să inițializam această matrice cu valori aleatoare și apoi să afișăm toate elementele sale pe ecran:

"Creați o matrice de cinci numere Dim nums(4) As Integer Dim r As New Random() "inițializați tabloul pentru i Ca Integer = 0 To nums.Lungime - 1 nums(i) = r.Next(100) Next " Afișează matrice de elemente pentru fiecare i ca întreg în numere Console.Write("(0) ", i) Următorul

În instrucțiunea For Each, mai întâi specificăm o variabilă care va lua valorile elementelor matricei. Și după cuvântul cheie În Specificați grupul în care doriți să sortați toate elementele.

buclă while

Într-o buclă While, se execută atâta timp cât este îndeplinită o anumită condiție, specificată după cuvântul While:

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

Faceți bucla

O buclă Do, ca o buclă While, se execută atâta timp cât este îndeplinită o anumită condiție. Cu toate acestea, are diferite forme. Deci, în exemplul următor, condiția este verificată mai întâi, iar apoi blocul de cod definit în buclă este executat:

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

În acest caz, bucla este executată în timp ce valoarea lui j este mai mare decât zero. Dar există o altă intrare în care cuvântul While este folosit în locul cuvântului Pana cand, iar bucla este executată până când este îndeplinită o anumită condiție, adică până când valoarea lui j devine mai mică decât zero:

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

Dacă inițial condiția specificată în buclă este falsă, atunci bucla nu va funcționa. Dar putem defini o verificare la sfârșitul buclei și astfel bucla noastră va rula cel puțin o dată:

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

Declarații Continuare și Ieșire

Adesea este nevoie să nu așteptați sfârșitul ciclului, ci să părăsiți imediat ciclul, dacă este îndeplinită o anumită condiție. Pentru a face acest lucru, utilizați operatorul Ieșire, urmat de tipul de buclă din care să ieșiți, de exemplu, Exit Do (Exit While) :

Dim r As New Random() Dim num Ca Integer = r.Next(100) Pentru i Ca Integer = 0 La 100 num -= 1 Dacă num< 50 Then Exit For Next Console.WriteLine(num)

Există o altă sarcină - să ieși nu din buclă, ci din trecerea sau iterația curentă și să mergi la următoarea. Pentru a face acest lucru, utilizați instrucțiunea Continue, după care indică tipul de buclă din care se face ieșirea, de exemplu, Continue While:

Dim r As New Random() Dim num Ca Integer = r.Next(100) Pentru i Ca Integer = 0 To 10 num -= 7 Dacă num< 50 AndAlso num >25 Apoi continuați pentru End If Console.WriteLine(num) Next

În acest caz, în fiecare trecere a buclei, scădem numărul 7 din num și apoi vedem dacă numărul num aparține intervalului de la 25 la 50. Și dacă o face, trecem la o nouă iterație a buclei și dacă nu, îl afișăm pe ecran.

Lucrări de laborator privind bazele programării

2.1. Tabelarea funcțiilor reprezentate analitic
și convergând în apropiere

Obiectiv

· Consolidarea cunoștințelor teoretice privind bazele organizării structurilor ramificate și ciclice.

· Dobândirea deprinderilor practice de programare folosind structuri ramificate și ciclice în sistemul Visual Basic.

Există trei tipuri de instrucțiuni bucle în VB:

ciclu de numărare: Pentru...To...Next

Bucle cu precondiții: Do While...Loop, Do Until...Loop, While...WEnd

Bucle cu postcondiții: Do...Loop While, Do...Loop Until.

Ciclu de numărare - vă permite să parcurgeți un set de instrucțiuni de un număr specificat de ori. Sintaxa sa este următoarea:

Pentru tejghea = start La sfarsit

[operatori]

[operatori]

Următorul[ tejghea]

Parametru tejghea este o variabilă numerică (întreg, real sau Data, Variant, Currency) care este incrementată automat după fiecare iterație. Valoarea initiala tejghea egal cu parametrul Start, iar parametrul final este sfarsit. Dacă nu este specificat, atunci pasul este considerat egal cu 1, valoarea pasului poate fi modificată. Poate fi un număr pozitiv sau negativ.

Există patru constructe sintactice pentru Do….Loop:

Instrucțiunile dintre cuvintele cheie Do...Loop sunt executate de un număr specificat de ori, în funcție de condiție. De exemplu, în următorul fragment de program, când C = 100, condiția va fi îndeplinită și bucla va intra. În interiorul buclei se apelează procedura și valoarea lui C scade cu 1. Apoi se verifică din nou condiția (C > 0) și se execută din nou instrucțiunile buclei (se vor executa de 100 de ori în total), până la C = 0. Când condiția C > 0 devine falsă și bucla se oprește.

Faceți în timp ce C > 0

Același fragment de program executat folosind o buclă de precondiție în sintaxa 2:

În acest caz, bucla este executată în timp ce condiția este False, spre deosebire de cazul precedent, adică continuă inainte deîndeplinirea condiției C = 0.

Declarațiile buclă din sintaxa 3 și 4 sunt foarte asemănătoare cu primele două, cu excepția faptului că condiția nu este evaluată până când bucla s-a executat cel puțin o dată.

În sintaxele acestor bucle, puteți utiliza operatorii de ieșire necondiționată din bucla Exit For și Exit Do, care vă permit să transferați controlul operatorului din spatele buclei. De exemplu, în următorul fragment de program, dacă valoarea inițială a lui C este >50, atunci bucla se va opri imediat.



Faceți până la C<= 0

MsgBox „Începe. valoarea este mai mare decât cea permisă”, „Eroare de intrare”

Bucla While...Wend a fost folosită în versiunile timpurii ale Visual Basic. Sintaxa sa este următoarea:

In timp ce<условие>

<Операторы>

Spre deosebire de Do..Loop, bucla While ..Wend nu are o a doua opțiune, în care testul de condiție este efectuat la sfârșitul buclei. În plus, nu are o instrucțiune de ieșire în buclă precum Exit Do.

VBA. Organizarea ciclurilor.

Instrucțiunile de buclă sunt folosite pentru a repeta execuția unei acțiuni sau a unui grup de acțiuni de un anumit număr de ori. Numărul de repetări (iterații în buclă) poate fi predefinit sau calculat.

VBA acceptă două tipuri de constructe în buclă:

  1. Bucle cu un număr fix de repetări ( cicluri cu contor).
  2. Bucle cu un număr nedefinit de repetări ( bucle condiționate).

Pentru toate tipurile de cicluri se folosește conceptul corpul buclei A care definește un bloc de instrucțiuni cuprins între instrucțiunile de început și de sfârșit ale buclei. Fiecare repetare a declarațiilor din corpul buclei este numită repetare .

Cicluri fixe

VBA oferă două structuri de control pentru organizarea unei bucle fixe: For ... Next (o buclă cu un numărător) și For Each ... Next (o buclă cu o enumerare).

Pentru... Următoarea declarație este o buclă tipică cu un numărător care efectuează un număr dat de iterații. Sintaxa instrucțiunii For... Next este:

Pentru<счетчик> = <начЗначение>Acea<конЗначение>

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

Următorul[<счетчик>]

Un exemplu de utilizare a instrucțiunii For... Next.

Listare 1. Pentru... Următoarea declarație

OBIECTIV: Scrieți un program care primește două numere de la utilizator.

' Adaugă toate numerele din intervalul dat de acele două numere și apoi

‘ Afișează suma rezultată.

Subeșantion7()

Dim i As Integer ‘contor de bucle

Dim sStart „valoarea contorului de pornire”.

Dim sEnd ' valoarea finală a contorului

Dim sSum As Long ‘suma rezultată

sStart = InputBox("Introduceți primul număr:")

sEnd = InputBox("Introduceți al doilea număr:")

sSum = 0

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

sSum = sSum + i

Apoi eu

MsgBox „Suma numerelor de la ” & sStart & ” la ” & sEnd & ” este: ” & sSum

end sub

Pentru fiecare... instrucțiunea următoarei bucleaparține categoriei operatorilor de tip obiect, adică. se aplică în primul rând colecțiilor obiecte precum și matrice . Corpul buclei este executat de un număr fix de ori, corespunzător numărului de elemente din matrice sau colecție. Formatul declarației Pentru fiecare... Următoarea este:

Pentru fiecare<элемент>În<группа> <блок операторов>Următorul[<элемент>]

Bucle condiționate (bucle nedefinite)

Buclele condiționate sunt utilizate atunci când acțiunile repetate trebuie efectuate numai în anumite condiții. Numărul de iterații nu este definit și, în general, poate fi egal cu zero (în special, pentru bucle cu o precondiție). VBA oferă dezvoltatorilor mai multe structuri de control pentru organizarea buclelor condiționate:

  • Patru tipuri de bucle Do..Loop, care diferă prin tipul de condiție care se verifică și timpul de execuție a acestei verificări.
  • O buclă neîntreruptă While... Wend.

Do While... Loop - Tipic buclă cu precondiție. Condiția este verificată înainte ca corpul buclei să fie executat. Ciclul își continuă activitatea până când acesta<условие>este executat (adică este adevărat). Deoarece verificarea este efectuată la început, corpul buclei nu poate fi executat niciodată. Formatul buclei Do While...:

Face în timp ce<условие>

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

buclă

Lista 2. Do While... Loop

OBIECTIV: Scrieți un program care acceptă intrarea utilizatorului

„o succesiune arbitrară de numere. Intrarea trebuie încheiată

„ numai după ce suma numerelor impare introduse depășește 100.

Subeșantion8()

Dim OddSum ca număr întreg

Dim OddStr As String 'șir cu numere impare

Dim Num 'pentru a accepta numerele introduse

OddStr = "" 'inițializarea șirului de ieșire

OddSum = 0 ‘inițializarea sumei OddSum

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

Num = InputBox("Introduceți numărul: ")

Dacă (Număr Mod 2)<>0 Apoi ‘chiar paritate

OddSum = OddSum + Num „acumularea sumei numerelor impare

OddStr = OddStr & Num & ” ”

Încheiați dacă

buclă

„Ieșiți un șir cu numere impare

MsgBox prompt:=”Numere impare: ” & OddStr

end sub

Do... Instrucțiunea Loop Whiledestinat organizariibuclă cu postcondiție. Condiția este verificată după ce corpul buclei este executat cel puțin o dată. Ciclul continuă până când<условие>rămâne adevărat. Do...Loop While format:

Do<блок операторов>buclă în timp ce<условие>

Lista 3. Buclă cu postcondiție

OBIECTIV: Realizați un program pentru jocul „Ghicește numărul”. Programul ar trebui să fie aleatoriu

„ într-un mod de a genera un număr în intervalul de la 1 la 1000, utilizatorul trebuie

„Ghicește acest număr. Programul afișează un indiciu pentru fiecare număr introdus.

' "mai mult sau mai putin".

Subeșantion8()

Randomize Timer ‘ inițializarea generatorului de numere aleatorii

Dim msg As String ‘ șirul de mesaj

Dim SecretNumber As Long, UserNumber As Variant

Începe: SecretNumber = Round(Rnd * 1000) ‘ număr generat de computer

UserNumber = Gol ‘ numărul introdus de utilizator

Faceți un joc

Selectați Case True

Case IsEmpty(UserNumber): msg = "Vă rugăm să introduceți un număr"

Case UserNumber > SecretNumber: msg = „Prea multe!”

Număr de utilizator al cazului< SecretNumber: msg = “Слишком мало!”

Încheierea selectării

UserNumber = InputBox(prompt:=msg, Title:=”Ghicește numărul”)

Loop While UserNumber<>număr secret

' examinare

Dacă MsgBox(„Vrei să joci din nou?”, vbDaNu + vbÎntrebare, „Ai ghicit bine!”) = vbDa Atunci

Du-te la început

Încheiați dacă

end sub

Faceți până... Buclă și Do... Buclă până când face bucle sunt inversiuni ale buclelor condiționale considerate anterior. În general, ele funcționează similar, cu excepția faptului că corpul buclei este executat într-o condiție falsă (de ex.<условие>= Fals). Formatul buclei Do Until... este:

Face până la<условие> <блок операторов>buclă

Formatul buclei Do... Loop Until este:

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

Buclă până la<условие>

Sarcina practica:Rescrieți programele din listele 10 și 11 folosind instrucțiuni de buclă inversată.

While Loop... Wend se aplică și buclelor condiționate. Această declarație corespunde pe deplin structurii Do While... Loop. Formatul buclei While … Wend este:

In timp ce<условие>

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

Merge încet

O trăsătură distinctivă a acestei declarații este imposibilitatea de terminare (întrerupere) forțată a corpului buclei (instrucția Exit Do nu funcționează în bucla While ... Wend).

Întreruperea buclei

Instrucțiunea Exit este folosită pentru a încheia iterația și a ieși din buclă. Această afirmație este aplicabilă în orice structură ciclică, cu excepția While ... Wend. Sintaxa generală pentru utilizarea Exit pentru a întrerupe o buclă este:

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

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

Ieșire (Pentru | Faceți)

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

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

Când instrucțiunea Exit este executată, bucla este întreruptă și controlul este transferat instrucțiunii care urmează instrucțiunii<конец_цикла>. Corpul buclei poate conține mai multe instrucțiuni Exit.

Lista 4. Ieșire forțată în buclă

Subeșantion9()

Pentru i = 1 până la 10000000

Dacă i = 10, atunci Exit For ' ieși din buclă când contorul ajunge la 10

Următorul

Sintaxa operatorului:

PentruTejghea= start ToSfârşit[EtapaEtapa]

Declarație_Bloc

UrmătorulTejghea

Este marcat aici:

Pentru pentru (cuvânt cheie VB obligatoriu);

La inainte de (cuvânt cheie VB obligatoriu);

Declarație_Bloc unul sau mai mulți operatori apelați corp de ciclu;

Tejghea - o variabilă întreagă care numără numărul de cicluri de executat;

Început, sfârșit - valorile inițiale și finale ale contorului;

Etapa pas (cuvânt cheie VB);

Etapa - pas de schimbare a contorului; poate fi negativ; parametrul este opțional, deoarece dacă pasul este 1, puteți să Step Etapa inferior;

Următorul - următorul (cuvânt cheie VB obligatoriu, intrarea instrucțiunii de sfârșit de buclă).

Contravaloare (Început, Sfârșit) poate fi constantele numerice sau variabilele de tip întreg sau real, pot fi numere negative sau pozitive. Pentru ca corpul buclei să fie executat cel puțin o dată, trebuie să fie Început ≤ Sfârșit, dacă Etapa> 0 și Start ≥ Sfârșit, dacă Etapa< 0. De îndată ce se dovedește că Tejghea>Sfârşit ( dacă start< Конец), execuția buclei se încheie. În cazul în care un Start =Sfârşit, bucla va fi executată o dată;

Exemplul 9.1 .Evaluarea funcțieiY = 2 – 1.5 sinxla modificarea X în trepte de 0,2 în intervalul .

Un fragment al programului pentru calcularea lui Y și afișarea argumentului X și a funcției Y:

Pentru X = 0 până la 2,4 Pasul 0.2

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

Pentru a înțelege cum funcționează această buclă, iată un program pentru o buclă similară creată folosind operatormergi la, etichete, operatorDacăApoi.

M1:X=X+0,2

Daca X<= 2.4 Then

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

Să analizăm cum funcționează acest program. Primul calcul Y este nestandard, așa cum ar fi, iese din buclă. Bucla începe după primul transfer al controlului GoToM1 la eticheta M1. În linia etichetată M1, argumentul X este mărit cu un pas de 0,2 și imediat se verifică dacă noua valoare a lui X nu depășește valoarea finală 2,4. Dacă nu depășește, atunci calculul lui Y se repetă cu acest nou X. Apoi operatorul GoToM1 este executat din nou - transferând controlul pe linia cu eticheta M1. Aceste repetări (cicluri) de calcul al lui Y se vor încheia de îndată ce X depășește 2,4.

Acum programul If este comparabil cu bucla For...Next.

Pentru X = 0 până la 2,4 Pasul 0.2

înlocuiește două linii

M1:X=X+0,2

Daca X<= 2.4 Then

Sunt ultimele două linii de cod care sunt executate în bucla For, dar nu vedem acest lucru. Le-am codificat cu șirul cFor... Linia de cod GoTo M1 este codificată cu cuvântul Next X (literalmente: următorul X). Acest lucru are ca rezultat un design compact.

Când utilizați bucla For...Next, trebuie să învățați cum să utilizați contorul de bucle atunci când rezolvați diverse probleme. Pentru a vă da seama cum puteți utiliza contorul pentru a rezolva problema, trebuie pentru a analiza enunțul problemei, pentru a găsi modele de schimbare a unor parametri ai problemei.

Exemplul 9.2 . Determinarea sumei elementelor unei serii: .

Fragment de program:

S = 0 ‘S este suma seriei

Pentru i = 1 La 16 ‘ contorul i este numitorul fracției

S = S + 1/i ‘ suma de acumulare

Tipăriți „S="; S ‘ ieșirea sumei S la forma

Pentru fiecare valoare a contorului i, expresia 1/i formează secvenţial elementele seriei, începând de la 1.

Exemplul 9.3 . Calcularea sumei unei serii de elemente
.

Fragment de program:

S = 0 ‘S este suma seriei

Pentru i = 1 La 18 ‘ contorul i - numărător

S = S + i/(i + 1) ‘ numitorul este mai mare decât numărătorul cu 1

Tipăriți „S="; S ‘ ieșirea sumei S la forma

Exemplul 9.4 . Calcul sumei: 5 + 8 + 11 + ... + 32 + 35

Fragment de program:

S = 0 ‘S este suma seriei

Pentru i = 5 la 35 Pasul 3 ‘ obțineți aritmetica _

progresie cu numitorul 3

Tipăriți „S="; S

Exemplul 9.5. Calcularea sumei pentru un x dat:

Analiza problemei arată că gradul la X se modifică de la 1 la 10. În acest caz, numărătorul din coeficientul de la X este mai mare decât gradul cu 1, iar numitorul este cu 2. Se va forma valoarea gradului. folosind contorul i. Apoi puteți scrie următorul program (fragment):

S = 1 ‘S este suma seriei

Pentru i = 1 la 10’ ca contor i, gradul se modifică la X

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

Tipăriți „S="; S

CicluriPentruUrmătorulfolosit inintrare ieșire șiprocesare matrice .

Exemplul 9.6. Intrarea și ieșirea valorilor elementelor matricei B(N).

Fragment de program:

‘ Omiteți atribuirea valorii N variabilei, _

introdus în formular în câmpul de text txtN:

B(i) = InputBox("Introduceți elementul B(" & i & ")", _

„Matrice de intrare B(” & N & “)”))

imprimare " "; B(i);

Funcţie InputBox() afișează o casetă de dialog cu un buton de închidere, un mesaj dat, un câmp de introducere, butoane O.K,Anulare, antet (sau fără el). Dacă este introdus numărul 12 - dimensiunea matricei N, atunci în exemplul nostru, la prima apariție, această fereastră va arăta astfel:

După cum puteți vedea, mesajul Introduceți elementul B(1) vă solicită să introduceți valoarea primului element în caseta de text. Această fereastră va apărea de 12 ori, deoarece matricea conține 12 elemente. Aceasta rezultă din antetul formularului. Indicele elementului B(i) din promptare va varia de la 1 la 12.

Dacă este necesar să se afișeze numai valorile elementelor matricei B(N) pe formular, atunci corpul buclei va consta dintr-o declarație:

Vizualizarea elementelor unui tablou pentru a efectua o anumită acțiune asupra lor are loc și folosind operatorul de buclă For...Next.

Să aducem exemple de prelucrare a tablourilor unidimensionale.

Exemplul 9.7 . Determinarea elementului maxim din tabloul B(M).

Excluzând intrarea datelor inițiale și ieșirea rezultatelor, descriem pe scurt algoritmul:

    Să declarăm variabila Bmax, în care vom introduce valoarea primului element al tabloului, și variabila Imax, căreia îi vom atribui 1 - indicele primului element al tabloului.

    În buclă, folosind operatorul For…Next, ne uităm prin toate elementele matricei, începând cu al 2-lea. Folosind operatorul If...Then, le comparăm valorile cu valoarea stocată în variabila Bmax.

    Dacă se dovedește că valoarea unui element de matrice este mai mare decât Bmax, atunci Bmax i se atribuie valoarea acestui element, iar valoarea Imax este indicele acestui element de matrice.

După terminarea buclei, variabila Bmax va conține valoarea elementului maxim, iar Imax va conține indicele (numărul).

Programul acestei părți a algoritmului.

Bmax = B(1): Imax = 1

Dacă B(i) > Bmax Atunci Bmax = B(i): Imax = i

Exemplul 9.8. Determinarea sumei, a produsului și a numărului de elemente pozitive ale matriceiD(M).

Variabile: S, P, K sunt suma, produsul și, respectiv, numărul elementelor pozitive.

Algoritm aceasta definitie:

    Atribuim zero variabilei S și K, atribuim 1 variabilei P. De regulă, variabilele în care se acumulează suma, aici este S și k, sunt resetate la zero înainte de ciclu, iar 1 este atribuit variabile în care se calculează produsul.

    Folosind bucla For...Next, trecem prin toate elementele matricei și verificăm dacă sunt pozitive (D(i) > 0).

    Dacă se dovedește că elementul este pozitiv, atunci adăugăm valoarea lui la valoarea sumei S și stocăm noua sumă în aceeași variabilă. Înmulțim variabila P cu valoarea pozitivă a elementului și o stocăm și în variabila P. Și adăugăm 1 la variabila K și stocăm noua valoare în aceeași variabilă

Program această parte a algoritmului arată astfel:

S=0: P=1: K=0

Dacă D(i) > 0 Atunci

S = S + D(i) ‘ așa cum se cumulează suma _

valori pozitive ale elementelor matricei D(i)

P = P*D(i) ‘ definiția produsului pozitiv

‘ elemente de matrice

K = K + 1 ‘ acest operator se numește COUNTER, iată-l

‘ determină numărul de elemente pozitive ale matricei

Exemplul 9.9. Determinarea sumei, produsului, numărului și mediei elementelor de matrice impareD(M).

Prezentăm un fragment din programul unei astfel de definiții.

S=0: P=1: K=0

Dacă D(i) Mod 2<>0 Atunci

Ssr = S/k ‘ calculul mediei elementelor impare

Comparați acest fragment de program cu programul din Exemplul 9.8. Acest program îl repetă aproape complet pe cel precedent. Doar condiția din instrucțiunea If a fost modificată. Condiția D(i) Mod 2<>0 înseamnă că căutăm elemente ale matricei D(i) care nu sunt chiar divizibile cu 2, adică elemente impare. Dacă verificăm condiția D(i) Mod 2 = 0, atunci vom selecta elemente pare ale matricei.

După cum știți, diviziune Mod dă ca rezultat restul împărțirii în numere întregi. De exemplu, după executarea operatorului d= 34Mod4, variabila d va fi egală cu 2. Prin urmare, pentru a selecta elemente de matrice care sunt multipli de 4, trebuie să verificați condiția D(i) Mod 4 = 0. Condiția va fi asemănător dacă căutăm elemente care sunt multipli ai altor numere. În loc de 4, se vor scrie aceste alte numere.

Exemplul 9.10. Scrierea elementelor matriceiR(N) divizibil cu 5 într-o altă matrice și afișând noua matrice pe formular.

Cealaltă matrice va fi notată, de exemplu, cu R5(N). Mărimea acestei noi matrice ar trebui presupusă a fi aceeași cu cea inițială, deoarece în cazul limită toate elementele pot fi multipli de 5.

Algoritmul sarcinii:

    Resetăm contorul k. Folosind operatorul de buclă For...Next, ne uităm prin toate elementele matricei R(N).

    Verificăm fiecare element pentru o multiplicitate de 5 utilizând operatorul If...Then și împărțirea elementului de matrice prin Mod.

    Dacă elementul este multiplu de 5, atunci folosind un numărător de genul k=k+ 1, formăm indicii tabloului R5(N), începând de la 1, și îl scriem în această altă matrice –R5(N).

    Dacă k este diferit de zero, scoateți matriceaR5() în formular.

    Dacă k este egal cu zero, rezultă: „Nu există elemente care sunt multipli ai lui 5”.

Fragment de program:

Dacă R(i) Mod 5 Atunci k = k + 1: R5(k) = R(i)

Dacă k<>0 Atunci

Tipăriți „Fără elemente divizibile cu 5”

Buclele pot fi imbricate în alte bucle.

Să demonstrăm munca bucle imbricate . Mai jos, programul organizează ieșirea valorilor contoarelor de ciclu i, j și k. Din rezultatul lui i,j,k devine clar cum sunt executate buclele imbricate.

Sub privat frmCycle_DblClick()

ScaleMode = 4 'unităţi - simboluri

Pentru i = 1 La 3 ‘bucla exterioară

Tipăriți „i =”; eu;

Pentru j = 1 la 4 „prima buclă imbricată

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

Imprimați „j="; j;

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

Pentru k = 1 La 5 ‘a doua buclă imbricată

Forma afișată (Fig. 1) arată rezultatele afișării contoarelor tuturor celor trei bucle: bucla exterioară - contorul i, prima buclă imbricată - contorj și a doua, cea mai interioară buclă - contor. După cum vedem, contorul „cel mai lent” al buclei exterioare(poi), și „cel mai rapid” este contorul buclei celei mai interioare (conformk).

Programul este executat după dublu clic pe formularul frmCicli cu butonul stâng al mouse-ului.

CurrentX, CurrentY - proprietăți de formular care specifică coordonatele X, Y ale punctului de pornire pentru informațiile transmise prin metoda Print (vezi locația axelor X și Y pe formular în Fig. 1).

TextWidth() este o funcție care returnează lățimea textului dat în funcție ca argument între ghilimele duble.

Buclele imbricate sunt folosite la procesarea matricelor bidimensionale (matrici). Dar în unele sarcini, excluzând intrarea și ieșirea elementelor unei matrice bidimensionale, vă puteți limita la un singur ciclu. Luați în considerare câteva exemple de programare matricială.

Exemplul 9.11. Intrarea și ieșirea unei matrice (matrice bidimensională) de numere întregiintA(N).

Puteți introduce o matrice pe rânduri și pe coloane . Este mai ușor - linie cu linie, dacă ieșirea elementelor matricei în formular va fi programată imediat după introducerea lor.

Intrare și ieșire matricelinie cu linie - fragmentul 1.

Dim M ca număr întreg, N ca număr întreg, i ca număr întreg, j ca număr întreg

Dim intA() As Integer ‘ declară o matrice dinamică

M = Val(txtN.Text) ‘ M este numărul de linii

N = Val(txtN.Text) ‘ N este numărul de coloane

ReDim intA(M, N) As Integer ‘ redefiniți matricea

Pentru i = 1 To M ‘ i își va păstra valoarea până la complet

„bucla imbricată pe j nu va fi executată

imprimare " "; intA(i, j); ‘ ieșire linie cu linie

Imprimați „săriți la începutul unei noi linii

Pentru a introduce o matrice pe coloane, este necesar să faceți bucla exterioară pe j (setează numerele coloanelor), iar bucla interioară pe i (setează numerele rândurilor).

Intrare și ieșire matricepe coloane fragmentul 2.

PrY = 2500: CurrentY = PrY ‘ PrY setează coordonata Y a pornirii

‘ scoateți primul element al fiecărei coloane din formular

Pentru j = 1 To N ‘ j își va păstra valoarea până la complet

„bucla imbricată pe i nu va fi executată

intA (i, j) = InputBox("Introduceți elementul intA(" & i & "," & j & ")", _

"Intrare matrice intA(" & M & "," & N & ")")

Fila Print (6 * j); intA(i, j) ‘ afișare pe coloane

CurrentY = PrY ' pentru a afișa primul element

' coloana următoare

Acest al doilea fragment al programului nu repetă primele 5 rânduri din primul fragment. Funcția Tab(6 * j) setează începutul ieșirii pe o linie (în caractere) începând de la marginea stângă a formularului. Coordonata PrY aici este de 2500 twips, dar puteți alege o altă valoare.

Exemplul 9.12 . Ordonarea valorilor elementelor de matriceV(N) Crescator.

Există mai mulți algoritmi pentru ordonarea tablourilor. Iată una dintre ele: folosind bucle imbricatePentruUrmătorulselectați elemente de la primul până la penultimul și comparați fiecare dintre ele cu elementele ulterioare; dacă se dovedește că următorul element este mai mic decât cel selectat, schimbați-le.

Un fragment dintr-un program care implementează acest algoritm:

Pentru i = 1 la N - 1

Pentru j = i + 1 la N

Dacă V(j)< V(i) Then P = V(i): V(i) = V(j): V(j) = P

Să explicăm acest fragment al programului.

Cu ajutorul unei bucle exterioare cu un contor i, selectăm elementul V (i) pentru comparare cu elementele ulterioare. Bucla interioară cu contorul j selectează elementele ulterioare ale lui V(j) pentru comparație. Valoarea inițială a lui j este i + 1. Acesta este primul element din următoarele.

Pentru a schimba valorile elementelor V(i) și V(j), introducem o variabilă P, în care „ascundem” temporar valoarea unuia dintre elementele matricei (în program, acesta este V(i). )). Apoi elementului V(i) i se atribuie valoarea elementului V(j), iar elementului V(j) i se atribuie valoarea V(i), care este stocată în variabila P. Dacă „ascundem” valoarea lui V(j) în P, atunci codul de schimb de valoare va fi următorul: P = V(j): V(j) = V(i): V(i) = P. rezultatul nu se va schimba.

La sortați matrice în ordine descrescătoare, este suficient să scrieți condiția de verificare în forma V(j) > V(i), adică să schimbați semnul de inegalitate cu altul.

Dacă matricea nu este numerică, ci șir, iar elementele matricei sunt umplute cu nume de familie, atunci folosind programul din Exemplul 9.12, puteți sorta lista de nume de familie în ordine alfabetică. Cert este că pentru literele alfabetului folosit în computer, inegalitățile sunt adevărate: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.

Exemplul 9.13 . Calcularea sumei elementelor pozitive pentru coloanele impare ale unei matriceF(M, N) și afișarea sumelor pe formular.

Algoritmul programului:

    Folosind o buclă exterioară cu un pas de 2, formăm indexul coloanelor impare ale matricei, începând de la prima coloană.

    Resetăm suma S, în care se va acumula suma elementelor pozitive.

    În bucla interioară, verificăm semnul elementului matrice.

    Dacă elementul matricei este pozitiv (> 0), calculați suma S.

    După sfârșitul buclei interioare, scoateți suma S în formular.

Fragment programe:

Pentru j = 1 la N Pasul 2

Dacă F(i, j) > 0 atunci S = S + F(i, j)

Tipăriți „Suma coloanei”; j; „:”; S ‘j este numărul coloanei!

Buclele imbricate vă permit să vă organizați enumerarea optiunilor și rezolva probleme care nu pot fi rezolvate analitic. Ca urmare a enumerarii se obtin solutii, dintre care se selecteaza una sau mai multe care indeplinesc conditia problemei.

Exemplul 9.14. Există 1801 de ruble. Câte puteți cumpăra ciocolată pentru 31 de ruble. și o rolă pentru 18 ruble pentru a cheltui pe deplin toți banii.

Program:

Suma = 1801

AllChocolates = Suma \ 31: Toate chiflele = Suma \ 18

Pentru i = 1 To AllChocolates

Pentru j = 1 To AllBulki

Preț = i * 31 + j * 18 ‘preț total de achiziție

Dacă Preț = 1801 Atunci

Printează „Ciocolată:”; eu; fila (19); „Bulok:”; j

Să explicăm programul în care folosim variabilele numite în limba rusă.

În primul rând, determinăm care este numărul maxim de numai bomboane de ciocolată sau numai rulouri care pot fi cumpărate pentru întreaga sumă. Valorile obținute ale VseChocolate și VseBulki sunt folosite pentru a limita numărul de căutări prin numărul de bomboane de ciocolată și rulouri. Pentru fiecare valoare a numărului de bomboane de ciocolată (i) și a numărului de rulouri (j), determinăm prețul total pentru achiziționarea acestora. Dacă prețul calculat este 1801, atunci opțiunea selectată este una dintre soluțiile problemei.

Funcția Tab() specifică în ce poziție de la marginea formularului vor fi afișate informațiile care urmează acestei funcție. Dacă Tab(19), atunci din poziţia a 19-a.

Programul afișează 3 posibile opțiuni de cumpărare:

Ciocolata 7, rulouri 88

Ciocolata 25, rulouri 57

Ciocolata 43, rulouri 26

Dacă doriți să dați un răspuns fără ambiguitate, trebuie să formulați o condiție suplimentară. De exemplu, „s-au cumpărat mai puține chifle decât ciocolată”. Atunci singura soluție ar fi a 3-a opțiune.

Există multe probleme matematice care sunt rezolvate pur și simplu prin iterare prin programarea în buclă imbricată.