Professional Documents
Culture Documents
< < +
+
=
1 2
1 0 3
0 2
2
x x
x x
x x x
x f
1. Activai VBE si in modulul Module1 adugai urmtorul cod:
Public Function Functie(x As Double) As Double
If (x <= 0) Then
Functie = x ^ 2 + 2 * x
Else
If (x >= 0) Then
Functie = 2 * x
Else
Functie = x + 3
End If
End If
End Function
2. Adugai puncte de oprire in fiecare din ramurile de execuie ale algoritmului si executai funcia pentru
diferite valori ale lui x pentru a parcurge fiecare dintre ramurile de execuie.
Algoritmi ciclici cu numr cunoscut de pai
Vom scrie o funcie VB care evalueaz factorialul unui numr (schema logica a funciei a fost prezentata in
laboratorul Algoritmi si scheme logice):
1. Activai VBE si in modulul Module1 adugai urmtorul cod:
Public Function Factorial(n As Long) As Long
Dim i As Integer
Factorial = 1
For i = 1 To n
Factorial = Factorial * i
Next i
End Function
2. Adugai un punct de oprire in linia Factorial = Factorial * i si executai aceasta funcie pentru diferite
valori ale lui n.
Obs. Vom remarca ca funcia Factorial poate calcula valori ale factorialului pentru numere cuprinse intre 1 si
12. Daca numrul este mai mare dect 12 se produce o depire a capacitii de stocare a variabilelor
de tip long.
3. Modificai funcia astfel nct pentru numere mai mari dect 12, funcia factorial sa returneze un mesaj de
eroare.
Public Function Factorial(n As Long) As Variant
Dim i As Integer
If (n > 12) Then
Factorial = "Depasire"
Else
Factorial = CLng(1)
For i = 1 To n
Factorial = Factorial * i
Next i
End If
End Function
Obs. Remarcam ca am transformat tipul de data al funciei din Long in Variant. Tipul de data Variant poate
retine oricare din tipurile de date numerice (Integer, Long, Single) sau de tip sir de caractere (String).
In ramura Else am adugat o funcie de conversie VB Convert to Long (CLng).
Inspectarea variabilelor cu Inspectorul
4. Adugai doua puncte de oprire in liniile Factorial =
"Depasire" si Factorial = CLng(1).
5. Mutai cursorul in interiorul variabilei Factorial si din meniul
Debug lansai comanda Add Watch.
6. In fereastra de dialog Add Watch asigurai-v ca in cmpul
Expression apare numele variabilei Factorial
7. Apsai Enter.
Remarcai deschiderea ferestrei Watches in
VBE.
8. Reexecutai codul funciei Factorial pentru
valori ale variabilei n mai mici sau mai mari
dect 12 si urmrii valoarea si tipul
variabilei Factorial in fereastra Watches.
9. Modificai expresia Factorial = CLng(1) in Factorial = 1 si verificai tipul de data al variabilei
Factorial in fereastra Watches pentru diverse valori ale lui n.
10. Adugai un bloc IF pentru a verifica daca n este negativ. Daca n este negativ returnai din funcia Factorial
mesajul Negativ.
Public Function Factorial(n As Long) As Variant
Dim i As Integer
If (n < 0) Then
Factorial = "Negativ"
Else
If (n > 12) Then
Factorial = "Depasire"
Else
Factorial = 1
For i = 1 To n
Factorial = Factorial * i
Next i
End If
End If
End Function
Algoritmi ciclici cu numr necunoscut de pai
Vom scrie o funcie VB care calculeaz e
x
cu eroarea absoluta .
Indicaie: Pentru calculul lui e
x
vom folosi dezvoltarea in serie:
! ! 2
1
2
0
n
x x
x u e
n
k
k
x
+ + + + = =
=
L cu
1
!
= =
k
k
k
u
k
x
k
x
u
Schema logica a algoritmului este prezentata in figura de mai jos. Vom iniializa variabilele e cu zero, k
(variabila contor) cu 1, respectiv variabila u cu 1.
1. Adugai in modulul Module1 codul sursa de mai jos.
2. Inserai in foaia Excel aceasta funcie si calculai valoarea exponentului pentru diverse valori ale lui x.
3. Verificai valoarea obinuta de funcia noastr cu valoarea rezultata prin folosirea funciei din librria Excel
de funcii EXP.
4. Adugai puncte de oprire pentru a parcurge algoritmul pas cu pas in mod Debug.
START
x, eps
e := 0
u := 1
k := 0
|u|>eps
e := e + u
k := k + 1
u := ux/k
DA
e
STOP
NU
Public Function ExpX(x As Double) As Double
Const Eps = 0.0001
Dim u As Double
Dim k As Integer
ExpX = 0
u = 1
k = 0
While (Abs(u) > Eps)
ExpX = ExpX + u
k = k + 1
u = u * x / k
Wend
End Function
Obs. Observai ca am adugat o constanta declarata cu cuvntul
cheie Const. Pentru calculul modulului unei valori, folosim
funcia VB Abs. Pentru ciclul cu numr necunoscut de pai
condiionat anterior am folosit instruciunea While Wend.
Vom scrie o funcie VB care extrage rdcina ptrata dintr-un numr a, cu o precizie constant .
Indicaie: Se tie c irul (x
n
) definit prin
|
|
\
|
+ = =
1
1 1
2
1
,
n
n n
x
a
x x a x converge la a . Limita a se aproximeaz prin acel termen al irului x
n
pentru care <
1 n n
x x .
Schema logica a algoritmului este prezentata in figura de mai jos.
START
a, eps
x
n-1
:= a
x
n
:= (x
n-1
+a / x
n-1
)/2
DA
x
n
STOP
NU
|x
n
x
n-1
|>eps
x
n-1
:= x
n
Public Function Radical(a As Double) As Double
Const Eps = 0.0001
Dim xn1 As Double
Dim xn As Double
xn = a
Do
xn1 = xn
xn = (xn1 + a / xn1) / 2
Loop While (Abs(xn - xn1) >= Eps)
Radical = xn
End Function
1. Adugai in modulul Module1 codul sursa de mai sus.
2. Inserai in foaia Excel aceasta funcie si calculai valoarea
radicalului pentru diverse valori ale lui a.
3. Verificai valoarea obinuta de funcia noastr cu valoarea
rezultata prin folosirea funciei din librria Excel de funcii SQRT.
4. Adugai puncte de oprire pentru a parcurge algoritmul pas cu
pas in mod Debug.