Sunteți pe pagina 1din 13

Lucrare de laborator nr.

Programarea procedurală

Tema: „Funcții definite de utilizator”

A efectuat student: Costin Alexandrina, gr. MI-212


Verficat de: Braniște Rodica

Chişinău 2022
Introducere

Sarcina acestei lucrări de laborator este crearea unei aplicații ce va rula în Excel și
va folosi un șir de funcții definite de programator destinate prelucrării vectorilor în
Excel.

Va fi creată o aplicație care calculează suma elementelor unui vector, suma a 2


vectori, va afla elementul minim și maxim al vectorului, va scalariza un vector și va
sorta un vector. Toate aceste acțiuni vor fi îndeplinite cu ajutorul funcțiilor definite de
către programator.

Sarcina individuală:
1. Elaboraţi forma propusă în lucrare.
2. Comentaţi detaliat codurile associate obiectelor formei propuse
3. Modificaţi forma şi codul respectiv pentru adăugarea cel puţin a doua
obiecte/evenimente.
4. Faceţi concluzii
5. Prezentaţi lucrarea profesorului.

1
Descrierea aplicaţiei create:

Forma are mai mult pagini, de unde


pot fi accesate diferite funcții. Pe
pagina ”Suma vector” se află un
buton la apăsarea căruia pentru
vectorul selectat în Excel va fi
calculată suma elementelor acestuia
și afișată pe această pagină

Pagina ”MinMax vector” conține


un buton care pentru vectorul
selectat află elemental minim și
maxim și-l afișează pe această
pagină.

2
Pagina Scale vector conține 2 cîmpuri de text unde utilizatorul trebuie să introducă constanta la care
va fi înmulțit vectorul și numărul coloanei unde va fi inserat vectorul scalarizat. Apăsînd pe butonul
”Scale” în coloana indicată va fi inserat vectorul scalarizat.

Pe pagina ”Sortare vector” este un


cîmp de text unde utilizatorul trebuie
să introducă numărul coloanei unde
va fi inserat vectorul sortat. Apăsînd
pe butonul ”Sortare” se va produce
sortarea.

Pagina produs vector conține 2


cîmpuri de text unde utilizatorul
trebuie să introducă constanta la care
va fi înmulțit vectorul și numărul

3
coloanei unde va fi inserat vectorul. Apăsînd pe butonul ”Produs” în coloana indicată va fi inserat
vectorul inmultit.

Pagina scadere vector conține 2


cîmpuri de text unde utilizatorul
trebuie să introducă constanta la care
va fi scazut vectorul și numărul
coloanei unde va fi inserat vectorul.
Apăsînd pe butonul ”scadere” în
coloana indicată va fi inserat
vectorul scazut.

Rezultatele obținute:

Figura 1: Screenshot pentru functia Suma

4
Figura 2: Screenshot pentru functia Scale

Figura 4: Screenshot pentru functia Sortare

5
Figura 5: Screenshot pentru functia MinMax

Figura 6: Screenshot pentru functia Scaderea

6
Figura 7: Screenshot pentru functia Produs

Concluzie

În lucrarea de laborator numărul 3 am lucrat cu funcțille, am creat o aplicație care v-


a calcula cifrele introduse în coloana (ex.”A”), le va suma, sorta, scala, v-a afișa
Minimul/Maximul etc.
Pentru început am creat userformul, unde am folosit din Toolbox, Multipage, pentru
a avea mai multe pagini, pe un userform, de asemena am aranjat și adăugat butoanele
necesare, pentru a rezolva sarcinile propuse. Odată ce am creat userformul, am adăugat codul
pentru fucnție, și pentru fiecare buton în parte am aplasat alte coduri necesare pentru a folosi
funcțiile.
7
Pe pagină adăugăm, simple cifre, și le selectăm, după accesăm butonul ”Open page”,
care ne va deschide userformul, și astfel v-om putea lucra cu butoanle.

Anexa Codului

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

