Sunteți pe pagina 1din 27

C4 Instrucţiuni şi subprograme in VB.

NET
1) Ce sunt instrucţiunile declarative?

-instrucţiunile prin care sunt definite variabile, constante, proceduri, clase,


etc.

2) Care sunt cele mai importante instrucţiuni declarative în VB.NET?

Instrucţiune Nivel Descriere Exemple


Class Fişier/ Defineşte o clasă Class Student
Clasă utilizator

End Class
Const Oricare Declară una sau Const Pi As Single = 3,14
mai multe
constante
Dim Oricare Declară una sau Dim a, b As Integer
mai multe
variabile
Enum Fişier/ Declară o Enum MsgBoxRezult
Clasă enumerare, o listă
Ok=1
de constante
întregi, fiecare Cancel=2
identificată printr-
Abort=3
un nume
Retry=4

Ignore=5

Yes=6

No=7

End Enum
Function Clasă Defineşte o Function ArieCerc (r As Single) _
funcţie utilizator As Single
sau metodă
Const Pi As Single = 3,141

Return Pi*r^2

End Function
Property Clasă Declară proceduri Class Persoana
specifice pentru
Set Private sNume As String
scrierea/citirea
Get proprietăţilor Public Property sNume() _
(atributelor) unei
As String
clase
Get

Return sNume

End Get

Set(ByVal numeNou As String)

sNume = numeNou

End Set

End Property

End Class
Interface Fişier/ Defineşte o Interface FormeGeometrice
Clasă interfaţă (clasă

abstractă pură, ce
conţine numai End Interface
semnăturile
operaţiilor)
Namespace Fişier Defineşte un Namespace Operaţii
spaţiu de nume
propriu aplicaţiei …

End Namespace
Sub Clasă Defineşte o Sub AfiseazaArieDreptunghi _
procedură (p1 As Single, p2 As Single)
utilizator sau o
MsgBox(p1*p2)
metodă
End Sub

3) Ce sunt instrucţiunile executabile, unde pot fi folosite şi cum pot fi


clasificate?

-instrucţiunile care declanşează anumite acţiuni ale programului

-pot fi folosite de regulă la nivelul subprogramelor (funcţii sau proceduri), cu


excepţia instrucţiunilor Option şi Import care sunt folosite de regulă la nivel
de fişier sursă

-se clasifică în instrucţiuni de control (structuri de control) şi alte instrucţiuni


executabile

4) Care sunt cele mai utilizate instrucţiuni executabile altele decât cele de control?

Instruc_ Descriere Exemple


ţiune
Call Apelează o procedură Call AfiseazaArieDreptunghi(4.1,2.3)
uneori şi funcţie la care
nu ne interesează
rezultatul returnat
End Termină execuţia End
programului
Imports Importă elementele unui Import System.Math
spaţiu de nume în fişierul
sursă
Option Activează On sau Option Explicit On
Explicit dezactivează Off
Option Explicit Off
obligativitatea declarării
explicite a variabilelor,
înaintea utilizării lor
Option Activează On sau Option Strict On
Strict dezactivează Off
Option Strict Off
conversiile implicite
efectuate cu restrângerea
domeniului
Rem Defineşte un comentariu Rem Urmeaza initializarea
Return Determină ieşirea dintr-o Return
procedură sau funcţie cu
Return Pi*r^2
întoarcerea rezultatului în
cazul funcţiilor
Stop Suspendă temporar Stop
execuţia execuţia
programului (Reluarea se
face cu F5 - Run)

5) Ce sunt funcţiile de sistem (intrinseci) în VB.NET?

-funcţiile VB.NET sunt unităţi lexicale definite de creatorul limbajului care


execută anumite prelucrări; care pot fi apelate pentru a executa anumite
prelucrări predefinite

-în VB numele unei funcţii trebuie urmate de paranteze rotunde (), între
care se introduc parametrii actuali dacă este cazul şi sunt permise doar în
interiorul subprogramelor (proceduri sau funcţii)

-deoarece funcţiile întorc prin numele său o valoare, aşa cum am mai
precizat, funcţiile pot fi utilizate şi ca operanzi într-o expresie
6) Care sunt principalele categorii de funcţii intrinseci (de sistem) în
VB.NET?

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) Returnează codul ASCII
sau UNICODE al
AscW(c)
caracterului c; rezultatul
este de tip întreg
CBool(e) Converteşte o expresie
(compatibilă) în tipul
CByte(e)
specificat: Boolean, Byte,
CChar(e) Character,etc.

