Sunteți pe pagina 1din 14

UNIVERSITATEA TEHNICĂ A MOLDOVEI

Facultatea Informatică, Calculatoare și Microelectronica


Departamentul Informatică și Ingineria Sistemelor

Lucrare de laborator nr. 3


la disciplina Programarea Procedurală

Tema: Funcții definite de utilizator

Examinator:Braniște Rodica

Chișinău 2020
Sarcina lucrării: Definirea unor funcții în VBA pentru prelucrarea vectorilor.
Se va crea o aplicație care va calcula suma elementelor unui vector, minimul și maximul unui
vector, va scalariza un vetor, va afla suma a doi vectori, va sorta vectorul prin metoda Bubble, va
scădea o constantă și va afla diferența dintre doi vectori.

Descrierea aplicației create:


Forma UserForm1 are mai multe pagini, iar pe fiecare dintre ele este afișat butonul la tastarea
căruia se va efectua operația cu vectorul.

Pagina ”Suma Vector”


are un cîmp în care, la
tastarea butonul SUMA,
se va afișa suma
elementelor din vector.

Pagina ”MinMaxVector”
conține doua cîmpuri în
care, la tastarea butonul
MIN si MAX, se va afișa
separat elementul minim
și elementul maxim din
vector.
Pagina ”Scale Vector”
conține un câmp în care
se va introduce constanta
cu care se va înmulți
fiecare element din
vector și un câmp pentru
introducerea numărului
coloanei în care se va
afișa vectorul scalarizat.

Pagina ”Suma a 2
vectori” conține 2
câmpuri pentru introdu-
cerea ariei vectorilor ce
urmează a fi sumați și un
câmp pentru
introducerea numărului
coloanei în care se va
afișa vectorul sumat.
Pagina ”Sortare
Vector” conține un
câmp pentru intro-
ducerea numărului
coloanei de inserție a
vectorului sortat prin
metoda Bubble.

Pagina ”Scadere
constanta” conține un
câmp pentru intro-
ducerea unui număr
care se va scădea din
fiecare element al
vectorului și un cîmp
pentru introducerea
coloanei de inserție a
vectorului obținut.
Pagina ”Scadere a
2 vectori” conține
2 câmpuri pentru
introducerea ariei
vectorilor ce se
vor scădea și un
câmp pentru
introduce-rea nr.
coloanei în care se
va afișa vectorul
obținut.

Dacă lansăm aplicația, obținem următoarele rezultate:


Codul în VBA:
Funcțiile utilizatorului:
Public Function SumaVector(rng As Range) As Double
Dim i As Integer
Dim n As Integer
Dim Suma As Double
n = rng.Rows.Count
ReDim vect(1 To n) As Double
Suma = 0
For i = 1 To n
vect(i) = rng(i)
Suma = Suma + vect(i)
Next i
SumaVector = Suma
End Function

Public Function MaxVector(rng As Range) As Double


Dim i As Integer
Dim n As Integer
Dim max As Double
' Preluarea plajei de celule
n = rng.Rows.Count
ReDim vect(1 To n) As Double
For i = 1 To n: vect(i) = rng(i): Next i
max = vect(1)
For i = 2 To n
If (vect(i) > max) Then
max = vect(i)
End If
Next i
MaxVector = max
End Function

Public Function MinVector(rng As Range) As Double


Dim i As Integer
Dim n As Integer
Dim min As Double
n = rng.Rows.Count
ReDim vect(1 To n) As Double
For i = 1 To n: vect(i) = rng(i): Next i
min = vect(1)
For i = 2 To n
If (vect(i) < min) Then
min = vect(i)
End If
Next i
MinVector = min
End Function
Public Function ScaleVector(rng As Range, sc As Double) As Double()
Dim i As Integer
Dim n As Integer
n = rng.Rows.Count
ReDim vect(1 To n) As Double
For i = 1 To n: vect(i) = rng(i): Next i
ReDim scaled(1 To n) As Double
For i = 1 To n
scaled(i) = sc * vect(i)
Next i
ScaleVector = scaled
End Function

Public Function Suma2Vec(rng1 As Range, rng2 As Range) As Variant


Dim i As Integer
Dim n1 As Integer
Dim n2 As Integer
n1 = rng1.Rows.Count
n2 = rng2.Rows.Count
If (n1 <> n2) Then
Suma2Vec = "Dimensiuni inegale."
Exit Function
End If
ReDim vect(1 To n1) As Double
For i = 1 To n1
vect(i) = rng1(i) + rng2(i)
Next i
Suma2Vec = vect
End Function

Public Function Bubble(rng As Range) As Double()