8
Public Function Suma2Vec(rng As Range, rng2 As Range) As Variant
Dim i As Integer
Dim n As Integer
n = rng.Rows.Count
ReDim vect(1 To n) As Double
ReDim vect2(1 To n) As Double
ReDim Suma(1 To n) As Double
For i = 1 To n
vect(i) = rng(i)
vect2(i) = rng2(i)
Suma(i) = vect(i) + vect2(i)
Next i
Suma2Vec = Suma
End Function
Public Function ScaleVector(rng As Range, sc As Double) As Variant
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 Variant
For i = 1 To n
scaled(i) = sc * vect(i)
Next i
ScaleVector = scaled
End Function
Public Function Bubble(rng As Range) As Variant
Dim n As Integer
Dim i As Integer, j As Integer
Dim Temp As Double
n = rng.Rows.Count
ReDim vect(1 To n) As Double
For i = 1 To n: vect(i) = rng(i): Next i
For i = 1 To n - 1
For j = i + 1 To n
If vect(i) > vect(j) Then
Temp = vect(j)
vect(j) = vect(i)
vect(i) = Temp
End If
Next j
Next i
Bubble = vect
End Function
Public Function ScadConst(rng As Range, sc As Double)
Dim i As Integer
Dim n As Integer
n = rng.Rows.Count

ReDim scazut(1 To n) As Double


ReDim vect(1 To n) As Double
For i = 1 To n: vect(i) = rng(i): Next i

9
For i = 1 To n
scazut(i) = vect(i) - sc
Next i
ScadConst = scazut

End Function

Public Function ProdConst(rng As Range, sc As Double)


Dim i As Integer
Dim n As Integer
n = rng.Rows.Count

ReDim produs(1 To n) As Double


ReDim vect(1 To n) As Double
For i = 1 To n: vect(i) = rng(i): Next i
For i = 1 To n
produs(i) = vect(i) * sc
Next i
ProdConst = produs

End Function
Private Sub CommandButton1_Click()
Dim c As Double
Dim n As Double
Dim col As Integer
Dim vect As Range
Set vect = Selection
n = vect.Rows.Count
c = TextBox8.Value
ReDim prod(1 To n) As Double
scad = ScadConst(vect, c)
col = TextBox7.Value
Cells(1, col).Value = "scaderea "
For i = 1 To n
Cells(i + 1, col).Value = scad(i)
Next i
End Sub
Private Sub CommandButton2_Click()
Dim c As Double
Dim n As Double
Dim col As Integer
Dim vect As Range
Set vect = Selection
n = vect.Rows.Count
c = TextBox9.Value
ReDim prod(1 To n) As Double
prod = ProdConst(vect, c)
col = TextBox10.Value
Cells(1, col).Value = "produsul "
For i = 1 To n
Cells(i + 1, col).Value = prod(i)
Next i

10
End Sub

Private Sub cmdExit_Click()


UserForm1.Hide
Unload UserForm1
End Sub

Private Sub cmdMinMax_Click()


Dim rng As Range
Dim Ray
Set rng = Range(Range("a1"), Range("a" & Rows.Count).End(xlUp))
Ray = rng.Value
viewMin = Application.min(Ray)
Set rng = Range(Range("a1"), Range("a" & Rows.Count).End(xlUp))
Ray = rng.Value
viewMax = Application.max(Ray)
End Sub
Private Sub cmdScale_Click()
Dim c As Double
Dim n As Integer
Dim col As Integer
Dim vect As Range
Set vect = Selection
n = vect.Rows.Count
c = TextBox1.Value
Dim scal As Variant
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 cmdSort_Click()


Dim col As Integer
Dim vect As Range
Set vect = Selection
Dim rez As Variant
rez = Bubble(vect)
col = TextBox6.Value
Cells(1, col).Value = "Sorted"
For i = 1 To vect.Rows.Count
Cells(i + 1, col).Value = rez(i)
Next i
End Sub

Private Sub cmdSumeaza_Click()


Dim vect1 As Range
Dim vect2 As Range
Dim rez As Variant

11
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(i + 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 UserForm1_Activate()
Set vect = Worksheets("sheet1").Range(ActiveWindow.RangeSelection.Address)
End Sub

Private Sub Suma_Click()


Dim sum As Double
Dim vect As Range
Set vect = Selection
sum = SumaVector(vect)
Label8 = sum

End Sub

Private Sub TextBox3_Change()

End Sub

Private Sub UserForm_Click()

End Sub

12

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