Getsbi 05.08.2013 20:15
Predmet:Re: Skola Vb-a za napredne

Da ne ostane maglovita situacija kada pisati funkciju, a kad procedure evo mog priloga.

Funkcija ili D= f(X) je neÅ¡to Å¡to traži argument i vraća vrednost. Elementi skupa X se nazivaju argumenti. Оsnоvnа kаrаktеristikа funkciје је dа zа јеdnu ulаznu vrеdnоst dоbiја nајviÅ¡е јеdnа izlаznа vrеdnоst.

Prоcеdurа је sеriја аktivnоsti, zаdаtаkа, kоrаkа, оdlukа, kаlkulаciја i drugih prоcеsа, kоја kаdа sе prеduzimа u zаdаtоm rеdоslеdu, dаје prоpisаni rеzultаt. Procedura nema argumente već ulazne parametre neophodne za njeno izvrÅ¡enje.

Osnovna razlika između procedura i funkcija je u tome Å¡to funkcija vraća vrednost, tj. poziv funkcije može da se tretira kao izraz određenog tipa i da se kao takav koristi u okviru drugih izraza istog tipa.

Na vama je da na osnovu gornjeg odlučite kada da piÅ¡ete :

Function (argument1, argument2….)
……
End Function


a kada

Sub ime procedure (paramer1, parameter2…)
……
End Sub


Ako i dalje niste sigurni pogledajte ovaj link sa primerima: http://arhimed.matf.bg.ac.rs/...i.html#fun

zxz 05.08.2013 21:56
Predmet:Re: Skola Vb-a za napredne

Ovom Raspravom sigurno cemo mnogima pomutiti mozak ali eto.
Prvo se moramo pitati sta poimamo pod rijecju procedura.
Po meni procedura je postupak rjesavanja nekog zadatka.
I ovo tvoje je dobro
Citat:
Prоcеdurа је sеriја аktivnоsti, zаdаtаkа, kоrаkа, оdlukа, kаlkulаciја i drugih prоcеsа, kоја kаdа sе prеduzimа u zаdаtоm rеdоslеdu, dаје prоpisаni rеzultаt. Procedura nema argumente već ulazne parametre neophodne za njeno izvrÅ¡enje.
E sad se pitam zasto funkcija nije procedura a sub jeste.

Citat:
Aplikacija u Visual Basicu sastoji se od manjih logičkih dijelova
nazvanih procedurama (potprogramima)
• Dvije su velike prednosti programiranja s procedurama:
• dopuÅ¡taju razbijanje aplikacija u zasebne logičke cjeline
• mogu se upotrijebiti kao blokovi za izgradnju drugih aplikacija
Vrste procedura:
• Sub procedure - ne vraćaju vrijednost
• Function procedure - vraćaju vrijednost
• Property procedure - vraćaju i dodjeljuju vrijednosti i postavljaju
pokazivače prema objektima

Citat:
Procedura nema argumente već ulazne parametre neophodne za njeno izvrÅ¡enje.
E sad i ovo je pitanje sta je argument a sta ulazni parametar.
I funkcija i sub imaju ulazne parametre ili ulazne argumente kako hoces i tu nema nikakve razlike stim sub ne vraca vrijednost u imenu nego samo kroz ulazne parametre.

Ovo sam napisao samo zato da bi se bolje razumjelo a kako ce ko sta zvati to je druga stvar.

zxz 06.08.2013 09:47
Predmet:Re: Skola Vb-a za napredne

Ako je ovo jasno onda idemo dalje.
E sad da bi napisali dobru proceduru (Funkciju ili sub) morali bi ukloniti sve moguce greske koje se mogu javiti prilikom izvrsenja koda.
Tokom pisanja i testiranja koda mogu se javiti tri vrste gresaka:
sintaktičke greÅ¡ke (otkriva ih kompajler),
greške povezivanja (otkrivamo ih pri pokretanju programa),
logičke pogreÅ¡ke (mora ih otkriti sami).

