Académique Documents
Professionnel Documents
Culture Documents
=
4
2
t
pri emu je: V- volumni protok fluida u rezervoaru (m
3
/s); d- dijametar cjevovoda
(m) i v- brzina strujanja fluida (m/s). Varijablama d i v dodijeliti vrijednosti
koje su pohranjene u elijama B1 i B2 aktivnog radnog lista. Rezultate za
vrijednost volumenog protoka ispisivati u eliji B4 aktivnog radnog lista.
Korak 1: Deklarisati proceduru Sub pod nazivom protok
Sub protok ()
Korak 2: Deklarisati varijable (dati im ime i odrediti tip podatka)
Dim V As Double
11
Dim d As Double
Dim brzina As Double
Ili
Dim V As Double, d As Double, brzina As Double
Korak 3: Deklarisati konstantu pi
Const pi As Single=3.14
Konstanta se moe deklarisati i kao varijabla
Dim pi As Single
Kokrak 4: Dodijeliti vrijednosti varijablama
d=Range(''B1'')
brzina=Range(''B2'')
Korak 5: Dodjeljivanje vrijednosti varijabli V (vrijednost matematikog
izraza)
V= (d^2)*pi*brzina/4
Korak 6: Ispisivati rezultate u eliji B4 aktivnog radnog lista
Range(''B4'')=V
Korak 7: Kraj procedure
End Sub
Sub protok ()
'deklaracija varijabli V, d, brzina kao Double tip podatka
Dim V As Double, d As Double, brzina As Double
'deklaracija konstante pi
Const pi As Single=3.14
'dodjeljivanje vrijednosti varijablama d, brzina i V
d=Range(''B1'')
brzina=Range(''B2'')
V= (d^2)*pi*brzina/4
'ispisivanje rezultata
Range(''B4'')=V
End Sub
12
Primjer 5.4. Kreirati funkciju pod nazivom protok_fluida koja vraa vrijednost
volumnog protoka iz prethodnog primjera. Parametri funkcije dijametar cjevovoda
i brzina strujanja fluida.
Function protok_fluida (d As Double, brzina As Double) As Double
'deklaracija konstante pi
Const pi As Single=3.14 'konstanta pi se moe deklarisati i kao
varijabla
'dodjeljivanje imenu funkcije vrijednosti koju funkcija vraa
protok_fluida=(d^2)*pi*brzina/4
End Function
Primjer 5.5. Kreirati funkciju pod nazivom volumen_plina koja vraa vrijednost
volumena zraka iz jednaine stanja idealnog gasa
M p
T R m
V
=
Pri emu je: R- gasna konstanta 8314 J/(kmolK).
M- molukulska masa zraka 29 kg/kmol.
Parametri funkcije su koliina gasa m (kg), temperatura gasa (C) i pritisak
gasa (bar).
Function volumen_plina (m As Double, T As Double, p As Double) As Double
'deklaracija gasne konstante i molekulske mase gasa kao konstanti
Const R As Single=8314
Const Mm As Single=29
'pretvaranje vrijednosti pritiska iz bar u Pa i temperature iz C u
K
p=p*1E5
T=T+273.15
'dodjeljivanje imenu funkcije vrijednosti koju funkcija vraa
volumen_plina=m*R*T/(p*Mm)
End Function
13
6. Grananje programskog koda uz pomo IF...Then izjave
Grananje je proces selektivnog izvravanja odreenih blokova koda, u zavisnosti
od vrijednosti odreenog izraza. U cilju implementacije grananja koda,
upotrebljava se izjava If..Then.
U svom najprostijem obliku , izjava If...Then testira samo jedna izraz i,
ukolikoje on istinit, izvrava jednu jedinu izjavu.
If uslov Then [naredba ako je uslov taan]
Ako je potrebno d izvrite vei broj izjava, ukolikoje izraz istinit, moete
upotrijebiti varijaciju If..End If
If uslov Then
[naredba_1 ako je uslov taan]
[naredba_2 ako je uslov taan]
End If
Jo jedna varijacija If...Then izjave je If...Then...Else...End If. Ovaj oblik
pmoguava da izvrite jednu ili vie izjava ako je izraz (uslov) istinit, kao i
jednu ili vie izjava ako uslov/izraz nije taan.
If uslov Then
[naredba ako je uslov taan]
Else
[naredba ako uslov nije taan]
End If
Uslov je obino neki logiki izraz koji treba da se zadovolji, i on je obavezan
dio if then strukture. Tumaenje If..Then..Else Petlje je u sutini vrlo
jednostavno. Ako je uslov zadovoljen izvrava se naredba u narednoj liniji koda.
U suprotonom ista naredba se preskae i izvrava naredba definisana u sluaju
kada uslov nije taan. Slijedei primjer vrlo jednostavno pokazuje strukturu
petlje.
14
Primjer 6.1. Napisati potprogram koji e za vrijednost broja bodova koju ste
unijeli u eliju B2 aktivnog radnog lista, ispisati da li ste poloili ispit.
Uslov je da na ispitu ostvarite broj bodova vei od 54.
Sub ispit()
Dim bodovi As Integer
Dim ocjena As String
bodovi = Range("B1")
If bodovi < 54 Then
ocjena = "Niste poloili ispit"
Else
ocjena = "Poloili ste ispit"
End If
Range("B2") = ocjena
End Sub
Ponekad ete grananje programskog koda poeljeti da kreirate uz pomo vie od
dvije grane (vie uslova). U ovakvim sluajevima, jedno od rjeenja sastoji se u
upotrebi If...Then...ElseIf izjave.
If uslov_1 Then
[naredba ako je uslov_1 taan]
ElseIf uslov_2 Then
[naredba ako je uslov_1 taan]
ElseIf uslov_n Then
[naredba ako je uslov_n taan]
Else
[naredba ako niti jedan uslov taan]
End If
Slijedei primjeri desmonstriraju upotrebu If...Then...ElseIf izjave.
15
Primjer 6.2. Napisati potprogram koji e za vrijednost broja bodova koju ste
unijeli u eliju B2 aktivnog radnog lista, ispisati da li ste poloili ispit. U
tabeli je prikazan sistem bodovanja
bodovi ocjena
bodovi <54 5
bodovi >= 54 and bodovi <= 63 6
bodovi >= 64 and bodovi <= 73 7
bodovi >= 74 and bodovi <= 83 8
bodovi >= 84 and bodovi <= 93 9
bodovi >= 94 and bodovi <= 100 100
Sub ispit()
Dim bodovi As Integer
Dim ocjena As String
bodovi = Range("B1")
If bodovi < 54 Then
ocjena = 5
ElseIf bodovi >= 54 And bodovi <= 63 Then
ocjena = 6
ElseIf bodovi >= 64 And bodovi <= 73 Then
ocjena = 7
ElseIf bodovi >= 74 And bodovi <= 83 Then
ocjena = 8
ElseIf bodovi >= 84 And bodovi <= 93 Then
ocjena = 6
Else
ocjena = 10
End If
Range("B2") = ocjena
End Sub
16
Primjer 6.3. Napisati potprogram koji rjeava kvadratnu jednainu oblika
0
2
= + + c bx ax
za vrijednosti a, b, c koje se unoste u elijama B1, B2 i B3. Program treba da
ispisuje Koliko jednaina ima rjeenjau eiji D1 i koje su vrijednosti rjeenja
u elijama D2 i D3.
Rjeenje:
Ako je vrijednost parametra D
ac b D 4
2
=
jednaka nuli (D=0) jednaina ima jedno rjeenje x:
) 2 /( a b x =
Za vrijednosti parametra D<0 jednaina ima imaginarno rjeenje, dok za
vrijednosti D>0 jednaina ima dva rjeenja
a
D b
x
2
2 / 1
=
Sub kvadratna_jednacina()
'deklarisane varijabli
Dim a As Single, b As Single, c As Single, D As Single
Dim x As Single, x1 As Single, x2 As Single
'dodjeljivanje vrijednosi varijablama
a = Range("B1")
b = Range("B2")
c = Range("B3")
D = (b ^ 2) - 4 * a * c
If D = 0 Then
x = -b / (2 * a)
Range("D1") = "Jednaina ima jedno rjesenje"
Range("D2") = x
Range("D3") = ""
ElseIf D < 0 Then
Range("D1") = "Jednaina ima imaginarno rjesenje"
Range("D2") = ""
Range("D3") = ""
Else
x1 = (-b + D ^ (1 / 2)) / (2 * a)
x2 = (-b - D ^ (1 / 2)) / (2 * a)
Range("D1") = "Jednaina ima dva rjesenja"
17
Range("D2") = x1
Range("D3") = x2
End If
End Sub
7. Implementacija petlji
Izjave predstavljaju pokretaku snagu VBA programskog jezika. Pomou izjava
moete u svojim programima implementirati petlje i donositi logike usluge.
Program napisan u VB se izvrava jednu po jednu liniju koda kako su napisane u
editoru. Meutim, linije koda se mogu kontrolisati na nain da se odreene
linije koda izvravaju pod specificiranim uslovima.
Programske petlje, koje se koriste radi viestrukog i uzastopnog izvravanja
odreenog dijela programskog koda,predstavljaju nezaobilazan alat u bilo kojoj
vrsti programa. Postoje dvije klase programskih petlji: fiksne petlje, iji je
broj izvravanja poznat i konaan, i tzv. varijabilne petlje koje su oslonjene
na neki logiki izraz, na osnovu ijeg izraunavanja program donosi odluku da li
izvravanje petlje treba nastaviti ili ne.
Fiksna petlja: For...Next
Opta struktura For...Next izjave, odnosno njena sintaksa predstavljena je u
tekstu to slijedi.
For Counter=Start To End [Step]
[naredbe]
[Exit For] [Continue For]
[naredbe]
Next [Counter]
Counter je varijabla koja je obavezna u For...Next petlji, i ona je kontrolna
varijabla u petlji.
Start je numeriki izraz ili poetna vrijednost za Counter.
End je numeriki izraz ili konana vrijednost za Counter.
Step predstavlja korak poveanja varijable Counter pri svakom prolazku kroz
petlju. Ako se ne naglasi korak on po osnovnoj opciji ima vrijednost 1.
Exit For i Countinue For slue za kontrolu petlje pod odreenim uslovima.
Next predstavlja zavretak definicije For petlje.
18
Opta struktura For...Next petlje prikazana je na primjeru jednostavne
procedure. Kao rezultat izvravanja ove prodedure, u prozoru Immediate e redom
biti ispisani brojevi od 1 do 50.
Sub SimpleForNext()
Dim n As Integer
For n = 1 To 50
Debug.Print n
Next n
End Sub
U slijedeem primjeru je pokazano, kako se petlja moe kretati i unazad, odnosno
od veih prema manjim vrijednostima, dok se za korak poveanja/smanjenja
vrijednosti moe i broj razliit od jedinice. Kao izlazni rezultat slijedee
procedure, u prozoru Immediate bie ispisani svi parni brojevi od 50 do 1, i to
opadajuim redoslijedom.
Sub ReverseForNext()
Dim n As Integer
For n = 50 To 1 Step -2
Debug.Print n
Next n
End Sub
Varijabilne petlje: Do...Loop
Petlje tipa Do moete upotrijebiti radi uzastopnog ponavljanja neke sekvence
koda, sve dok ne bude ispunjen tzv. uslov prekida. U optem sluaju sintaksa
glasi ovako:
Do {WhileUntil} uslov
[naredbe]
[Exit Do]
[naredbe]
Loop
Petlja tipa Do...While, izvravae se za sve vrijeme dok je izraz iz uslova
istinit. Nasuprot toma petljia tipa Do...Until izvravae se do trenutka kada
19
izraz iz uslova postane istinit. Exit Do prestavlja bezuslovan i momentalan
izlazak iz Do petlje. U nastavku je prikazana varijacija istog problema kao za
For...Next petlju.
Sub SimpleDoWhile()
Dim n As Integer
n = 1 'poetna vrijednost varijable n
Do While n <= 50
Debug.Print n 'definisanje koraka poveanja varijable n
n = n + 1
Loop
End Sub
Kao to je ve naglaeno Do...While petlja se izvrava za sve vrijeme dok je
izraz iz uslova istinit. Ako za iste uslove primijenimo Do...Until petlju u
rezultatu se nee ispisati nijedna vrijednost varijable n jer se Do...Until
petlja izvrava do trenutka kada izraz iz uslova postane istinit.
Sub SimpleDoUntil()
Dim n As Integer
n = 1 'poetna vrijednost varijable n
Do Until n <= 50
Debug.Print n 'definisanje koraka poveanja varijable n
n = n + 1
Loop
End Sub
Ako umjesto uslova n<=50 stavite uslov n=51 Do..Until petlja e se izvravati
sve dok varijabla n ne poprimi vrijednost 51 tj., ispisae se sve vrijednosti
brojeva od 1do 50 sa korakom 1.
20
Primjer 7.1. Kreirati proceduru tipa potprogram pod nazivom kvadrat_x koja
ispisuje u prozoru Immediate vrijednosti varijable x i vrijednosti varijable
broj koja predstavlja kvadrat broja x.
Varijabla x poprima vrijednosti od 0 do 10 sa korakom 0.5. Vrijednosti
dodijeliti varijabli pod nazivom broj.
Sub kvadrat_x()
Dim x As Single, broj As Single
For x = 0 To 10 Step 0.5
broj = x ^ 2
Debug.Print x, broj
Next x
End Sub
Istu proceduru moete napisati i na slijedei nain, koristei Do...While
petlju.
Sub kvadrat_x()
Dim x As Single, broj As Single
x = 0
Do While x <= 10
broj = x ^ 2
Debug.Print x, broj
x = x + 0.5
Loop
End Sub
21
Primjer 7.2. Napisati funkciju pod nazivom Trap_rule koja vraa vrijednost
integrala
dx e x
b
a
x
}
) 2 (
5
Koristei trapezoidno pravilo integriranja.
|
.
|
\
|
+ + =
=
) ( ) ( ) (
2
1
1
0 n
n
i
i
x f x f x f
h
Integral
Pri emu je h korak integracije koji se rauna kao
n
a b
h
) (
=
gdje je n broj intervala na koje je podijeljen interval [a,b].
Vrijede i jednakosti b x a x
n
= = ;
0
. Parametri funkcije su granice integrala a
i b kao i broj intervala n. Broj intervala je cijeli broj.
Function Trap_rule(a As Single, a As Single, n As Integer)As Single
Dim h As Single, i As Integer
'korak integracije
h = (b - a) / n
'poetna vrijednost sume vrijednosti funkcije f(xi)
suma = 0
For i = 1 To (n - 1)
suma = suma + funkcija(a + h * i)
Next i
Trap_rule = (h / 2) * (funkcija(a) + 2 * suma + funkcija(b))
End Function
______________________________________________________________________________
Function funkcija(x)
funkcija = 5 * x * Exp(-2 * x)
End Function
22
8. Uraeni primjeri
Primjer 8.1. Napisati funkciju pod nazivom CubeRoot koja vraa vrijednost treeg
korijena broja x. Funkcija ima jedan parametar/argument (x).Funkcija treba da
vraa vrijednost svih realnih brojeva x.
Function CubeRoot(x As Double) As Double
CubeRoot = x ^ (1 / 3)
End Function
Primjer 8.2. Napisati funkciju pod nazivom napon_para koja vraa vrijednost
napona vodene pare u funkciji temperature prema jednaini
|
.
|
\
|
+
=
C K T
B
A
e bar p
) (
) (
Pri emu su A, B i C konstante.
A = 11.6834
B = 3816.44
C = -46.13
Function napon_para(T As Single) As Single
'deklaracija konstanti
Const A As Single = 11.6834
Const B As Single = 3816.44
Const C As Single = -46.13
'dodjeljivanje izraza na racunanje napona para funkciji
napon_para = Exp(A - B / (T + C))
End Function
23
Primjer 8.3. Napisati potprogram koji rauna vrijednost povrine presjeka kruga
prema jednaini
t =
2
r A
Vrijednost varjable r je storirana u eliji B1 aktivnog radnog lista, dok u
eliji B2 treba da se ispie vrijednost povrine kruga. Ime procedure treba da
bude CircleArea.
Sub CircleArea()
Dim radijus As Single
Dim povrsina As Single
Const pi As Single = 3.14
radijus = Range("B1")
povrsina = (radijus ^ 2) * pi
Range("B2") = povrsina
End Sub
Primjer 8.4. Napisati potprogram (Discount) koji ispisuje vrijednost popusta (%)
na kupljenu robu. Vrijednosti popusta u funkciji koliine robe su date u tabeli
Koliina robe Popust
0-24 10%
25-49 15%
50-100 20%
>100 25%
Program treba da varijabli kolicina_robe dodijeli cjelobrojnu vrijednost iz
elije A1 aktivnog radnog lista i u eiji A2 da ispisuje vrijednost popusta kao
niz karaktera.
Sub Dicsount()
Dim kolicina As Integer
Dim popust As String
kolicina = Range("A1")
If kolicina < 25 Then
popust = "10%"
ElseIf kolicina >= 25 And kolicina <= 49 Then
popust = "15%"
ElseIf kolicina >= 50 And kolicina <= 100 Then
24
popust = "20%"
Else
popust = "25%"
End If
Range("A2") = popust
End Sub
Primjer 8.5. Napisati potprogram pod nazivom Reynolds, koji na treba da u
elijama D1 i D2 aktivnog radnog lista ispisuje reim strujanja fluida u
zavisnosti od izraunate vrijednosti za broj Re, kao i vrijednost broje Re.
=
v d
Re
Pri emu je d- dijametar cjevovoda
v- brzina strujanja fluida
- viskozitet fluida
- gustina fluida
Reimi strujanja su:
Re Reim strujanja
Re<2320 strujanje je laminarno
2320<Re<10000 strujanje je prelazno
Re>10000 strujanje je turbulentno
Varijable su vrijednosti za decimalnim zarezom i treba ima dati slijedea imena,
njihove vrijednosti su smjetene u odgovarajuim elijama kako je naznaeno:
d- dijametar (B1)
v- brzina (B2)
- visk (B3)
- ro (B4)
Sub Reynolds()
Dim dijametar As Single
Dim brzina As Single
Dim visk As Single
Dim ro As Single
Dim Re As Single
Dim rezim_strujanja As String
dijametar = Range("b1")
25
brzina = Range("b2")
visk = Range("b3")
ro = Range("b4")
Re = (dijametar * brzina * ro) / visk
If Re < 2320 Then
rezim_strujanja = "Strujanje je laminarno"
ElseIf Re >= 2320 And Re < 10000 Then
rezim_strujanja = "Strujanje je prelazno"
Else
rezim_strujanja = "Strujanje je turbulentno"
End If
Range("D1") = rezim_strujanja
Range("D2") = Re
End Sub
26
Primjer 8.6. Napisati potprogram pod nazivom Antoine koja vraa vrijednost
napona vodene pare za sve temperature iz intervala {300-400} sa korakon 10
temperature prema jednaini
|
.
|
\
|
+
=
C K T
B
A
e bar p
) (
) (
Pri emu su A, B i C konstante.
A = 11.6834
B = 3816.44
C = -46.13
Sub Antoine()
Const A As Single = 11.6834
Const B As Single = 3816.44
Const C As Single = -46.13
Dim napon_para As Single
Dim t As Integer
For t = 300 To 400 Step 10
napon_para = Exp(A - B / (t + C))
Debug.Print t, napon_para
Next t
End Sub