Sintaxa operatorului:
PentruContra= Început ToSfârşit[PasPas]
Block_Operators
UrmătorulContra
Aici este indicat:
Pentru – Pentru (cuvânt cheie obligatoriu VB);
La – la (cuvânt cheie obligatoriu VB);
Block_Operators– unul sau mai mulți operatori apelați corpul ciclului;
contor - o variabilă întreagă care numără numărul de bucle executate;
Început, sfârșit - valorile inițiale și finale ale contorului;
Pas – pas(cuvânt cheieVB);
Pasul - pas de schimbare a contorului; poate fi negativ; parametrul este opțional, deoarece dacă pasul este 1, puteți să faceți un pas Pas mai jos;
Următorul – următorul (cuvânt cheie obligatoriu VB, intrarea operatorului final al buclei).
Contravaloarea (Început, Sfârșit) poate exista 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ă existe Început ≤ Sfârșit, Dacă Pas> 0 și Început ≥ Sfârșit, Dacă Pas< 0. De îndată ce se dovedește că Contra>Sfârşit ( Dacă Început< Конец), Execuția buclei se termină. Dacă Start =Sfârşit, bucla va fi executată o dată;
Exemplul 9.1 .Evaluarea funcțieiY = 2 – 1.5 Sinxcând X se modifică în trepte de 0,2 în interval.
Un fragment dintr-un program pentru calcularea 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 operatorGoTo, etichete, operatorDacă… Apoi.
M1: X = X + 0,2
Daca X<= 2.4 Then
Y = 2 – 1,5*Sin(X)
Să vedem cum funcționează acest program. Primul calcul Y este nestandard, ca și cum ar ieși din ciclu. Ciclul î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 se face imediat o verificare pentru a vedea dacă noua valoare a lui X depășește valoarea finală de 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 etichetată M1. Aceste iterații (cicluri) de calcul al lui Y se vor încheia de îndată ce X depășește 2,4.
Acum să comparăm programul cu If 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 le vedem. Le-am codificat cu linia 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 pentru a rezolva diverse probleme. Pentru a vă da seama cum să utilizați un contor pentru a rezolva o problemă, trebuie analizați formularea problemei, găsiți modele de modificări ale unor parametri ai problemei.
Exemplul 9.2 . Determinarea sumei elementelor unei serii: .
Fragment de program:
S = 0 ‘ S – suma seriei
Pentru i = 1 La 16 ‘ contorul i este numitorul fracției
S = S + 1/i ‘ acumularea sumei
Tipăriți „S = „; S ‘ scoate suma S în formular
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 – suma seriei
Pentru i = 1 La 18 ‘ contorul i – numărător
S = S + i/(i + 1) ‘ numitorul este cu 1 mai mare decât numărătorul
Tipăriți „S = „; S ‘ scoate suma S în formular
Exemplul 9.4 . Calculul sumei: 5 + 8 + 11 + … + 32 + 35
Fragment de program:
S = 0 ‘ S – suma seriei
Pentru i = 5 la 35 Pasul 3 ‘ obținem aritmetica _
progresie cu numitorul 3
Tipăriți „S = „; S
Exemplul 9.5. Calcularea sumei pentru un x dat:
Analiza problemei arată că gradul lui X variază de la 1 la 10. În acest caz, numărătorul din coeficientul lui X este mai mare decât gradul cu 1, iar numitorul cu 2. Vom forma valoarea gradului folosind contor i. Apoi puteți crea un program ca acesta (fragment):
S = 1 ‘ S – suma seriei
Pentru i = 1 la 10’ ca și contorul i, gradul se modifică la X
S = S + (-1)^i*(i + 1)*x^i / (i + 2)
Tipăriți „S = „; S
CicluriPentru… Următorulfolosit pentruintrare, ieșire Şiprocesare matrice .
Exemplul 9.6. Intrarea și ieșirea valorilor elementelor matricei B(N).
Fragment de program:
„Omitem atribuirea valorii variabilei N, _
introdus în formular în câmpul de text txtN:
B(i) = InputBox("Introduceți elementul B(" & i & ")", _
„Matrice de intrare B(” & N & “)”)
Imprimați „ ”; B(i);
Funcţie InputBox() afișează o casetă de dialog cu un buton de închidere, un mesaj specificat, un câmp de introducere, butoane Bine,Anula, cu un antet dat (sau fără el). Dacă este introdus numărul 12 - dimensiunea matricei N, atunci în exemplul nostru, când apare pentru prima dată, această fereastră va arăta astfel:
După cum vedem, 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 titlul formularului. Indicele elementului B(i) din invitație va varia de la 1 la 12.
Dacă doriți să afișați numai valorile elementelor matricei B(N) pe formular, atunci corpul buclei va consta dintr-o declarație:
Vizualizarea elementelor de matrice pentru a efectua unele acțiuni asupra lor se face și folosind operatorul de buclă For...Next.
Să dăm 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 o variabilă Bmax, în care vom introduce valoarea primului element al tabloului, și o variabilă Imax, căreia îi vom atribui 1 - indicele primului element al tabloului.
Într-o 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 valoarea lui Bmax, atunci Bmax i se atribuie valoarea acestui element, iar valorii Imax i se atribuie indexul acestui element de matrice.
După terminarea buclei, variabila Bmax va conține valoarea elementului maxim, iar Imax va conține indicele (numărul).
Programul pentru această parte a algoritmului.
Bmax = B(1): Imax = 1
Dacă B(i) > Bmax Atunci Bmax = B(i): Imax = i
Exemplul 9.8. Determinarea sumei, produsului și numărului de elemente pozitive ale unui tablouD(M).
Variabile: S, P, K – respectiv suma, produsul și numărul elementelor pozitive.
Algoritm o astfel de definitie:
Atribuim zero variabilei S și K și atribuim 1 variabilei P. De regulă, variabilele în care se acumulează suma, aici este S și k, sunt întotdeauna resetate la zero înainte de buclă, iar variabilele din cărora le este calculat produsul li se atribuie 1.
Folosind bucla For...Next, parcurgem toate elementele tabloului ș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, de asemenea, o stocăm î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 se acumulează 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
‘ definește numărul de elemente de matrice pozitive
Exemplul 9.9. Găsirea sumei, produsului, numărului și mediei elementelor de matrice impareD(M).
Iată un fragment dintr-un program pentru o astfel de definiție.
S = 0: P = 1: K = 0
Dacă D(i) Mod 2<>0 Atunci
Ssr = S/k ‘ calcularea 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 s-a schimbat. CondițiaD(i) Mod 2<>0 înseamnă că căutăm elemente ale matricei D(i) care nu sunt divizibile egal cu 2, adică elemente impare. Dacă verificăm condiția D(i) Mod 2 = 0, atunci vom selecta elemente pare ale matricei.
După cum se știe, împărțirea după Mod dă restul diviziunii î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ă verificăm 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. Aceste alte numere vor fi scrise în loc de 4.
Exemplul 9.10. Scrierea elementelor de matriceR(N), multipli de 5, într-o altă matrice și scoaterea noului tablou în formular.
Să notăm o altă matrice, de exemplu, R5(N). Mărimea acestei noi matrice ar trebui presupusă a fi aceeași cu cea inițială, deoarece în cazul extrem toate elementele pot fi un multiplu de 5.
Algoritmul problemei:
Resetare contor k. Folosind operatorul de buclă For...Next, ne uităm prin toate elementele matricei R(N).
Verificăm fiecare element pentru un multiplu de 5 folosind operatorul If...Then și împărțind elementul de matrice la Mod.
Dacă elementul este multiplu de 5, atunci folosind un numărător de tip 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, afișați tabloul R5() pe formular.
Dacă k este egal cu zero, rezultă: „Nu există elemente divizibile cu 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 . Programul de mai jos afișează valorile 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
Tipăriți „j =”; j;
CurrentX = TextWidth("i = 1 j = 1") + 7
Pentru k = 1 La 5 ‘a doua buclă imbricată
Forma prezentată (Fig. 1) arată rezultatele ieșirii contoarelor tuturor celor trei bucle: bucla exterioară – contorul i, prima buclă imbricată – contorul j și a doua, cea mai interioară buclă – contorul k. După cum vedem, cel mai lent contor este bucla exterioară(poi), și cel mai „rapid” este contorul buclei celei mai interioare (conformk).
Programul este executat după dublu clic pe butonul stâng al mouse-ului din formularul frmCicli.
CurrentX, CurrentY – proprietățile formularului care specifică coordonatele X, Y ale punctului de plecare pentru afișarea informațiilor folosind metoda Print (vezi Fig. 1 pentru locația axelor X și Y pe formular).
TextWidth() este o funcție care returnează lățimea textului specificat î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 o singură buclă. Să ne uităm la câteva exemple de programare matricială.
Exemplul 9.11. Intrarea și ieșirea unei matrice (matrice bidimensională) de numere întregiintA(N).
Puteți intra în matrice pe rânduri și pe coloane . Este mai ușor - linie cu linie, dacă programați ieșirea elementelor matrice în formular imediat după ce sunt introduse.
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 – numărul de linii
N = Val(txtN.Text) ‘ N – 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ă
Imprimați „ ”; intA(i, j); ‘ ieșire linie cu linie
Imprimați ‘ mergeți la începutul unei noi linii
Pentru a introduce o matrice pe coloane, ar trebui să faceți bucla exterioară în j (specifică numerele coloanelor) și bucla interioară în i (specifică numerele rândurilor).
Intrare și ieșire matricepe coloane – fragmentul 2.
PrY = 2500: CurrentY = PrY ‘ PrY setează coordonata Y a pornirii
‘ afișează 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 & ")", _
"Matricea de intrare intA(" & M & "," & N & ")")
Fila Imprimare(6 * j); intA(i, j) ‘ iesit prin coloane
CurrentY = PrY ' pentru a afișa primul element
' coloana următoare
Acest al doilea fragment de program nu repetă primele 5 rânduri din primul fragment. Funcția Tab(6 * j) setează începutul ieșirii într-o linie (în caractere), începând de la marginea stângă a formularului. Coordonata PrY aici este egală cu 2500 twips, dar puteți alege o altă valoare.
Exemplul 9.12 . Ordonarea valorilor elementelor de matriceV(N) ascendent.
Există mai mulți algoritmi pentru ordonarea tablourilor. Iată una dintre ele: folosind bucle imbricatePentru… Următorulselectăm elemente, începând de la primul până la penultimul, și comparăm fiecare dintre ele cu elementele ulterioare; dacă se dovedește că elementul următor este mai mic decât cel selectat, le schimbăm.
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.
Folosind o buclă exterioară cu un numărător i, selectăm elementul V(i) pentru a compara cu elementele ulterioare. Bucla interioară cu un numărător j selectează elementele ulterioare ale lui V(j) pentru comparație. Valoarea inițialăj este i+ 1. Acesta este primul element din cele ulterioare.
Pentru a schimba valorile elementelor V(i) și V(j), introducem o variabilă P, în care „ascundem” temporar valoarea unuia dintre elementele tabloului (î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 variabilaP. Dacă „ascundem” valoarea V(j) în P, atunci codul pentru schimbul de valori va fi astfel: P = V(j): V(j) = V(i): V(i) = P Rezultatul nu se va schimba.
La sortați matricea în ordine descrescătoare, este suficient să scrieți condiția de verificare în forma V(j) > V(i), adică să schimbați semnul inegalității cu altul.
Dacă matricea nu este numerică, ci șir, iar numele de familie sunt introduse în elementele matricei, atunci folosind programul din exemplul 9.12, puteți ordona lista de nume de familie în ordine alfabetică. Cert este că pentru literele alfabetului utilizate într-un computer sunt adevărate următoarele inegalități: A< Б < В < Г….< Я и т. д., поскольку числовые коды букв алфавита последовательно увеличиваются, начиная с А и до конца алфавита. Это же справедливо и для букв английского алфавита.
Exemplul 9.13 . Calcularea sumei elementelor pozitive pentru coloanele impare ale unei matriceF(M, N) și scoateți sumele în formular.
Algoritmul programului:
Folosind bucla exterioară cu pasul 2, formăm un index al 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), calculăm suma S.
După sfârșitul buclei interioare, afișăm suma S pe 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 – numărul coloanei!
Buclele imbricate vă permit să vă organizați enumerarea optiunilor și rezolva probleme care nu pot fi rezolvate analitic. În urma căutării, se obțin opțiuni de soluție, dintre care sunt selectate una sau mai multe care îndeplinesc condițiile problemei.
Exemplul 9.14. Sunt 1801 de ruble. Câte bomboane de ciocolată poți cumpăra cu 31 de ruble? și chifle pentru 18 ruble pentru a cheltui complet toți banii.
Program:
Suma = 1801
AllChocolates = Sum\31: AllBulks = Sum\18
Pentru i = 1 To AllChocolates
Pentru j = 1 To VseBulk
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 ciocolate singure sau doar rulouri care pot fi achiziționate pentru întreaga sumă. Folosim valorile obținute ale AllChocolates și AllBulks pentru a limita numărul de căutări pentru numărul de bomboane ș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ă din 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
Ciocolată 25, rulouri 57
Ciocolata 43, chifle 26
Dacă doriți să oferiț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 va fi a treia opțiune.
Există multe probleme matematice care pot fi rezolvate pur și simplu prin forță brută folosind programarea în buclă imbricată.
Pe lângă structurile decizionale, există un alt tip de structură de control numită ciclu.
Ciclu este o structură algoritmică cu ajutorul căreia se implementează mai multe repetiții ale blocurilor de operatori.
Există trei tipuri principale de bucle în Visual Basic, care sunt implementate folosind constructele For:Next, Do:Loop și While:Wend.
Pentru: bucla următoare. Folosit atunci când numărul de repetări ale unui anumit bloc de instrucțiuni este cunoscut în prealabil. Acest design arată astfel:
Pentru contor = valoarea inițială Până la valoarea finală Operatori1 Operatori2 Următorul [contor]
Când instrucțiunile de mai sus sunt executate pentru prima dată, variabilei contor i se atribuie o valoare inițială, după care sunt posibile două opțiuni. Dacă în urma verificării contorului de condiție > valoarea finală, se obține valoarea True, atunci bucla se termină, iar blocurile operators1 și operators2 nu sunt niciodată executate. Pe de altă parte, dacă rezultatul testului de condiție este Fals, atunci în acest caz blocurile de instrucțiuni sunt executate pentru prima dată, după care are loc trecerea la începutul buclei. În continuare, valoarea variabilei contor este mărită cu un pas situat după cuvântul cheie Step (dacă este absent, este setat pasul = 1). După aceasta, se verifică din nou adevărul contorului de condiție > valoarea finală etc., sfârșitul buclei are loc în momentul în care rezultatul acestei verificări este valoarea True.
Este adesea necesar să se încheie o „urgență” în buclă atunci când este îndeplinită o condiție suplimentară. În acest caz, în interiorul buclei ar trebui să utilizați expresia de serviciu Exit:For, care se află de obicei în structura de control, De exemplu:
Dacă condiția Atunci Ieșire Pentru
Dacă rezultatul verificării condiției este adevărat, atunci execuția buclei va fi încheiată și blocul operator1 va fi executat din nou, dar blocul operator2 nu.
Do: Buclă. Este utilizat atunci când numărul de repetări ale operatorilor de corp buclă este necunoscut în prealabil. Există patru varietăți ale acestui design. Când folosiți primele două, bucla fie va fi executată de multe ori, fie deloc.
Instrucțiuni de buclă de condiție Do Until
Dacă rezultatul verificării condiției este Fals, atunci blocul de instrucțiuni este executat, în caz contrar trecerea la instrucțiunea situată după cuvântul de serviciu Loop. Pe de altă parte, dacă primul test al condiției returnează rezultatul Adevărat, atunci bucla nu va fi executată nici măcar o dată.
Do While Condition Loop declarații
Dacă condiția este adevărată, atunci blocul de instrucțiuni este executat, dar dacă este fals, adică rezultatul verificării este Fals, atunci bucla nu va fi executată nici măcar o dată.
Dacă se folosesc ultimele două constructe, bucla va fi executată cel puțin o dată.
Efectuați bucla de instrucțiuni până la condiție
Blocul de instrucțiuni este executat atâta timp cât rezultatul testării condiției este Fals, altfel bucla se termină.
Efectuați bucla de instrucțiuni în timpul condiției
Dacă condiția este falsă, blocul de instrucțiuni este executat, dar dacă este adevărat, i.e. Rezultatul verificării este Adevărat, apoi are loc sfârșitul ciclului.
Bucla While:Wend. Este, de asemenea, utilizat atunci când numărul de repetări ale instrucțiunilor buclei este necunoscut în prealabil și are următoarea sintaxă:
În timp ce starea Wend declarații
Dacă rezultatul verificării condiției este True, atunci blocul de instrucțiuni este executat, în caz contrar trecerea la instrucțiunea situată după cuvântul de serviciu Wend. Pe de altă parte, dacă primul test al condiției returnează rezultatul Fals, atunci bucla nu va fi executată nici măcar o dată.
VBA. Organizarea ciclurilor.
Instrucțiunile buclă sunt folosite pentru a repeta o acțiune sau un grup de acțiuni de un număr specificat de ori. Numărul de repetări (iterații în buclă) poate fi predefinit sau calculat.
VBA acceptă două tipuri de constructe în buclă:
- Bucle cu un număr fix de repetări ( bucle contracate).
- Bucle cu un număr nedefinit de repetări ( bucle condiționate).
Pentru toate tipurile de cicluri se utilizează conceptul corpul buclei , care definește un bloc de instrucțiuni incluse între instrucțiunile de început și de sfârșit ale buclei. Se numește fiecare repetare a execuției instrucțiunilor corpului buclei repetare
Cicluri fixe
VBA oferă două structuri de control pentru organizarea unei bucle fixe: For ... Next (bucla cu un contor) și For Each ... Next (bucla cu o enumerare).
Operator pentru... În continuare Aceasta este o buclă tipică de contor care execută un număr dat de iterații. Sintaxa instrucțiunii For...Next este:
Pentru<счетчик> = <начЗначение>Că<конЗначение>
<блок операторов>
Următorul [<счетчик>]
Un exemplu de utilizare a operatorului For...Next.
Listarea 1. Operator pentru... În continuare
‘ SARCINA: Creați un program care primește două numere de la utilizator.
‘ Adaugă toate numerele din intervalul specificat de aceste două numere și apoi
‘ afișează suma rezultată.
Subeșantion7()
Dim i As Integer ‘contor de cicluri
Dim sStart „valoarea inițială a contorului
Dim sEnd ‘valoarea contorului final
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
În continuare i
MsgBox „Suma numerelor de la „ & sStart & ” la „ & sEnd & ” este: „ & sSum
End Sub
Declarație buclă pentru fiecare... În continuareaparț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. Pentru fiecare... formatul de declarație următor:
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 Do..Loops, care diferă în funcție de tipul de condiție care este verificată și de timpul necesar pentru a finaliza această verificare.
- Buclă continuă în timp ce... Wend.
Bucla Do While... este 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ă are valoarea True). Deoarece verificarea este efectuată la început, corpul buclei nu poate fi executat niciodată. Do While... Format buclă:
Faceți în timp ce<условие>
<блок операторов>
Buclă
Lista 2. Do While... Loop
‘ SARCINA: Creați un program care necesită intrarea utilizatorului
„o succesiune arbitrară de numere. Intrarea trebuie să fie terminată
„ numai după ce suma numerelor impare introduse depășește 100.
Subeșantion8()
Dim OddSum As Integer „suma de numere impare”.
Dim OddStr As String „un șir cu numere impare
Dim Num pentru a accepta numerele introduse
OddStr = „” ‘inițializarea șirului de ieșire
OddSum = 0 ‘inițializați OddSum
Do While OddSum< 100 ‘начало цикла
Num = InputBox(„Introduceți un număr: “)
Dacă (Număr Mod 2)<>0 Apoi „verificarea parității”.
OddSum = OddSum + Num „acumularea sumei numerelor impare
OddStr = OddStr & Num & ” ”
Încheiați dacă
Buclă
„Tipărește un șir cu numere impare
MsgBox prompt:=”Numere impare: ” & OddStr
End Sub
Do... Instrucțiunea Loop Whileconcepute pentru organizarebuclă cu postcondiție. Condiția este verificată după ce corpul buclei a fost executat cel puțin o dată. Ciclul își continuă activitatea până când<условие>rămâne adevărat. Do... Loop While Format:
Do<блок операторов>Buclă în timp ce<условие>
Lista 3. Buclă cu postcondiție
SARCINA: Creați un program pentru jocul „Ghicește numărul”. Programul trebuie să fie aleatoriu
„Modul de a genera un număr în intervalul de la 1 la 1000, utilizatorul trebuie
ghici acest număr. Programul afișează un indiciu pentru fiecare număr introdus
„ „mai mult” sau „mai puțin”.
Subeșantion8()
Randomize Timer „inițializați generatorul 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 = Numărul gol introdus de utilizator
Faceți un joc
Selectați Case True
Case IsEmpty(UserNumber): msg = „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(„Jucați din nou?”, vbDaNu + vbÎntrebare, „Ați ghicit!”) = vbDa Atunci
GoTo Begin
Încheiați dacă
End Sub
Loops Do Until... Loop and Do... Loop Until sunt inversiuni ale buclelor condiționale discutate anterior. În general, ele funcționează similar, cu excepția faptului că corpul buclei este executat dacă condiția este falsă (de ex.<условие>= Fals). Faceți până la... Format buclă:
Face până la<условие> <блок операторов>Buclă
Efectuați... Buclă până la formatul buclei:
<блок операторов>
Buclă până la<условие>
Sarcina practica:Rescrieți programele din listele 10 și 11 folosind instrucțiuni de buclă inversată.
Loop While...Wend se aplică și buclelor condiționate. Acest operator este pe deplin în concordanță cu structura Do While... Loop. While...Format buclă Wend:
în timp ce<условие>
<блок операторов>
Merge încet
O caracteristică distinctivă a acestui operator este imposibilitatea de a forța finalizarea (întreruperea) corpului buclei (operatorul Exit Do nu funcționează în bucla While ... Wend).
Întreruperea unui ciclu
Pentru a termina o iterație mai devreme și a ieși din buclă, este utilizată instrucțiunea Exit. Acest operator 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<конец_цикла>. Pot exista mai multe instrucțiuni Exit în corpul unei bucle.
Lista 4. Forțați ieșirea din 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
Lecție din serie: „ Programare în Visual Basic.NEN pentru școlari"
Te-ai familiarizat cu controlul ComboBox.
În această lecție vom continua studiul operatorilor de limbaj Visual Basic.Net, concentrându-ne pe operatorii de buclă.
Ciclic structuri algoritmice sunt trei tipuri:
- contor bucle în care se execută corpul buclei o anumită sumă dată;
- bucle pentru procesarea tablourilor sau colecțiilor;
- bucle condiționate, în care corpul buclei este executat în timp ce condiția este adevărată (sau până când condiția devine adevărată).
În această lecție ne vom uita la operatorul de buclă cu un numărător (Pentru . . . Următorul). Să scriem un proiect folosind acest operator.
Ciclu cu tejghea Pentru. . . Nex t se folosește când se știe dinainte câte repetări trebuie efectuate.
Diagrama bloc
Vedere generală a operatorului
For Counter = StartValue To EndValue Loop Body Next [Counter]
Sintaxa operatorului este următoarea: linia care începe cu cuvântul cheie For este capul buclei, iar linia cu cuvântul cheie Next este sfârșitul buclei, între ele sunt instrucțiuni care sunt corpul buclei.
Algoritm pentru executarea operatorului For. . . Următorul
- Valoarea variabilei Counter este setată egală cu StartValue.
- Contorul de stare este verificat<= КонЗнач
- Dacă condiția este îndeplinită, atunci corpul buclei este executat. Variabila Counter este modificată de valoarea pasului: Counter = Counter + step.
- Când variabila Counter atinge valoarea ConValue, bucla se iese și următoarele instrucțiuni sunt executate.
Programatorul poate organiza o ieșire prematură din buclă folosind constructul Exit For. În acest caz, bucla este ieșită automat și controlul este transferat la următoarea comandă care urmează buclei.
Proiectul „Venit din depozit”
Scrieți un proiect care calculează venitul dintr-un depozit și oferă calculul dobânzii simple și compuse. Dobânda simplă se acumulează la sfârșitul termenului de depozit, dobânda compusă se acumulează lunar și se adaugă la suma inițială a depozitului, iar luna următoare se acumulează dobândă pentru noua sumă. Forma recomandată este prezentată în figură.
Tehnologia de execuție
Acest tutorial a arătat cum să utilizați o buclă For...Next pentru a repeta codul de un anumit număr de ori.
Sunt apelate orice acțiuni ale unei proceduri care sunt repetate de un anumit număr de ori sau până când o anumită condiție este îndeplinită sau nu este îndeplinită ciclu .
Procesul de executare a tuturor instrucțiunilor incluse într-o structură de buclă este apelat o dată iterație în buclă.
Sunt apelate structuri de buclă care execută întotdeauna un anumit număr de ori bucle cu un număr fix de iterații. Alte tipuri de structuri bucle se repetă de un număr variabil de ori în funcție de anumite condiții. Se numesc astfel de cicluri cicluri nedefinite.
Se apelează blocul de instrucțiuni situat între începutul și sfârșitul buclei "corp bucla".
Cea mai simplă structură de buclă este ciclu fix .
Pentru..Bucla următoare
Sintaxă
Pentru contra = Început La Sfârşit
Declarații
Următorul [ contra]
Counter - orice variabilă numerică VBA
Start - orice expresie numerică care definește valoarea inițială pentru variabila contor
Sfârșit - o expresie numerică care definește valoarea finală pentru variabila contor
În mod implicit, VBA incrementează o variabilă contra cu 1 de fiecare dată când instrucțiunile sunt executate în buclă. Puteți seta o valoare diferită ( SterSize- orice expresie numerică) prin care se va schimba contra.
Cuvânt cheie Următorul spune VBA că sfârșitul buclei a fost atins. Variabilă opțională contra după cuvântul cheie Următorul trebuie să fie aceeași variabilă contra, care a fost specificat după cuvântul cheie Pentru la începutul structurii buclei.
Mai jos este o listă a celei mai simple bucle Pentru..Următorul, care numără suma numerelor de la 1 la 10:
Și acum două opțiuni pentru ciclu Pentru..Următorul folosind un pas de buclă, altul decât unul:
Fiţi atenți! La scăderea contorului de cicluri Pentru..Următorul bucla se execută atâta timp cât variabila contor este mai mare sau egală cu valoarea finală, iar când contorul buclei este incrementat, bucla se execută atâta timp cât variabila contor este mai mică sau egală cu valoarea finală.
Bucla pentru fiecare..Următorul
Ciclu Pentru Fiecare..Următorul nu folosește un numărător de cicluri. Cicluri Pentru Fiecare..Următorul sunt executate de câte ori există elemente într-un anumit grup, cum ar fi o colecție de obiecte sau o matrice (care va fi discutată mai târziu). Cu alte cuvinte, ciclul Pentru Fiecare..Următorul se execută o dată pentru fiecare element din grup.
Sintaxă
Pentru Fiecare ElementÎn Grup
Declarații
Următorul [ Element]
Element - o variabilă folosită pentru a itera toate elementele dintr-un anumit grup
Group este un obiect de colecție sau o matrice
Declarații - una, mai multe sau deloc instrucțiuni VBA (corpul buclei).