Ukoliko moze doci do greske zbog ulaznih parametara onda bi te greske trebali presresti u samoj proceduri i napisati upute za daljni rad.
Sam Vb ima biblioteku gresaka koje su oznacene brojevima i opisom.
Njegove greske su uopstene i cesto nama ne daju dovoljno dobro objasnje a i druga stvar je sto nisu na nasem jeziku.
Iz ovoga Proizilazi da bi bolje bilo da opis gresaka radimo sami.
Primjer:
PreuzmiIzvorni kôd (Visual Basic):
  1. Function ImeProcedure(Argument1, argument2)
  2. On Error GoTo Greska
  3.  
  4. DoCmd.OpenForm "Imenekeforme"
  5. If Argument1 > 100 Then
  6. Err.Number = 1024
  7. GoTo Greska
  8. Else
  9. Err.Number = 7000
  10. GoTo Greska
  11. End If
  12. Izlaz:
  13. Exit Function
  14. Greska:
  15. Select Case Err.Number
  16. Case 1024
  17. MsgBox "Argument1 nije u okviru dozvoljenog"
  18. Case 2102
  19. MsgBox "Trazeni podaci nisu nadjeni"
  20. Case Else
  21. MsgBox "Nepoznata greska u proceduri " & "Ime procedure"
  22. End Select
  23. Kraj:
  24. End Function

zxz 06.08.2013 10:32
Predmet:Re: Skola Vb-a za napredne

Eh sad smo ovdje nakucali bezbroj nepoznatih stvari pa idemo redom.
Function ImeProcedure(Argument1, argument2)
Function-Govori nam da je to funkcijska procedura odnosno funkcija.
Moglo je biti ispred function napisano Public ili Private Ili pak Static.
Private (Privatno)- (neobavezno) označava da je procedura dostupna samo procedurama u istom modulu.
Public (Javna)- (neobavezno) označava da je procedura dostupna svakoj drugoj u bilo kojem modulu svih aktivnih Workbook i nju se može pozvati.
Static (Statična)- (neobavezno) pokazuje da su u proceduri varijable sačuvane kada postupak zavrÅ¡i.
Ukoliko se ne navede niti jedan od ova tri argumenta onda je procedura Public.