CDate(e)

Cdble(e)

CDec(e)

CInt(e)

CLng(e)

CSng(e)

CStr(e)
Chr (i) Returnează caracterul
ASCII sau UNICODE
ChrW(i)
aferent întregului i
CType(e,t) Converteşte expresia (e) Dim i As integer
compatibilă în tipul i= CType(“34”,Integer)
specificat (t)
Format(e,f) Converteşte espresia (e) în MsgBox(Format(3.7,”#0.00”))
şir de caractere după
formatul (f) specificat
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

7) Ce sunt (ce reprezintă) subprogramele definite de utilizator şi de


câte feluri sunt?

-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

8) Care (ce) este semnătura unui subprogram?

-numele procedurii sau funcţiei şi lista de parametrii

9) Care sunt avantajele utilizării subprogramelor?

-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 (sunprogramele pot fi utilizate în mai multe


programe sau proiecte)

10) Cum se defineşte o procedură (subrutină) şi ce face?

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

11) Cum se apelează o procedură?

[Call] numeSubrutina([Listă parametrii actuali])

12) Cum se defineşte o funcţie şi ce face?

Public/Private/Protected/Friend/… Sub 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 numeleFunctiei întoarce un rezultat atunci: fie numele funcţiei va


apare cel puţin o dată în partea stângă a unei expresii de atribuire, fi se va
utiliza Retun expresie (expresia este cea care calculează şi întoarce
rezultatul)

13) Cum se apelează o funcţie?

[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

14) Cum pot fi transmişi parametrii subprogramelor şi unde se


specifică aceasta?

- prin valoare ByVal (implicit) când sunt transmise copii ale valorilor supuse
prelucrării şi dacă acestea se modifică prin subprogram, valorile iniţiale
rămân nemodificate

-prin referinţă ByRef când 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

15) Ce reguli trebuie să se respecte în general pentru ca transferul


parametrilor să se facă corect?

- în general lista parametrilor formali trebuie să corespundă cu lista


parametrilor actuali ca: număr, ordine şi tip
-numărul poate fi diferit când există parametrii opţionali

16) 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

17) Care sunt structurile de control fundamentale şi cum sunt


implementate în VB.NET?

-liniară, alternativă, 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)

18) Ce alte structuri alternative mai sunt implementate în VB.NET?

a) pseudo alternativă
Schema logica Pseudocod

-stânga
Daca conditie atunci
NU DA
Altfel
Conditie
Set_Instructiuni

Sfârsit daca
Set_Instructiuni
If expresieLogica = TRUE Then

else

secvenţa Nu

End If

-dreapta

Schema logica Pseudocod

Daca conditie atunci


NU DA
Set_Instructiuni
Conditie
Sfârsit daca

Set_Instructiuni

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

1. 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.

Schema logica Pseudocod

Alege expresie dintre


valoare_1: Set_Instructiuni_1
expresie valoare_2: Set_Instructiuni_2
...
valoare_n: Set_Instructiuni_n

Altfel
valoare_n

Set_Instructiuni_n+1

Sfârsit alege

Set_Instructiuni_1 ... Set_Instructiuni_n Set_Instructiuni_n+1


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
Schema logică Pseudocod
19) Ce alte structuri repetitive mai sunt implementate în VB.NET?

a) structura repetitivă cu test final


Repeta

Set_Instrucţiuni

Atât timp cât conditie


Set_Instrucţiuni

DA
Condiţie

NU
b) 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]

c) cu număr cunoscut de paşi (cu contor) sau structura For …Next


Schema logica Pseudocod

Pentru contor = val_initiala


contor = val_initiala
pâna la val_finala cu pas

Set_Instructiuni

Repeta

DA
contor <=
val_finala

Set_Instructiuni

NU
contor=contor+pas
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:

1. Se iniţializează început, sfârşit şi opţional pas. Fixează contorul egal cu început.


2. 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ă.
3. Execută instrucţiunile.
4. Modifică contorul cu 1 sau cu valoarea pasului, dacă există.
5. 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 matrici, î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]

S-ar putea să vă placă și