Dim temp As Double
Dim i As Integer, j As Integer, n As Integer
n = rng.Rows.Count
ReDim A(1 To n) As Double
For i = 1 To n
A(i) = rng(i)
Next i
For i = 1 To n - 1
For j = 1 To n - i
If (A(j) > A(j + 1)) Then temp = A(j)
A(j) = A(j + 1)
A(j + 1) = temp
End If
Next j
Next i
Bubble = A
End Function
Public Function ScadConst(rng As Range, sc As Double)
Dim i As Integer
Dim n As Integer
n = rng.Rows.Count
For i = 1 To n: vect(i) = rng(i): Next i
ReDim scazut(1 To n) As Double
For i = 1 To n
scazut(i) = vect(i) - sc
Next i
ScadConst = scazut
End Function

Public Function Scad2Vec(rng1 As Range, rng2 As Range) As Variant


Dim i As Integer
Dim n1 As Integer
Dim n2 As Integer
n1 = rng1.Rows.Count
n2 = rng2.Rows.Count

If (n1 <> n2) Then


Scad2Vec = "Dimensiuni inegale."
Exit Function
End If
ReDim scad(1 To n1) As Double
For i = 1 To n1
scad(i) = rng1(i) - rng2(i)
Next i
Scad2Vec = scad
End Function

Subprocedurile:

Dim vect As Range

Private Sub CommandButton3_Click()


Dim c As Double
Dim n As Integer, col As Integer
n = vect.Rows.Count
c = TextBox1.Value
ReDim scal(1 To n) As Double
scal = ScaleVector(vect, c)
col = TextBox2.Value
Cells(1, col).Value = "Scaled"
For i = 1 To n
Cells(i + 1, col).Value = scal(i)
Next i
End Sub
Private Sub CommandButton4_Click()
Dim vect1 As Range
Dim vect2 As Range
Dim rez As Variant
Dim col As Integer

Set vect1 = Range(TextBox3.Value)


Set vect2 = Range(TextBox4.Value)

rez = Suma2Vec(vect1, vect2)

If (VarType(rez) = vbString) Then


MsgBox rez
Else
col = TextBox5.Value
Cells(1, col).Value = "Suma a 2 vectori"

For i = 1 To vect1.Rows.Count
Cells(i + 1, col).Value = rez(i)
Next i
End If

End Sub

Private Sub CommandButton5_Click()


Dim col As Integer

ReDim rez(1 To vect.Rows.Count) As Double


rez = Bubble(vect)
col = TextBox6.Value
Cells(1, col).Value = "Sorted Vector"
For i = 1 To vect.Rows.Count
Cells(i + 1, col).Value = rez(i)
Next i

End Sub

Private Sub CommandButton6_Click()


Dim c As Double
Dim n As Integer
Dim col As Integer

n = vect.Rows.Count
c = TextBox7.Value

ReDim scad(1 To n) As Double


scad = ScadConst(vect, c)

col = TextBox8.Value
Cells(1, col).Value = "Scadere constanta"
For i = 1 To n
Cells(i + 1, col).Value = scad(i)
Next i
End Sub

Private Sub CommandButton1_Click()


UserForm1.Hide
End Sub

Private Sub CommandButton2_Click()


Dim min As Double
Dim max As Double

min = MinVector(vect)
max = MaxVector(vect)

Label91.Caption = "Minimul este: " & min


Label92.Caption = "Maximul este: " & max

End Sub

Private Sub CommandButton7_Click()


Dim vect1 As Range
Dim vect2 As Range
Dim rez As Variant
Dim col As Integer

Set vect1 = Range(TextBox9.Value)


Set vect2 = Range(TextBox10.Value)

rez = Scad2Vec(vect1, vect2)

If (VarType(rez) = vbString) Then


MsgBox rez
Else
col = TextBox11.Value
Cells(1, col).Value = "Scaderea a 2 vectori"

For i = 1 To vect1.Rows.Count
Cells(i + 1, col).Value = rez(i)
Next i
End If
End Sub

Private Sub Suma_Click()


Dim sum As Double
sum = SumaVector(vect)
Label90.Caption = "Suma este: " & sum
End Sub

Private Sub UserForm_Activate()


Set vect = Worksheets("Foaie1").Range(ActiveWindow.RangeSelection.Address)
End Sub

Concluzii:
În urma realizării lucrării de laborator am învățat cum se declară și se apelează funcțiile în
VBA, structura subrutinei și instrucțiunile simple utilizate în VBA și despre cum se pot modifica
proprietățile obiectelor la etapa de proiectare și de executare.

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