Prin intermediul construcţiilor de tip bloc prezentate în
aceasta secţiune se poate repeta, în mod controlat, un grup de instrucţiuni. În
cazul unui număr nedefinit de repetiţii, condiţia de oprire poate fi testată la
începutul sau la sfârşitul unui ciclu, prin alegerea structurii adecvate.
Se vor utiliza structuri Do…Loop pentru a executa un grup de instrucţiuni de un număr de ori nedefinit aprioric. Daca se cunoaşte numărul de cicluri, se va utiliza structura For…Next.
Se vor utiliza structuri Do…Loop pentru a executa un grup de instrucţiuni de un număr de ori nedefinit aprioric. Daca se cunoaşte numărul de cicluri, se va utiliza structura For…Next.
Înainte de continuare se va testa o condiţie (despre care se
presupune ca poate fi modificata în instrucţiunile executate). Diferitele
variante posibile pentru Do…Loop diferă
după momentul evaluării condiţiei si decizia luata.
La folosirea structurilor iterative, mai ales începători,
trebuie să fim atenţi ca să nu intrăm intr-o buclă infinită. Nu este recomandat
modificarea variabilei contor în interiorul ciclului.
În general structurile iterative pot să fie imbricate.
Pentru a avea structuri clare este bine să folosim anumite
litere pentru variabile contor. (de ex i,j,k..)
For...Next
Sintaxa:
For contor=start to end step
pas
instructiuni
Next
start, send, step
sunt variabile numerice, pas nu este obligatoriu de precizat, implicit este 1
Mod de funcţionare: se
repetă setul de instrucţiuni până
contor <= end pentru step >= 0 sau
contor >= end pentru step < 0
După
ce toate instrucţiunile
s-au executat, valoarea step este adăugata
la valoarea contorului si
instrucţiunile se executa
din nou, după acelaşi test ca si
prima data, sau bucla For…Next este terminată
şi se executa prima instrucţiune de după linia
Next.
Specificarea
numelui contorului în linia Next
poate clarifica textul sursa,
mai ales în cazul când exista structuri
For…Next imbricate.
Corpul unei
bucle For…Next poate include
(complet) o altă structură
For…Next.
În asemenea situaţii, structurile imbricate
trebuie sa aibă
variabile contor diferite.
Instrucţiunile Exit
For pot fi plasate oriunde în corpul unei bucle si
provoacă abandonarea ciclării.
Controlul execuţiei se transfera
la prima instrucţiune
de după linia Next.
De asemenea
putem plasa şi un GoTo linia n, care
va determina saltul executării programului la linia n.
For Each…Next
Similara
structurii For…Next,
structura For Each…Next repeta
un grup de instrucţiuni
pentru fiecare element dintr-o colecţie
de obiecte sau dintr-un tablou (cu excepţia
celor de un tip utilizator). Este utila atunci
când nu se cunoaște numărul
de elemente sau daca aceasta se modifica,
în timpul execuţiei.
Sintaxa este:
For Each element In
colectie
instructiuni
Next
unde
element este variabila utilizata
pentru parcurgerea elementelor. Pentru parcurgerea unui tablou, element poate fi doar o
variabila de tip Variant.
group este numele colecţiei de obiecte sau al tabloului.
Execuţia unei structuri For Each…Next este
1. Se defineşte element ca
numind primul element din grup (daca nu
exista nici un element, se transfera
controlul la prima instrucţiune
de după Next – se părăseşte
bucla fără
executarea instrucţiunilor).
Se executa
instrucţiunile din corpul
buclei For.
Se testează
daca element este ultimul
element din grup. Daca răspunsul
este afirmativ, se părăseşte bucla.
2. Se defineşte element ca
numind următorul element din
grup.
Se repeta
paşii.
Buclele For Each...Next pot fi imbricate cu condiţia ca elementele utilizate la iterare să
fie diferite.
Exemplu
Sub CloseForms()
Sub CloseForms()
For Each frm In Application.Forms
If frm.Caption <> Screen.
ActiveForm.Caption Then frm.Close
Next
End Sub
Determină închiderea
tututor panourilor de comandă în afară de cel active
Sau
Dim
TestArray(10) As Integer, I As Variant
For Each I In
TestArray
TestArray(I) = I
Next I
Va atribui
fiecărui element din tablou valoarea contorului.
While…Wend
Executa un
grup de instrucţiuni atât timp cât
este adevărata o condiţie.
Sintaxa
Sintaxa
While conditie
Instructiuni
Wend
Este
recomandat să se utilizeze o
structură Do…Loop în locul acestei structuri.
With
Programarea
orientata pe obiecte produce,
datorită calificărilor
succesive, construcţii foarte complexe
atunci când se numesc proprietăţile unui obiect. În cazul modificărilor
succesive ale mai multor proprietăţi ale aceluiaşi
obiect,repetarea zonei de calificare poate produce erori de scriere si
conduce la un text greu de citit. Codul este simplificat prin utilizarea
structurii With…End With. O asemenea
structura execută
o serie de instrucţiuni
pentru un obiect sau pentru o variabilă de
tip utilizator.
Sintaxa este:
With obiect
instructiuni
End With
unde
obiect
este numele unui obiect sau a unui tip definit de utilizator
Permiţând omiterea recalificărilor
din referințele la obiectul
precizat, orice construcţie de tipul
".nume"
este interpretată în instrucţiunile structurii drept "object.nume".
Într-un bloc With nu se poate schimba obiectul
procesat.
La plasarea
unui bloc With în interiorul altui
bloc With, obiectul extern este
mascat complet, deci calificările
eventuale la acest obiect vor fi efectuate.
Nu se recomandă
saltul în si dintr-un bloc With.
Exemplu
With MyLabel
.Height = 2000
.Width = 2000
.Caption = "This is MyLabel"
End With
Determina
setarea dimensiuniilor si textului unei etichete.
Sau imbricate
With MyObject
.Height = 100 ' Same as MyObject.Height = 100.
.Caption = "Hello World" ' Same as MyObject.Caption = "Hello
World".
With .Font
.Color = Red ' Same as MyObject.Font.Color = Red.
.Bold = True ' Same as MyObject.Font.Bold = True.
End With
End With
Do…Loop
Se vor utiliza
structuri Do…Loop pentru a executa
un grup de instrucţiuni de un număr de
ori nedefinit aprioric.
Dacă se cunoaşte numărul de cicluri, se va utiliza
structura For…Next.
Înainte de
continuare se va testa o condiţie
(despre care se presupune ca poate fi modificata în instrucţiunile executate). Diferitele variante
posibile pentru Do…Loop diferă după
momentul evaluării condiţiei si decizia luată.
Do
While / Until conditie
instructiuni
Loop
Sau
Do
instructiuni
Loop While
/ Until conditie
unde
conditie este
o expresie care este evaluată.
instructiuni
se repetă atâta timp (while) sau
pâna când (until) condiţia devine True.
Dacă decizia
este de a nu continua ciclarea, atunci se va executa prima instrucţiune care urmează întregii structuri, de după
linia care începe cu Loop
Se poate
abandona ciclarea oriunde în corpul structurii prin utilizarea comenzii Exit Do (cu aceasta sintaxa).
Structurile Do pot fi înserate (dar complet) unele
în altele. O terminare (prin orice metoda) a unei bucle transferă controlul la
nivelul Do imediat superior.
Do
While…Loop
|
Testează
condiţia la începutul
buclei, execută bucla numai dacă rezultatul este True si continuă astfel până
când o noua evaluare produce False.
|
Do
Until…Loop
|
Testează
condiţia la începutul
buclei, execută bucla numai dacă rezultatul este False si continuă astfel până
când o noua evaluare produce True.
|
Do…Loop
While
|
Se
execută întotdeauna bucla o dată, se testează condiţia la
sfârşitul buclei si se repetă bucla atât timp
cât condiţia este
True.
Oprirea este pe condiţie falsă.
|
Do…Loop
Until
|
Se
execută întotdeauna bucla o dată, se testează condiţia la
sfârşitul buclei si se repetă bucla atât timp
cât condiţia este
False.
Oprirea este pe condiţie adevărată.
|
Niciun comentariu:
Trimiteți un comentariu