end sub

RAČUNALNIŠKO
PROGRAMIRANJE IN
PODATKOVNE BAZE
OSNOVE PROGRAMIRANJA IN
SINTAKSA VISUAL BASIC-A
Danijel Rebolj, Andrej Tibaut
DODATNI VIRI
n U. Mesojedec:Visual basic, Pasadena, 2002
n M. Prtenjak:Visual Basic za aplikacije, Desk, 1998
n J. Walkbench: Excel 2003 power programming with VBA, Wiley,
2004
PRVI PROGRAM
Sub ZdravoSvet
‘program, ki pozdravi svet
print “Zdravo svet!”
End sub
PRVI PROGRAM
Sub ZdravoSvet
‘program, ki pozdravi svet
Dim pozdrav as String
pozdrav = “Zdravo svet!”
print pozdrav
End sub
OSNOVE SINTAKSE VB
n Osnovna struktura so podprogrami (sub) in druge vrste modulov
n Vse strukture se praviloma začnejo s ključno besedo in končajo z
end in ključno besedo
(sub – end sub, if – end if)
n V začetku vsakega modula so praviloma deklaracije podatkovnih
struktur
OSNOVE SINTAKSE VB
n ‘ začetek komentarja (kjerkoli v vrstici)
n Vrstic ne zaključujemo s posebnim znakom (kot npr. pri Pascalu, C
++ ali Javi s ;), zato potrebujemo poseben znak za nadaljevanje
vrstice, podčrtaj _
n Z : ločimo stavke v isti vrstici
n VB ni “občutljiv” na velike in male črke (ni “case sensitive”)
SPREMENLJIVKE
n Spremenljivka je referenca na določene pomnilne celice
n Spremenljivke so različnih tipov
n Tip izberemo glede na vrsto podatka, ki ga spremenljivka
predstavlja
n Spremenljivko pred uporabo deklariramo (določimo ime in tip) in
inicializiramo (priredimo vrednost)
SPREMENLJIVKE
OSNOVNI TIPI
Ime tipa
Velikost
Območje vrednosti
Boolean
1 byte
-1 do 0 oz TRUE in FALSE
Integer
2 byte
-32768 do +32767
Long
4 byte
-2147483648 do +-2147483647
Single
4 byte
-3.402823E38 do -1.401298E-45 za negativne in 1.401298E-45 do
3.402823E38 za pozitivne vrednosti
Double
8 bytov
-1.79769313486232E308 do
-4.94065645841247E-324 za negativne in
4.94065645841247E-324 do 1.79769313486232E308 za pozitivne
vrednosti
Currency
8 bytov
-922337203685477.5808 do 922337203685477.5807
String
1 byte/znak
0 do približno 65,500 bytov
Variant
po potrebi
katerakoli numerična vrednost do obsega Double ali katerikoli niz
znakov (String)
SPREMENLJIVKE
DEKLARACIJE
n DIM ime AS tip
n TYPE imeTipa ‘uporabniški tip
ime1 AS tip1
...
END TYPE
n Zapisovanje konstant:
123, -123.45, 1.2345E2, “niz znakov”,TRUE, FALSE
SPREMENLJIVKE
OBMOČJE VELJAVE
n Spremenljivka ima omejeno območje veljave
n Veljavna je v območju, kjer jo deklariramo
§ Lokalne spremenljivke deklariramo v modulu (npr.
podprogramu)
§ Globalne spremenljivke deklariramo na ravni programa (nad
moduli)
SPREMENLJIVKE
OBMOČJE VELJAVE
n Veljavnost lahko določamo tudi s eksplicitnima ukazoma:
n Public
veljavnost povsod (npr. v Excelu tudi na drugih listih)
n Private
lokalna veljavnost
SPREMENLJIVKE
POLJA
n DIM ime(is1 TO iz1,..., _
isn TO imn) AS type
n is so spodnji, im pa zgornji indeksi
n če is ne navedemo, je privzeto 0
n Primeri:
DIM M1(10,10) AS DOUBLE
DIM Naslovi(100) AS STRING
DIM Koo(1 TO 3,100) AS SINGLE
SPREMENLJIVKE
PRIMER DEKLARACIJE IN UPORABE
Sub PrireditevVrednosti()
Dim x(1 TO 3) As Double
For i = 1 To 3
x(i) = i
Cells(i, i) = x(i)
Next i
End Sub
SPREMENLJIVKE
DINAMIČNA DEKLARACIJA POLJA
n DIM ime () AS type
n ReDIM ime (im1,im2)
nekje v programu (če gre za lokalno spremenljivko v istem
modulu) določimo ali spremenimo dimenzije
n ReDIM Preserve ime (im3,im4)
prejšnja vsebina polja se ohrani
DATOTEKE
n Predstavljajo celostno organizacijo podatkov v zunanjem
pomnilniku
n Pred uporabo datoteko odpremo s stavkom OPEN, beremo z
INPUT, vanjo zapisujemo z WRITE, zapremo s CLOSE
KRMILNE STRUKTURE
n Sekvenca - zaporedje stavkov
n Selekcija
§ gnezdenje
§ večkratna selekcija
n Repeticija (Iteracija)
§ while, do - while
§ for
KRMILNE STRUKTURE
SEKVENCA
Sekvenco predstavlja zaporedje (blok) stavkov, ki (običajno) sodijo
skupaj.
stavek
‘začetek bloka
stavki
‘konec bloka
stavek
stavek
stavek
stavki
KRMILNE STRUKTURE
SEKVENCA
Vrste stavkov:
n Prireditveni (prireditev spremelnjivke)
n Vhodni (vnos vrednosti spremenljivk)
n Izhodni (prikaz vrednosti spremenljivk)
n Klicni (klic drugega modula)
n Kontrolni (npr end, exit,...)
KRMILNE STRUKTURE
SEKVENCA
n Prireditev:
spremenljivka = izraz
n Tip spremenljivke in izraza naj bo isti
Ne mešamo
jabolk in hrušk!
VBA dopušča
nekatere
nedoslednosti!
n Mešanje tipov v izrazu je podprto s konverzijo tipov
n V izrazu nastopajo spremenljivke, konstante, funkcije in operatorji
n Naloga: napišimo podprogram s spremenljivkami za dimenzijo
stebra
KRMILNE STRUKTURE
SEKVENCA
n Aritmetični operatorji:
+
*
/
^
n Primer aritmetičnega stavka:
x = (1+(a+b)/(c*d)) ^0.5
KRMILNE STRUKTURE
SEKVENCA
n Relacijski operatorji:
=
>
<
>=
<=
<>
KRMILNE STRUKTURE
SEKVENCA
n Boolovi operatorji:
AND
OR
NOT
n Primer izraza:
(D>F) AND (S<50.0) OR (A<>B)
KRMILNE STRUKTURE
SEKVENCA
n Primeri prireditev:
a = a + 15.0
f = f + 1
g = (a+b)*(x+y)/1.2
log = (A = B) AND (L < 10.0)
RoboviKocke(3).zacOglisce = 3
Kako bi
zamenjal kovanca
v rokah?
n Naloga: napišimo podprogram za zamenjavo vrednosti dveh
spremeljivk (v eni roki imam 10, v drugi pa 20 centov...)
KRMILNE STRUKTURE
SEKVENCA
n Vhodni stavek (VB bere na klasičen način le iz datoteke)
Dim a, b, c As String
Open "file.txt" For Input As #1
Do Until EOF(1)
Input #1, a, b, c
Debug.Print "Vrednosti so:"; a, b, c
Loop
n Izhodni stavek
Debug.Print "Vrednosti so:"; a, b, c
n Naloga: napišimo zgornji podprogram za vnos podatkov iz datoteke
KRMILNE STRUKTURE
SEKVENCA
n Vhodni in izhodni stavki v VBA so odvisni od razpoložljivih
objektov
n V programu Excel najpogosteje uporabljamo celice
a = ActiveCell
ActiveCell = a*10
i = 7
Cells(i,i) = a*i
KRMILNE STRUKTURE
SEKVENCA
n Funkcije: glede na tip spremenljivke so v VB vgrajene
§ matematične funkcije
§ funkcije z nizi
§ funkcije z datumi
c = SQR(a+b) + a*b
dolzina = len(“To je besedilo”)
KRMILNE STRUKTURE
SELEKCIJA
logični
izraz
if logični izraz then
stavki
end if
false
true
stavki
KRMILNE STRUKTURE
SELEKCIJA
if logični izraz then
logični
izraz
stavki
else
stavki
end if
false
true
stavki
stavki
KRMILNE STRUKTURE
SELEKCIJA
if logični izraz then
stavki elseif logični izraz then
stavki
else
stavki
end if
KRMILNE STRUKTURE
SELEKCIJA - GNEZDENJE
n Gnezdenje imenujemo strukturo z več selekcijami, ki so
vgnezdene ena v drugi
n Selekcije se ne smejo prekrivati
(en if – end if blok se mora zaključiti znotraj drugega,
zunanjega)
KRMILNE STRUKTURE
SELEKCIJA – PRIMERI UPORABE
n Izdelava različnih rešitev algoritma:
Štipendijo Marie Curie prejmejo študentke s povprečno oceno 8
ali več in prihodkom na družinskega člana, ki je nižji od danega
praga
n Izdelava programa za račun kvadratne enačbe
Selekcija za izpis korenov kvadratne enačbe
KRMILNE STRUKTURE
REPETICIJA
Do
stavki
Loop
stavki
KRMILNE STRUKTURE
REPETICIJA
logični
izraz
Do While logični izraz
stavki
Loop
false
true
stavki
KRMILNE STRUKTURE
REPETICIJA
logični
izraz
Do Until logični izraz
stavki
Loop
true
false
stavki
KRMILNE STRUKTURE
REPETICIJA
stavki
Do
true
stavki
Loop While logični izraz
logični
izraz
false
KRMILNE STRUKTURE
REPETICIJA
Do
stavki
stavki
Loop Until logični izraz
false
logični
izraz
true
KRMILNE STRUKTURE
REPETICIJA
stevec = zacetek
FOR stevec = zacetek TO konec _
STEP korak
stavki
NEXT stevec
STEP je
neobvezen
stevec
> konec
True
False
stavki
stevec = stevec +
korak
KRMILNE STRUKTURE
REPETICIJA
Sub CommandButton1_Click()
For i = 1 To 10
z = int((i/2 - int(i/2))*2 + 1)
For j = z to 10 Step 2
Cells(i, j) = “X”
Next j
Next i
End Sub
MODULI
Dve vrsti modulov s procedurami sta:
n Podprogram
sub ime (seznam spremenljivk)
...
end sub
n Funkcija
function ime (sezn. sprem.) AS tip
...
end function
MODULI
MODULI TIPA SUB
Sub KvadEnacba (a,b,c,x1,x2)
Dim D as Double
D=b^2-4*a*c
if D < 0 then
print “Ni rešitve…”
else
x1=(-b-SQR(D))/(2*a)
x2=(-b+SQR(D))/(2*a)
print “Rešitev:”,x1, x2
end if
end sub
MODULI
MODULI TIPA FUNCTION
n funkcija je posebna oblika procedure, ki vrne vrednost
n Primer:
FUNCTION Fakulteta (n) AS double
DIM i AS integer ‘števec
Fakulteta = 1
FOR i = 1 TO n
Fakulteta = Fakulteta * i
NEXT i
END FUNCTION
MODULI
UPORABA MODULOV
n Podprogram ali funkcijo lahko kadarkoli pokličemo iz kateregakoli
drugega modula, npr:
call KvadEnacba (2,-3,1,r1,r2)
rezultat = faktoriela (33)
n Podatke pri tem “prenašamo” kot parametre (argumente), ki so
lahko spremenljivke ali konstante
MODULI
UPORABA MODULOV
sub GP
...
call PA
...
spr=FB()
...
end sub
GP
PA
sub PA
...
end sub
function FB
...
end function
FB
MODULI
UPORABA MODULOV - REKURZIJA
n Kadar modul kliče samega sebe, pravimo temu rekurzija
n Primer:
FUNCTION FakultetaR (n) AS double
IF n <= 0 THEN
FakultetaR = 1
ELSE
FakultetaR = n*FakultetaR(n-1)
ENDIF
END FUNCTION
PREVERJANJE PRAVILNOSTI
n Preden module povežemo v celoto preverimo njihovo pravilnost
n Izdelamo tabelo spremenljivk in jih “spremljamo” skozi program