ImeProcedure-O njemu smo vec pisali to je samo ime procedure i ukoliko se radi o funkciji onda mozemo vratiti neku vrijednost a i nemoramo.
Znaci ukoliko se radi o funkciji i samo ime procedure je jedna variabla kojoj mozemo dodijeliti vrijednost.
E posto se radi o variabli onda joj isto mozemo odrediti i tip.
Tip imena procedure pise se na kraju iza zatvorene zagrade koja oivicava ulazne parametre.
Primjer:
Function ImeProcedure((Argument1, argument2, argument3) as String
U predhodnom primjeru smo dimenzionisali variablu imena procedure kao string.

Pozeljno je uvijek dimenzionisati sve variable iako je to neobavezno u VB-u.
Ukoliko to ne radimo program ce nam raditi sigurno sporije.

Argument1,Argument2...
Argument1,argument2... su ulazni parametri pri pokretanju procedure.
Od njih zavisi sam tok procedure.
Pozeljno je da i ulazni parametri budu dimenzionisani.
Ukoliko ispred ulaznog parametra dodamo rijec optional onda taj parametar nije obavezan pri pozivu procedure.
Primjer:
Function UlazniParametri(Par1 As Integer, Optional Par2 As Integer = 7) As Integer
UlazniParametri = Par1 + Par2
End Function


Ovu proceduru mozemo pozvati ovako:
Sub PozivP()
Dim a
a = UlazniParametri(2, 10)
End Sub

Ili Ovako:
Sub PozivP()
Dim a
a = UlazniParametri(2)
End Sub

Kako vidite ukoliko je ulazni parametar neobavezan opnda mu mozemo dodijeliti vrijednost u samom nazivu.
U nekim drugim programskim jezicima to je moguce svim variablama.

miro35 06.08.2013 12:58
Predmet:Re: Skola Vb-a za napredne

Da li ovo znači:
Citat:
Sub PozivP()
Dim a
a = UlazniParametri(2, 10)
End Sub
Da je a = 12
Misli miz ove funkcije:
PreuzmiIzvorni kôd (Text):
  1. Function UlazniParametri(Par1 As Integer, Optional Par2 As Integer = 7) As Integer
  2. UlazniParametri = Par1 + Par2
  3. End Function

zxz 06.08.2013 14:12
Predmet:Re: Skola Vb-a za napredne

Da u tvom slucaju je a= 12 zato sto si u pozivu vrijednost par2 stavio 10.
Znaci ako ga ispustimo pri pozivu on ce imati vrijednost 7
U tvom slucaju je to a=2+10=12
a da si u pozivu imao napr:
a = UlazniParametri(7, 6)
a=7+6=13

zxz 06.08.2013 15:25
Predmet:Re: Skola Vb-a za napredne

Poziv procedure

Jednu i vise procedura mozemo pozvati iz druge procedure bez obzire dali i te procedure imaju poziv prema nekim procedurama i tako dalje.
Sam postupak poziva ima dva nacina:
NazivProcedure ulazniparametar1,ulazniparametar2...
i u drugom slucaju ako procedura u imenu vraca vrijednost tada ide:
dim a
a=ImeProcedure(UlazniParametar1;ulazniParametar2...)

Postoji itreci nacin a to je:
call ImeProcedure(UlazniParametar1;ulazniParametar2...)
U ovom slucaju nemamo ili nam netreba izlazni parametar a nismo se odrekli zagrade.

zxz 06.08.2013 19:22
Predmet:Re: Skola Vb-a za napredne

Ulazni parametri.
Ulazni parametri mogu uticati na sam tok procedure.
Naravno procedure mogu biti bez ulaznih parametara.
Preko ulaznijh parametara mozemo i vratiti neke vrijednosti ako nam trebaju.
Primjer:
PreuzmiIzvorni kôd (Visual Basic):
  1. Private Function Osoba(Ime As String, DatumRodjenja As Date, Optional Godina As Integer) As Integer
  2. Dim Dani As Integer
  3. Dani = Date - DatumRodjenja
  4. Godina = Dani / 365
  5. Osoba = Dani Mod 365
  6. End Function
  7. Private Function Mujo()
  8. Dim StarostG As Integer
  9. Dim JosDana As Integer
  10.  
  11. JosDana = Osoba("Mujo", "01.01.1957", StarostG)
  12. MsgBox " Mujo ima: " & StarostG & " godina i " & JosDana & " Dana"
  13. End Function

Kao prvo ove dvije procedure se moraju nalaziti u istom modulu da bi ovo radilo zato sto su obadvije privatne.
Ukoliko proceduri osoba umjesto private stavimo Public ili pak ne stavimo nista onda se ona moze nalaziti u drugom modulu i sve ce opet raditi.
Ovdje je ocevidno da se radi o procedurama koje pozivaju jedna drugu, medjutim pored toga procedura Mujo dobija od procedure osoba godine i dane starosti na osnovu datuma rodjenja koji dobija iz prve procedure.

Sad bih volio da ovo dobro proucite te da postavljate pitanja za sve nejasnoce jer ovo je veoma bitno za dalji tok teme.

Gjoreski 06.08.2013 20:36
Predmet:Re: Skola Vb-a za napredne

Me interesita ovaj vlezen parametar Optional Godina As Integer kazuva kolku sto razbiram jas deka moze da se koristi ili ne mora no dokolku se ostavi nepotpolneto nas funkcijata ke ni vrati deka ima greska odnosno fali vlezen parametar ?

zxz 06.08.2013 20:50
Predmet:Re: Skola Vb-a za napredne

Ja sam htio sve da napravim u jednoj proceduri ali ideja mi nije bas neka.
Mogli smo mi kroz optional godina i poslati neki parametar i opet da vratimo godine, takodje smo mogli vratiti godine kroz neki drugi parametar ulaza.
PreuzmiIzvorni kôd (Visual Basic):
  1. Public Function Osoba(Ime As String, DatumRodjenja As Date, Optional Godina As Integer) As Integer
  2. Dim Dani As Integer
  3.  
  4. Dani = Date - DatumRodjenja
  5. Godina = Dani / 365
  6. Ime = Dani / 365
  7. Osoba = Dani Mod 365
  8. End Function
  9. Private Function Mujo()
  10. Dim StarostG As Integer
  11. Dim JosDana As Integer
  12. Dim Ime As String
  13.  
  14. Ime = "Mujo"
  15. JosDana = Osoba(Ime, "01.01.1957", StarostG)
  16. MsgBox " MujoIma: " & Int(Ime) & " godina i " & JosDana & " Dana"
  17. End Function