1. Care sunt principalele unităţi lexicale?
2. Cum pot fi inserate comentariile într-un program VB.NET?
3. Ce restricţii trebuie să respectăm atunci când construim un identificator?
4. Ce rol au separatorii?
5. Ce presupune lucrul cu variabilele?
6. Care sunt principalii operatori logici şi în ce ordine se execută?
7. Daţi exemple de alţi operatori.
8. Ce sunt instrucţiunile şi cum se clasifică?
3.4. Instrucţiuni în VB.NET
Sunt instrucţiunile prin care se definesc variabile, constante, proceduri, clase, etc.
Cele mai importante instrucţiuni declarative în VB.NET sunt:
Instrucţiune
|
Nivel
|
Descriere
|
Exemple
|
Class
|
Fişier/ Clasă
|
Defineşte o clasă utilizator
|
Class Student
…
End Class
|
Const
|
Oricare
|
Declară una sau mai multe constante
|
Const Pi As Single = 3,14
|
Dim
|
Oricare
|
Declară una sau mai multe variabile (echivalent cu tipul Private)
|
Dim a, b As Integer
|
Enum
|
Fişier/ Clasă
|
Declară o enumerare, o listă de constante întregi, fiecare identificată printr-un nume
|
Enum MsgBoxRezult
Ok=1
Cancel=2
Abort=3
Retry=4
Ignore=5
Yes=6
No=7
End Enum
|
Function
|
Clasă
|
Defineşte o funcţie utilizator sau metodă
|
Function ArieCerc (r As Single) As Single
Const Pi As Single = 3,141
Return Pi*r^2
End Function
|
Property
Set
Get
|
Clasă
|
Declară proceduri specifice pentru scrierea/citirea proprietăţilor (atributelor) unei clase
|
Class Persoana
Private m_Nume As String
Public Property sNume() _
As String
Get
Return m_Nume
End Get
Set(ByVal numeNou As String)
m_Nume = numeNou
End Set
End Property
…
End Class
|
Interface
|
Fişier/ Clasă
|
Defineşte o interfaţă (clasă abstractă pură, ce conţine numai semnăturile operaţiilor)
|
Interface FormeGeometrice
…
End Interface
|
Namespace
|
Fişier
|
Defineşte un spaţiu de nume propriu aplicaţiei
|
Namespace Operaţii
…
End Namespace
|
Sub
|
Clasă
|
Defineşte o procedură utilizator sau o metodă
|
Sub AfiseazaArieDreptunghi (p1 As Single, p2 As Single)
MsgBox(p1*p2)
End Sub
| -
Instrucţiunile de control
Instrucţiunile de control (structurile de control) stabilesc ordinea de execuţie a prelucrărilor, de câte ori sau până când se execută anumite prelucrări.
Acestea pot fi grupate în:
-
structuri de control fundamentale (liniară, alternativă şi repetitivă cu test iniţial)
a) liniară
|
început
citeşte ...
atribuie ...
atribuie ...
....
* calculează ...
scrie ...
...
Sfârşit
|
Exemplu în VB.Net
Dim nota1 As Integer
Dim nota2 As Integer
nota1=InputBox(“Tastati nota1”)
nota2= InputBox(“Tastati nota2”)
MsgBox(“nota1= “ & nota1 & chr(13) & chr(10) & “ nota2= “ & nota2 )
MsgBox(“media notelor= ” & (nota1+nota2)/2)
b) alternativă
|
dacă condiţie atunci
secvenţa 1
altfel
secvenţa 2
sfârşit (comandă)
|
Grafic
|
Pseudocod
|
-implementarea în VB.NET
If expresieLogica = TRUE Then
secvenţa 1
else
secvenţa 2
End If
-exemplu
Dim notaLaProgramare As Integer
Dim nrPromovati As Integer
Dim nrNePromovati As Integer
notaLaProgramare=InputBox(“Tastati nota la programare”)
If notaLaProgramare > 4 Then
nrPromovati= nrPromovati+1
Else
nrNePromovati= nrNePromovati+1
End If
MsgBox(”Promopvati: ” & nrPromovati & ”Nepromopvati: ” & _ nrNePromovati)
c) structura repetitivă cu test iniţial
|
Cât timp condiţie execută
secvenţa
sfârşit comandă
|
Grafic
|
Pseudocod
|
-implementarea în VB.NET
While conditieLogica
Secvenţa care se repetă
End While
-exemplu
Dim raspuns As String =”da”
Dim numarIntreg As Integer
Dim sumaNumerelor As Integer
sumaNumerelor=0
While Raspuns=”da”
numarIntreg=InputBox(“Tastati un numar intreg: ”)
sumaNumerelor += numarIntreg
raspuns=Lcase(InputBox(“Mai sunt date? (da/nu)”))
End While
msgBox(“Suma calculata= ” & sumaNumerelor)
-
alte structuri de control
a) pseudo alternativă
- stânga
If expresieLogica = TRUE Then
else
secvenţa Nu
End If
- dreapta
If expresieLogica = TRUE Then
secvenţa Da
End If
b) If imbricat (if în if)
If conditie_1 Then
[Set_Instrucţiuni_1]
[ElseIf condiţie_2 Then
[Set_Instrucţiuni_2]]
...
[Else
[Set_Instrucţiuni_n]]
End If
Exemplu: Să se scrie o procedură care realizează o „apreciere” în funcţie de valoarea notei obţinute.
Sub Apreciere(iNota As Integer)
If iNota = 9 Or iNota = 10 Then
MsgBox "foarte bine"
ElseIf iNota = 7 Or iNota = 8 Then
MsgBox "bine"
ElseIf iNota = 5 Or iNota = 6 Then
MsgBox "satisfacator"
Else
MsgBox "mai invata"
End If
End Sub
c) structura alternativă generalizată
- permite execuţia selectivă a unui singur bloc de instrucţiuni ales dintre mai multe blocuri în funcţie de o condiţie (opţiune) stabilită. O instrucţiune Select Case are aceleaşi posibilităţi cu instrucţiunea If ... Then ... Else, dar ea face codul mai lizibil atunci când există mai multe opţiuni.
Select Case expresie de testat
[Case lista de expresii 1
[bloc de instrucţiuni 1]]
[Case lista de expresii 2
[bloc de instrucţiuni 2]]
.
.
.
[Case Else
[bloc de instrucţiuni n]]
End Select
Notă:
Execuţia unei instrucţiuni Select Case începe întotdeauna prin evaluarea expresiei de test, care poate fi o expresie numerică sau o expresie şir de caractere. Visual Basic compară apoi rezultatul acestei expresii cu valorile din fiecare bloc Case al structurii. Dacă apare o echivalenţă, blocul de instrucţiuni asociat acelui Case va fi executat.
Fiecare listă de expresii este o listă având una sau mai multe valori. Dacă într-o singură listă se află mai multe valori, ele trebuie separate prin virgule. Fiecare bloc de instrucţiuni conţine zero sau mai multe instrucţiuni. Dacă mai multe clauze Case sunt echivalente cu expresia de testat, doar blocul de instrucţiuni asociat primei clauze Case echivalente, va fi executat. Visual Basic execută instrucţiunile din clauza Case Else (care este opţională) doar dacă nici una din valorile din lista de expresii nu este egală cu expresia de testat.
Observaţie:
În lista de expresii se pot defini: enumerări separate prin virgulă; domenii închise cu ajutorul cuvântului rezervat To (exemplu de la 20 la 41 impune “20 To 41” (sau Between 20 And 41); intervale (domenii) deschise definite prin cuvântul rezervat Is şi a operatorilor de comparaţie > (mai mare) sau < (mai mic) şi alţi operatori de comparaţie (=, <>, >=,<=); etc.
Exemplu:
Dim tipCont As String = Ucase(InputBox(“Tasatati tip cont”))
Select Case tipCont
Case ”A”
MsgBox(”Cont de activ”)
Case ”P”
MsgBox(”Cont de pasiv”)
Case ”B”
MsgBox(”Cont de bifunctional”)
Case Else
MsgBox(”Tip cont eronat”)
End Select
d) structura repetitivă cu test final
e) structuri repetitive cu test iniţial (anterior) sau final (posterior)
-cu test iniţial
Do [{While | Until} condiţie]
[Set_Instrucţiuni_1]
[Exit Do]
[Set_Instrucţiuni_2]
Loop
-cu test final
Do
[Set_Instrucţiuni_1]
[Exit Do]
[Set_Instrucţiuni_2]
Loop [{While | Until} condiţie]
f) cu număr cunoscut de paşi (cu contor) sau structura For …Next
Sintaxă:
For contor=val_iniţială TO val_finală [Step pas]
[Set_Instrucţiuni_1]
[Exit For]
[Set_Instrucţiuni_2]
Next [contor]
Practic, execuţia ciclului For Next presupune:
-
Se iniţializează început, sfârşit şi opţional pas. Fixează contorul egal cu început.
-
Testează dacă valoarea din contor este mai mare decât sfârşit (pentru valoarea pasului pozitivă) sau dacă valoarea din contor este mai mică decât sfârşit (pentru valoarea pasului negativă). Dacă da, se iese din buclă.
-
Execută instrucţiunile.
-
Modifică contorul cu 1 sau cu valoarea pasului, dacă există.
-
Se reia pasul 2.
Comanda Exit For poate fi plasată oriunde în cazul instrucţiunii For…Next şi ori de câte ori se consideră necesar, constituind o alternativă de ieşire din ciclu (de terminare a ciclului) fără a parcurge toate prelucrările şi fără a aştepta îndeplinirea condiţiei de sfârşit ciclu. Comanda apare de regulă după evaluarea (testarea) unei condiţii şi în funcţie de rezultat se poate decide (printr-o comandă If…Then) continuarea execuţiei cu prima instrucţiune după Next, dacă avem o buclă simplă sau întoarcerea la bucla de nivel imediat superior, dacă bucla este imbricată.
Exemplu:
Să se realizeze funcţia care returnează media elementelor unui vector.
Function medie(vector() As Double) As Double
Dim i As Integer
Dim dTotal As Double
Dim iNrElem As Integer
iNrElem = 0
dTotal = 0
For i = LBound(vector) To UBound(vector)
dTotal = dTotal + vector(i)
iNrElem = iNrElem + 1
Next i
medie = dTotal / iNrElem
End Function
d) Instrucţiunea For Each ... Next
O buclă For Each ... Next seamănă cu bucla For ... Next, însă ea repetă o serie de instrucţiuni pentru fiecare element dintr-o colecţie de obiecte sau din cadrul unei matrice, în loc să repete instrucţiunile de un număr dat de ori. Acest lucru este util mai ales când nu se ştie exact câte elemente are o colecţie.
Sintaxa unei bucle For Each ... Next este:
For Each element In grup
[bloc de instrucţiuni 1]
[Exit For]
[bloc de instrucţiuni 2]
Next [element]
Alte instrucţiuni executabile
Cele mai utilizate instrucţiuni executabile altele decât cele de control sunt:
Instrucţiune
|
Descriere
|
Exemple
|
Call
|
Apelează o procedură uneori şi funcţie la care nu ne interesează rezultatul returnat
|
Call AfiseazaArieDreptunghi(4.1,2.3)
|
End
|
Termină execuţia programului
|
End
|
Imports
|
Importă elementele unui spaţiu de nume în fişierul sursă
|
Import System.Math
|
Option Explicit
|
Activează On sau dezactivează Off obligativitatea declarării explicite a variabilelor, înaintea utilizării lor
|
Option Explicit On
Option Explicit Off
|
Option Strict
|
Activează On sau dezactivează Off conversiile implicite efectuate cu restrângerea domeniului
|
Option Strict On
Option Strict Off
|
Rem
|
Defineşte un comentariu
|
Rem Urmeaza initializarea
|
Return
|
Determină ieşirea dintr-o procedură sau funcţie cu întoarcerea rezultatului în cazul funcţiilor
|
Return
Return PI*r^2
|
Stop
|
Suspendă temporar execuţia programului (Reluarea se face cu F5 - Run)
|
Stop
|
Întrebări
1. Ce sunt instrucţiunile declarative?
2. Ce sunt instrucţiunile de control?
3. Care sunt structurile fundamentale de control specifice programării structurate şi cum sunt implementate în VB.NET?
4. Ce alte structuri de control au mai fost implementate în VB.Net în afara celor fundamentale?
3.5. Subprograme în VB.NET
Subprogramele în VB.NET sunt definite de proceduri şi funcţii. Procedurile şi funcţiile por fi intrinseci (definite de MS şi incluse în bibliotecile de bază ale sistemului) sau definite de utilizator.
-
Funcţiile de sistem (intrinseci)
Funcţiile de sistem sunt unităţi lexicale definite de creatorul limbajului care execută anumite prelucrări. În VB numele unei funcţii trebuie urmate de paranteze rotunde (), între care se introduc parametrii actuali dacă este cazul. Apelul lor este permis doar în interiorul subprogramelor (proceduri sau funcţii). Deoarece funcţiile întorc prin numele său o valoare pot fi utilizate şi ca operanzi într-o expresie.
În VB.NET pentru funcţiile de sistem au fost definite metode care respectă toate cerinţele programării .NET. Existenţa funcţiilor este legată doar de compatibilitatea cu versiunile anterioare ale lui VB.
Principalele categorii de funcţii intrinseci (de sistem) în VB sunt:
a) Funcţii pentru conversii de tipuri
- permit conversia valorilor dintr-un tip de date în altul
- principalele funcţii din această categorie sunt:
Funcţie
|
Descriere
|
Exemple
|
Asc(c)
AscW(c)
|
Returnează codul ASCII sau UNICODE al caracterului c; rezultatul este de tip întreg
|
|
CBool(e)
CByte(e)
CChar(e)
CDate(e)
Cdble(e)
CDec(e)
CInt(e)
CLng(e)
CSng(e)
CStr(e)
|
Converteşte o expresie (compatibilă) în tipul specificat: Boolean, Byte, Character,etc.
|
|
Chr (i)
ChrW(i)
|
Returnează caracterul ASCII sau UNICODE aferent întregului i
|
|
CType(e,t)
|
Converteşte expresia (e) compatibilă în tipul specificat (t)
|
Dim i As integer
i= CType(“34”,Integer)
|
Format(e,f)
|
Converteşte espresia (e) în şir de caractere după formatul (f) specificat
|
MsgBox(Format(3.7,”#0.00”))
|
Str(n)
|
Converteşte numărul n (cu separatorul . pentru virgulă) într-un şir de caractere
Când nu lucrăm în sistemul anglo-saxon se preferă funcţia CStr(e)
|
|
Val(s)
|
Converteşte şirul s în număr
Când nu lucrăm în sistemul anglo-saxon se preferă funcţia CNumeric(e)
|
|
b) Funcţii pentru operaţii cu şiruri de caractere
- mai sunt păstrate în VB.NET din motive de compatibilitate cu versiunile anterioare ale limbajului VB
- în VB.NET este de recomandat să se utilizeze metodele clasei String (IndexOf, Replace, Substring, ToLower, ToUpper, Trim, etc.)
- principalele funcţii pentru operaţii cu şiruri de caractere sunt:
Funcţie
|
Descriere
|
Exemple
|
Instr(s1,s2)
|
Returnează prima poziţie în care apare şirul de caractere s2 în cadrul şirului s1 (0 dacă s2 nu se regăseşte în s1)
|
|
LCase(s)
|
Transformă literele şirului s în litere mici
|
|
Len(s)
|
Returnează numărul de caractere din şirul s
|
|
Mid(s,p,l)
|
Extrage din şirul s, un subşir începând din poziţia p de lungime l (numărătoarea) începe de la zero
|
|
UCase(s)
|
Transformă literele şirului s în litere mari
|
|
Trim(s)
|
Elimină spaţiile de la începutul sau sfârşitul şirului s
|
|
c) Funcţii pentru operaţii cu date calendaristice
Funcţie
|
Descriere
|
Exemple
|
Day(d)
|
Extrage ziua din data caendaristică d
|
|
DateAdd(i,nr,d)
|
Returnează o dată calendaristică nouă obţinută prin adunarea la o dată calendaristică iniţială d a unui interval nr de un anumit tip i (DateInterval.Day, DateInterval.Month, etc.)
|
|
DateDiff(i,d1,d2)
|
Returnează diferenţa (intervalul) de tipul intervalului i specificat (DateInterval.Day, DateInterval.Month, etc.) dintre datele calendaristice d2 şi d1
|
|
Month(d)
|
Extrage luna dintr-o dată calendaristică d
|
|
Now()
|
Returnează data şi ora siatemului
|
|
Year(d)
|
Extrage anul dintr-o dată calendaristică d
|
|
d) Funcţii de informare
- testează apartenenţa unei variabile la un anumit tip de dată
Funcţie
|
Descriere
|
Exemple
|
IsArray(e)
|
Returnează True dacă argumentul este vector şi False în caz contrar
|
|
IsDate(e)
|
Returnează True dacă argumentul este dată calendaristică şi False în caz contrar
|
|
IsNothing(e)
|
Returnează True dacă argumentul este un obiect concret şi False în caz contrar
|
|
IsNumeric(e)
|
Returnează True dacă argumentul este numeric şi False în caz contrar
|
|
IsReference(e)
|
Returnează True dacă argumentul este de tip referinţă şi False în caz contrar
|
|
TypeName(e)
|
Returnează numele tipului argumentului e
|
|
e) Funcţii pentru interacţiunea cu utilizatorul final
- cele mai utilizate sunt InputBox (p1, [p2],[p3]) şi MsgBox(p4, [p5],[p6])
Unde: p1, p4-mesajul afişat; p2,p6 –titlul ferestrei, p3-valoarea predefinită, p5-butoanele generate
f) Funcţii matematice
g) Funcţii financiare
-
Subprogramele definite de utilizator
Subprogramele definite de utilizator reprezintă proceduri sau funcţii definite de utilizator, formate din blocuri de instrucţiuni destinate realizării împreună a unor operaţii pentru atingerea unui obiectiv.
Procedurile (numite şi subrutine) sunt subprograme care nu returnează valori.
Funcţiile sunt subprograme ca returnează o valoare prin numele funcţiei. Numele procedurii sau funcţiei şi lista de parametrii – definesc semnătura procedurii sau funcţiei.
Avantajele utilizării subprogramelor sunt:
-
simplifică programul (prelucrările ca se repetă se scriu o singură dată şi apoi sunt apelate – nu mai sunt inserate în program);
-
programele sunt mai uşor de verificat şi de întreţinut (se verifică mai întâi subprogramul şi după ce se constată că este corect – poate fi utilizat cu încredere; când se fac modificări acestea se fac doar în subprogramele afectate restul programului nu este afectat);
-
se încurajează reutilizarea (subprogramele pot fi utilizate în mai multe programe sau proiecte).
Procedurile şi funcţiile utilizatorului, în cadrul claselor se numesc metode.
-
Definirea şi apelul unei proceduri (subrutine)
Public/Private/Protected/Friend/… Sub numeSubrutina ([Listă parametrii _ formali])
Instrucţiuni
[Return]
End Sub
- la apel se execută prelucrările cuprinse între Sub şi End Sub sau între Sub şi prima instrucţiune Return/Exit întâlnită după care prelucrarea va continua cu instrucţiunea următoare celei care a apelat-o
- prelucrările se fac asupra (cu valorile) parametrilor actuali (reali) transmişi la apel
[Call] numeSubrutina([Listă parametrii actuali])
-
Definirea şi apelul unei funcţii
Public/Private/Protected/Friend/… Function numeFunctie([Listă parametrii _ formali]) [As tipRezultat]
Instrucţiuni
[Return expresie]
End Function
- la apel se execută prelucrările cuprinse între Function şi End Function sau între Function şi prima instrucţiune Return/Exit întâlnită, după care prelucrarea va continua cu instrucţiunea următoare celei care a apelat-o sau imediat după locul apelului în cazul utilizării în cadrul unei expresii
- prelucrările se fac asupra (cu valorile) parametrilor actuali (reali) transmişi la apel
- deoarece numele Funcţiei întoarce un rezultat atunci: fie numele funcţiei va apare cel puţin o dată în partea stângă a unei expresii de atribuire, fie se va utiliza Return expresie (expresia este cea care calculează şi întoarce rezultatul)
[Call] numeFunctie([Listă parametrii actuali])
- când se ignoră (nu se valorifică) rezultatul returnat de funcţie
[rezultat =] numeFunctie([Listă parametrii actuali])
- când se valorifică rezultatul returnat de funcţie prin variabila rezultat sau în cadrul unei expresii
-
Transmiterea parametrilor subprogramelor
Parametrii pot fi transmişi subprogramelor:
-
prin valoare ByVal (implicit):
Sunt transmise copii ale valorilor supuse prelucrării şi dacă acestea se modifică prin subprogram, valorile iniţiale rămân nemodificate.
Sunt transmise adresele din memorie a valorii parametrilor şi dacă aceste valori vor fi modificate prin subprogram vor fi modificate şi valorile iniţiale.
Specificaţia ByVal sau ByRef se face la definirea subprogramelor în lista de parametrii formali pentru fiecare parametru în parte.
Exemple:
a) definire şi apel procedură
- definire
Private Calcule(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer)
Dim suma1 As Integer
Dim produs1 As Integer
Dim xminusy As Integer
Dim ximpartity As Single
suma1=x+y+z
produs1=x*y*z
xminusy=x-y
ximpartity=x/y
msgbox(“ximpartity= ” & ximpartity)
End Sub
-apel
[Call] Calcule(8,4,2)
b) definire şi apel funcţie
-definire
Private Function CalculArieDreptunghi(ByVal lungime As Integer, ByVal latime As Integer) As Integer
CalculArieDreptunghi= lungime * latime
End Function
sau
Private Function CalculArieDreptunghi(ByVal lungime As Integer, ByVal latime As Integer) As Integer
Return lungime * latime
End Function
-apel funcţie
Dim a As Integer=10
Dim b As Integer=5
Dim inaltime As Integer = 6
Dim arie As integer
Dim volum As Integer
MsgBox(“Aria dreptunghiului este: ” & CalculArieDreptunghi(a, b))
arie= CalculArieDreptunghi(a, b)
volum = arie * inaltime
Întrebări
1. Ce categorii principale de funcţii intrinseci sunt implementate în VB.NET.
2. Ce sunt subprogramele şi cum se transmit parametrii?
3. Cum se defineşte şi cum se apelează o funcţie definită de utilizator?
-
Bibliografie Unitatea de învăţare 1
-
A. COZGAREA – Programarea calculatoarelor, introducere în VB.NET, Editura ASE Bucureşti, 2008;
-
Gh. POPESCU – Programarea calculatoarelor în limbajul Visual Basic, Editura Gestiunea Bucureşti, 2007.
Copyright Catedra Informatică de Gestiune, 2010
Dostları ilə paylaş: |