Structuri de control Visual Basic
Structurile
de control sunt formate din instructiuni. Acestea
descriu partea algoritmica a unui program. Ele pot fi prefixate de
etichete pentru a putea fi referite în instructiunea de salt
neconditionat Goto.
& 121n131b nbsp; Structura liniara
Structura liniara este formata din doua
instructiuni: instructiunea de atribuire si instructiunea
de apel procedura.
Instructiunea cea mai importanta si cea mai frecventa a
limbajului este instructiunea de atribuire, având forma:
variabila = expresie
sau
Set variabila = obiect
Sau
Nume_de_functie = expresie
Instructiunea specifica faptul ca unei
variabile sau unei fuctii îi exte atribita o noua valoare, care
este specificata printr-o expresie sau printr-un obiect. O expresie este o
constructie care desemneaza forma de reprezentare a unei formule
pentru calculul valorii unui obiect oarecare. O expresie consta dintr-o
secventa formata din operanzi (variabile, constante, etc.)
si operatori (simboluri operationale).
Exemple:
Dim iAria as Integer, bSemn as Boolean, sNume as String, _
tabStudenti as DAO.TableDef ´ varibila tabStudenti va contine
oreferinta catre
´ un obiect DAO.TableDef
iAria = iLungime * iLatime
bSemn = True
sNume = ˝Razvan ˝ & ˝Munteanu˝
Set tabStudenti = New DAO.TableDef
Private Function VolumCub(ByVal iLatura as Integer) as
Integer
& 121n131b nbsp; VolumCub = iLatura^3
End Fuction
Instructiunea de apel procedura specifica
activarea (apelul) procedurii al carui nume apare în instructiune. Are
forma:
nume_de_procedura lista_parametri_actuali
sau
Call nume_de_procedura(lista_parametri_actuali)
Voi reveni cu informatii suplimentare în capitolul dedicat procedurilor.
& 121n131b nbsp; Structura alternativa
Structura alternativa este
descrisa cu ajutorul instructiunilor If .Then, If .Then .Else si
Select Case.
Folositi instructiune If.Then daca doriti ca una sau mai
multe instructiuni sa se repete numai
daca este îndeplinita o conditie.
Sintaxa:
If conditie Then instructiune
sau
If conditie Then
bloc de instructiuni
End If
Daca conditia are valoarea True atunci se
executa instructiunea sau blocul de instructiuni de dupa
Then. Orice valoare numerica diferita de 0 este
interpretata ca True iar valoarea 0 este interpretata ca False.
Exemplu:
If iNota<5 Then
& 121n131b nbsp; MsgBox ˝Elev corigent˝
End If
Instructiunea de ramificare simpla If.Then.Else are urmatoarea
sintaxa:
If conditia1 Then
& 121n131b nbsp; bloc de instructiuni1
ElseIf conditia2 Then.
& 121n131b nbsp; Bloc de instructiuni2.
Else
& 121n131b nbsp; bloc de instructiuni3
EndIf
Visula Basic testeaza întâi conditia1. Daca
are valoare False testeaza conditia2 si asa mai departe
pâna gaseste o conditie True. Când gaseste o
conditie cu valoarea True executa blocul de instructiuni care
urmeaza dupa Then si apoi se iese din structura If. Daca
nici o conditie nu are valoarea True atunci se va executa codul de
dupa Else.
Exemplu:
If iTemp < 0 Then
& 121n131b nbsp; bÎnghet = True
Else
& 121n131b nbsp; bÎnghet = False
EndIf
& 121n131b nbsp;
Visual Basic ofera o alternativa la
instructiunea If. Then.Else ce permite executarea unui boc de instructiuni dintre mai
multe în cazul în care este îndeplinita o anumita conditie.
Sintaxa:
Select Case conditia
Case lista_de_expresii1
& 121n131b nbsp; bloc_de_instructini1
Case lista_de_expresii2
& 121n131b nbsp; bloc_de_instructiuni2
.............
Else Case
& 121n131b nbsp; bloc_de_instructiuniN
End Select
Fiecare lista_de_expresii este o lista
formata din mai multe variabile. Se testeaza conditia si în
functie de valoarea obtinuta se executa
blocul_de_instructiuni care este precedat de lasta_de_expresii care
contine valoarea selectorului.
Exemplu:
Select Case sLunaAn
Case ˝decembrie˝ ,˝ianuarie˝, ˝februarie˝
sAnotimp=˝iarna˝
Case ˝martie˝, ˝aprilie˝, ˝mai
sAnotimp=˝primavara˝
Case ˝iunie˝, ˝iulie˝, ˝august˝
sAnotimp=˝vara˝
Else Case
sAnotimp=˝toamna˝
End Select
& 121n131b nbsp; Structura repetitiva
Aceasta structura permite repetarea în anumite
conditii a unei instructiuni sau a unei secvente de
instructiuni .Visula Basic suporta doua tipuri de structuri
repetitive: structuri repetitive cu contor descrise de instructiunile For
.Next si For.Each.Next care executa acelasi lucru de un
numar stabilit de ori si structuri repetitive cu conditie descrise
de diferitele variante ale instructiunii Do.Loop ce îndeplinesc
aceeasi sarcina atâta timp cât o conditie exista sau
pâna când nu mai exista o conditie.
Structurile repetitive cu contor încep cu instructiunea
For si se termina cu instructiunea Next. Blocul de
instructiuni cuprins între For si Next se va executa de un numar
stabilit de ori; cu exceptia cazului în care se doreste o
parasire fortata a ciclului de repetari.
Sintaxa :
& 121n131b nbsp; For VariabilaContor = NumStart to
NumSfârsit [Step VariabilaIncr]
& 121n131b nbsp; & 121n131b nbsp;
bloc_de-instructiuni
& 121n131b nbsp; [Exit For]
& 121n131b nbsp; & 121n131b nbsp;
bloc_de_instructiuni
& 121n131b nbsp; Next [VaiabilaContor]
VariabilaContor este o variabila întreaga pe care
structura o foloseste pentru a contoriza numarul de repetari
efectuate. NumStart si NumSfârsit sunt doua variabile reale care
stabilesc valoarea initiala ce o va lua VariabilaContor si,
respectiv, valoarea finala. VarablaContor stabileste cu ce valoare se
incrementeaza sau decrementeaza VariabilaContor la fiecare repetare.
În mod implicit valoarea este 1. Instructiunea Exit For este folosita
pentru ca excutia programului sa paraseasca structura
repetitiva chiar daca VariabilaContor nu a ajuns sa ia valoarea
NumSfârsit (adica nu s-a executat numarul de repetari
stabilit).
Exemple: & 121n131b nbsp;
For iContor = 1 to 9
& 121n131b nbsp; & 121n131b nbsp; MsgBox
˝Este repetarea numarul: ˝ & Cstr(iContor)
& 121n131b nbsp; Next iContor
Acelasi efect se poate obtine si utilizând structura astfel:
For iContor = 9 to 1 Step -1
& 121n131b nbsp; & 121n131b nbsp; MsgBox
˝Este repetarea numarul: ˝ & Cstr(iContor)
& 121n131b nbsp; Next iContor
Instructiunile Do.Loop sunt folosite pentru
executia unui bloc de instructiuni de un numar de cunoscut de
ori. Exista mai multe variante ale instructiuni Do.Loop dar fiecare
evalueaza o anumita conditie. Conditia este o expresie care
este evaluata ca fiind falsa (zero) sau adevarata
(diferita de zero).
Instructiunea Do While. Loop are sintaxa:
Do While conditie
bloc_de_instructiuni
[Exit Do]
bloc_de_instructiuni
Loop
Visual Basic evalueaza întâi conditia si
daca aceasta este adevarata se executa blocul de
instructiuni, în caz contrar se continua executia programului
dupa instructiunea Loop. Acesta se repeta atâta tip cât
conditia este adevarata. Din acest motiv în blocul de
instructiuni trebuie sa existe o instructiune ce modifica
valoarea conditiei în caz contrar repetitia va fi
nesfârsita. O alta varianta a instructiunii Do.Loop
este urmatoarea:
Do Until conditie
bloc_de_instructiuni
[Exit Do]
bloc_de_instrctiuni
Loop
Aceasta instructiune se aseamana cu cea
prezentata anterior cu diferenta ca blocul de instructiuni
se repeta pâna când conditia devine adevarata
(adica atâta timp cât conditia este falsa.
Mai exista doua structuri cu urmatoarele sintaxe:
Do
bloc_de_instructiuni
[Exit Do]
bloc_de_instrctiuni
Loop while conditie
si
Do
bloc_de_instructiuni
[Exit Do]
bloc_de_instrctiuni
Loop Until conditie
Diferenta fata de primele consta în
faptul ca la acestea blocul de instructiuni se executa cel putin
o data. Evaluarea conditiei se face la sfârsitul structurii
si nu la început ca în cazul primelor doua.
Exemple:
Do While i<=9
MsgBox ˝Este repetarea numarul: ˝ & Cstr(iContor)
Loop
Voi prezenta în continuare, pentru a evidentia modul de
utilizare a diferitelor structuri de control, doua programe ce vor ordona
crescator, prin doua metode diferite un sir de numere introduse
de dumneavoastra. Numerele vor fi memorate într-o structura de
data de tip tablou pe care o voi prezenta în urmatorul capitol.
Introduceti pe o
forma urmatoarele controale si setatile
proprietatile astfel:
TextBox
Name & 121n131b nbsp; txtNumar
Text & 121n131b nbsp; ˝˝
CommandButton 1 CommandButton 1
Name & 121n131b nbsp; cmdAdauga Name
& 121n131b nbsp; cmdOrdoneza
Caption Adaugare Caption Adaugare
Adaugati în fereastra de cod urmatoarele rânduri:
Option Explicit
Option Base 1
Private aSirNumere(100) As Integer
Private iNrElemente As Integer
Private Sub cmdAdauga_Click()
iNrElemente = iNrElemente + 1
aSirNumere(iNrElemente) = Cint(txtNumar.Text)
txtNumar.Text = ""
End Sub
Private Sub cmdOrdoneaza_Click()
Dim iContor1 As Integer, iContor2 As Integer, iAux As Integer
For iContor1 = 1 To iNrElemente
For iContor2 = iContor1 + 1 To iNrElemente
If aSirNumere(iContor2) < aSirNumere(iContor1) Then
iAux = aSirNumere(iContor1)
aSirNumere(iContor1) = aSirNumere(iContor2)
aSirNumere(iContor2) = iAux
End If
Next iContor2
Next iContor1
Dim sAfisare As String: sAfisare = ""
For iContor1 = 1 To iNrElemente
sAfisare = sAfisare & " " & CStr(aSirNumere(iContor1))
Next
MsgBox sAfisare, vbExclamation, "Ordonare prin selectie directa"
End Sub
Private Sub Form_Load()
iNrElemente = 0
End Sub
Pentru al doilea program creati aceeasi interfata si
adaugati codul:
Option Explicit
Option Base 1
Private aSirNumere(100) As Integer
Private iNrElemente As Integer
Private Sub cmdAdauga_Click()
iNrElemente = iNrElemente + 1
aSirNumere(iNrElemente) = Cint(txtNumar.Text)
txtNumar.Text = ""
End Sub
Private Sub cmdOrdoneaza_Click()
Dim iContor As Integer, bGata As Boolean, iAux As Integer
Do
bGata = True
For iContor = 1 To iNrElemente - 1
If aSirNumere(iContor + 1) < aSirNumere(iContor) Then
bGata = False
iAux = aSirNumere(iContor)
aSirNumere(iContor) = aSirNumere(iContor + 1)
aSirNumere(iContor + 1) = iAux
End If
Next iContor
Loop Until bGata
Dim sAfisare As String: sAfisare = ""
For iContor = 1 To iNrElemente
sAfisare = sAfisare & " " & CStr(aSirNumere(iContor))
Next
MsgBox sAfisare, vbExclamation, "Ordonare prin selectie directa"
End Sub
Private Sub Form_Load()
iNrElemente = 0
End Sub
Dupa ce ati lansat în executie a celor
doua programe introduceti sirul de numere ce doriti
sa-l ordonati scriind pe rând numerele in caseta de text. Dupa ce introduceti un numa apasati butonul
Adaugare dupa care continuati si îl introduceti pe
urmatorul. Dupa ce ati introdus toate
numerele apasati butonul Ordoneaza pentru a vizualiza sirul
de numere ordonat.
|