Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje...

41
Uvod u programiranje Uvod u programiranje Programiranje 1 (450) Programiranje 1 (450) Poglavlje 4 Poglavlje 4 Procedure i postupci Procedure i postupci 1 Procedure i postupci Procedure i postupci dr dr dr dr dr dr dr dr. . . . . . . . sc sc sc sc sc sc sc sc. Josip Musić . Josip Musić . Josip Musić . Josip Musić . Josip Musić . Josip Musić . Josip Musić . Josip Musić jmusic [email protected] fesb.hr Originalne Originalne Originalne Originalne Originalne Originalne Originalne Originalne slideove slideove slideove slideove slideove slideove slideove slideove izradio: izradio: izradio: izradio: izradio: izradio: izradio: izradio: Teo Teo Teo Teo Teo Teo Teo Teo Žuljević Žuljević Žuljević Žuljević Žuljević Žuljević Žuljević Žuljević, , , , , , , , dipl dipl dipl dipl dipl dipl dipl dipl. ing. . ing. . ing. . ing. . ing. . ing. . ing. . ing. teo.zuljevic [email protected] fesb.hr

Transcript of Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje...

Page 1: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Uvod u programiranjeUvod u programiranjeProgramiranje 1 (450)Programiranje 1 (450)

Poglavlje 4Poglavlje 4

Procedure i postupciProcedure i postupci

1

Procedure i postupciProcedure i postupci

drdrdrdrdrdrdrdr. . . . . . . . scscscscscscscsc. Josip Musić. Josip Musić. Josip Musić. Josip Musić. Josip Musić. Josip Musić. Josip Musić. Josip Musićjmusicjmusic@@fesb.hrfesb.hr

Originalne Originalne Originalne Originalne Originalne Originalne Originalne Originalne slideoveslideoveslideoveslideoveslideoveslideoveslideoveslideove izradio:izradio:izradio:izradio:izradio:izradio:izradio:izradio:Teo Teo Teo Teo Teo Teo Teo Teo ŽuljevićŽuljevićŽuljevićŽuljevićŽuljevićŽuljevićŽuljevićŽuljević, , , , , , , , dipldipldipldipldipldipldipldipl. ing.. ing.. ing.. ing.. ing.. ing.. ing.. ing.teo.zuljevicteo.zuljevic@@fesb.hrfesb.hr

Page 2: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

PregledPregled

Procedure i postupciProcedure i postupciDefiniranje proceduraDefiniranje procedura

Pozivanje proceduraPozivanje procedura

Korištenje naredbe Korištenje naredbe ReturnReturn

Korištenje lokalnih varijabliKorištenje lokalnih varijabli

Vraćanje vrijednostiVraćanje vrijednosti

ParametriParametri

2

ParametriParametri

Deklariranje i pozivanje parametaraDeklariranje i pozivanje parametara

Mehanizmi prosljeñivanja parametaraMehanizmi prosljeñivanja parametara

Prosljeñivanje vrijednošćuProsljeñivanje vrijednošću

Prosljeñivanje upućivanjemProsljeñivanje upućivanjem

Varijabilna dužina parametarske listeVarijabilna dužina parametarske liste

Prekrcavanje proceduraPrekrcavanje procedura

Potpis procedurePotpis procedure

Rekurzivne procedureRekurzivne procedure

Page 3: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Procedure i postupciProcedure i postupci

Program je podijeljen u manje funkcionalne jedinice.Program je podijeljen u manje funkcionalne jedinice.

manji dijelovi koda jednostavniji za razumijevanje, oblikovanje, manji dijelovi koda jednostavniji za razumijevanje, oblikovanje, razvoj, otkrivanje pogrešaka, razdiobu meñu članovima timarazvoj, otkrivanje pogrešaka, razdiobu meñu članovima tima

omogućuje se ponovna iskoristivost kodaomogućuje se ponovna iskoristivost koda

višestruko izvoñenje s različitih mjesta u programuvišestruko izvoñenje s različitih mjesta u programu

jednostavno korištenje u različitim programimajednostavno korištenje u različitim programima

U VB.NETU VB.NET--u, program je sastavljen od:u, program je sastavljen od:

3

U VB.NETU VB.NET--u, program je sastavljen od:u, program je sastavljen od:

modulamodula

sadrže imenovane blokove koda nazvane proceduramasadrže imenovane blokove koda nazvane procedurama

klasaklasa

sadrže imenovane blokove koda nazvane postupcimasadrže imenovane blokove koda nazvane postupcima

Procedure i postupci izvode odreñene akcije ili Procedure i postupci izvode odreñene akcije ili Procedure i postupci izvode odreñene akcije ili Procedure i postupci izvode odreñene akcije ili Procedure i postupci izvode odreñene akcije ili Procedure i postupci izvode odreñene akcije ili Procedure i postupci izvode odreñene akcije ili Procedure i postupci izvode odreñene akcije ili izračunavanja vrijednosti.izračunavanja vrijednosti.izračunavanja vrijednosti.izračunavanja vrijednosti.izračunavanja vrijednosti.izračunavanja vrijednosti.izračunavanja vrijednosti.izračunavanja vrijednosti.

Page 4: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Korištenje proceduraKorištenje procedura

Definiranje proceduraDefiniranje procedura

Pozivanje proceduraPozivanje procedura

Korištenje naredbe Korištenje naredbe ReturnReturn

Korištenje lokalnih varijabliKorištenje lokalnih varijabli

Vraćanje vrijednostiVraćanje vrijednosti

4

Vraćanje vrijednostiVraćanje vrijednosti

Page 5: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Definiranje procedura Definiranje procedura (1)(1)

MainMain je proceduraje procedura

ista sintaksa za definiranje vlastitih proceduraista sintaksa za definiranje vlastitih procedura

Module ProceduresPublic Sub Main()

'....End Sub

5

Public Sub ExampleProcedureConsole.WriteLine("Example procedura")

End SubEnd Module

Kod sadrži dvije procedure i jedan postupakKod sadrži dvije procedure i jedan postupak

MainMain

ExampleProcedureExampleProcedure

WriteLineWriteLine (postupak klase (postupak klase System.ConsoleSystem.Console))

Page 6: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Definiranje procedura Definiranje procedura (2)(2)

Potrebno navesti sljedeće:Potrebno navesti sljedeće:

imeime

može biti bilo koji dozvoljeni VB.NET identifikatormože biti bilo koji dozvoljeni VB.NET identifikator

ista pravila kao i za varijableista pravila kao i za varijable

Pascal označavanjePascal označavanje

DrawWindowDrawWindow, , SendMailSendMail, , MoveRightMoveRight i i DeleteAllDeleteAll

parametarsku listuparametarsku listu

6

parametarsku listuparametarsku listu

tijelotijelo

pristupni modifikatorpristupni modifikator

odreñuje može li se procedura pozvati i izvan modula u kojem je odreñuje može li se procedura pozvati i izvan modula u kojem je definiranadefinirana

PublicPublic, , PrivatePrivate, , FriendFriend ,(,(ProtectedProtected, , Protected FriendProtected Friend))

Sintaksa:Sintaksa:[accessibility] Sub subname[(argumentlist)]

‘statements

End Sub

Page 7: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Pozivanje proceduraPozivanje proceduraNakon definiranje procedure, moguće je:Nakon definiranje procedure, moguće je:

pozvati proceduru unutar istog modulapozvati proceduru unutar istog modula

navoñenjem imena procedure praćenog zagradama omeñenom navoñenjem imena procedure praćenog zagradama omeñenom parametarskom listomparametarskom listom

pozvati proceduru iz drugog modulapozvati proceduru iz drugog modula

potrebno navesti kompajleru koji modul sadrži proceduru koja se pozivapotrebno navesti kompajleru koji modul sadrži proceduru koja se poziva

ProcedureName(...)

7

potrebno navesti kompajleru koji modul sadrži proceduru koja se pozivapotrebno navesti kompajleru koji modul sadrži proceduru koja se poziva

pozvana procedura mora biti deklarirana sa pozvana procedura mora biti deklarirana sa PublicPublic modifikatorom modifikatorom pristupnostipristupnosti

koristiti ugniježñene pozivekoristiti ugniježñene pozive

procedure mogu pozivati procedure, koje mogu pozivati druge procedure i procedure mogu pozivati procedure, koje mogu pozivati druge procedure i tako redomtako redom

ModuleName.ProcedureName(...)

Page 8: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Pozivanje procedure unutar istog Pozivanje procedure unutar istog modulamodula

Module ProceduresPublic Sub Main()

Console.Writeline("Pozivanje procedure")TestProcedure()Console.Writeline("Kraj programa")

8

Console.Writeline("Kraj programa")End Sub

Public Sub TestProcedure()Console.WriteLine("Test procedura")

End SubEnd Module

Pozivanje procedure

Test procedura

Kraj programa

Page 9: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Pozivanje procedure drugog modulaPozivanje procedure drugog modula

Potrebno:Potrebno:

navesti ime modula gdje se nalazi procedura koja se pozivanavesti ime modula gdje se nalazi procedura koja se poziva

deklarirati proceduru deklarirati proceduru PublicPublic pristupnim modifikatorompristupnim modifikatorom

navoñenjem navoñenjem PrivatePrivate procedura postaje privatna unutar modula u procedura postaje privatna unutar modula u kojem je definiranakojem je definirana

izostavljanjem pristupnog modifikatora, podrazumijevano je javna izostavljanjem pristupnog modifikatora, podrazumijevano je javna

9

Module APublic Sub Main()

B.TestProcedure()End Sub

End Module

Module BPublic Sub TestProcedure()

Console.WriteLine("Test procedura")End Sub

End Module

Test procedura

Page 10: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Ugniježñeni pozivi proceduraUgniježñeni pozivi procedura

Pozivanje procedura unutar procedurePozivanje procedura unutar procedureneograničen broj ugniježñenih pozivaneograničen broj ugniježñenih poziva

svaki poziv procedure zahtijeva memoriju za pohranu informacijasvaki poziv procedure zahtijeva memoriju za pohranu informacija

Module NestedCallsPublic Sub Main()

Procedure1()Procedure2()

Procedura 1

Procedura 2

Procedura 2

10

Procedure2()End Sub

Sub Procedure1()Console.WriteLine("Procedura 1")Procedure2()

End Sub

Sub Procedure2()Console.WriteLine("Procedura 2")

End SubEnd Module

Procedura 2

Page 11: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Korištenje naredbe Korištenje naredbe ReturnReturn

Uobičajeno, procedura vraća izvoñenje pozivatelju nakon Uobičajeno, procedura vraća izvoñenje pozivatelju nakon izvoñenja posljednje naredbe procedure.izvoñenja posljednje naredbe procedure.

Za trenutan povrat pozivatelju koristi se naredba Za trenutan povrat pozivatelju koristi se naredba ReturnReturn

Module ReturnExamplePublic Sub Main()

TestProcedure()Pozdrav

11

TestProcedure()End Sub

Sub TestProcedure()Console.WriteLine("Pozdrav")ReturnConsole.WriteLine("Bye, Bye")

End SubEnd Module

U primjeru, posljednje pozivanje U primjeru, posljednje pozivanje Console.WriteLineConsole.WriteLinenikada neće biti izvedeno!nikada neće biti izvedeno!

Page 12: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Korištenje Korištenje ReturnReturn sa uvjetnim sa uvjetnim naredbamanaredbama

Omogućuje proceduri povrat pozivatelju ako je zadani uvjet postignut.Omogućuje proceduri povrat pozivatelju ako je zadani uvjet postignut.

Public Sub Main()TestProcedure()TestProcedure()TestProcedure()

End Sub

Pozdrav

Bye, Bye

12

End SubSub TestProcedure()

Static counter As Integercounter += 1Select Case counter

Case 1Console.WriteLine("Pozdrav")

Case 2Console.WriteLine("Bye, Bye")

Case ElseReturn

End SelectEnd Sub

Bye, Bye

Page 13: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Korištenje lokalnih varijabliKorištenje lokalnih varijabli

Lokalne varijableLokalne varijable

se stvaraju na ulasku u proceduruse stvaraju na ulasku u proceduru

memorija se alocira pri svakom ulasku u proceduru memorija se alocira pri svakom ulasku u proceduru

su privatne unutar proceduresu privatne unutar procedure

varijable moguće koristiti jedino unutar procedure u kojima su varijable moguće koristiti jedino unutar procedure u kojima su deklariranedeklarirane

13

deklariranedeklarirane

se uništavaju na izlaskuse uništavaju na izlasku

memorija se oslobaña na izlasku iz procedurememorija se oslobaña na izlasku iz procedure

vrijednost neće biti sačuvana iz jednog poziva za drugivrijednost neće biti sačuvana iz jednog poziva za drugi

Page 14: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Vraćanje vrijednostiVraćanje vrijednosti

Nužno:Nužno:

Deklarirati proceduru sa Deklarirati proceduru sa FunctionFunctionfunkcije, funkcijske procedurefunkcije, funkcijske procedure

Odrediti tip podatka povratne vrijednostiOdrediti tip podatka povratne vrijednosti

Dodati Dodati ReturnReturn naredbu zajedno sa izrazomnaredbu zajedno sa izrazom

postavlja povratnu vrijednostpostavlja povratnu vrijednost

14

postavlja povratnu vrijednostpostavlja povratnu vrijednost

trenutan povrat pozivateljutrenutan povrat pozivatelju

ili, pridružiti vrijednost imenu procedureili, pridružiti vrijednost imenu procedurepostavlja povratnu vrijednostpostavlja povratnu vrijednost

povrat pozivatelju nakon izvoñenja posljednje naredbe procedurepovrat pozivatelju nakon izvoñenja posljednje naredbe procedure

Page 15: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Definiranje funkcijaDefiniranje funkcija

Potrebno odrediti tip povratne vrijednosti funkcijePotrebno odrediti tip povratne vrijednosti funkcije

[accessibility] Function functionname[(argumentlist)] As datatype

' statements

End Function

15

Page 16: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Korištenje Korištenje ReturnReturn za povratza povrat

ReturnReturn naredba praćena izrazom trenutno prekida naredba praćena izrazom trenutno prekida izvoñenje funkcije i vraća pozivatelju izraz kao povratnu izvoñenje funkcije i vraća pozivatelju izraz kao povratnu vrijednost funkcije.vrijednost funkcije.

ReturnReturn naredba može vratiti samo jednu vrijednost iz naredba može vratiti samo jednu vrijednost iz svakog poziva funkcije.svakog poziva funkcije.

za vraćanje više vrijednosti koriste se za vraćanje više vrijednosti koriste se ByRefByRef parametri koji će biti parametri koji će biti diskutirani kasnijediskutirani kasnije

ili povratna vrijednost strukturnog tipa (ili povratna vrijednost strukturnog tipa (poglavlje 5poglavlje 5))

16

ili povratna vrijednost strukturnog tipa (ili povratna vrijednost strukturnog tipa (poglavlje 5poglavlje 5))

ili vraćanjem upućivanja na neko polje ili klasu koji sadrže višestruke ili vraćanjem upućivanja na neko polje ili klasu koji sadrže višestruke vrijednosti (vrijednosti (poglavljepoglavlje 5)5)

Function functionname[(argumentlist)] As datatype

' ...

Return expression

' ...

End Function

Page 17: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Primjer korištenja Primjer korištenja ReturnReturn za povratza povrat

Module ReturnExamplePublic Sub Main()

Dim x As Integerx = FiveMinusTwo()Console.WriteLine(x)

End Sub

3

17

End SubFunction FiveMinusTwo() As Integer

Dim x, y As Integerx = 5y = 2Return x - y

Console.WriteLine("Kraj funkcije")End Function

End Module

Page 18: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Vraćanje vrijednosti preko imena Vraćanje vrijednosti preko imena funkcijefunkcije

Izvoñenje ostaje unutar funkcijeIzvoñenje ostaje unutar funkcije

vraćanje pozivatelju nakon izvoñenja posljednje vraćanje pozivatelju nakon izvoñenja posljednje naredbe procedurenaredbe procedure

Function functionname[(argumentlist)] As datatype

18

Function functionname[(argumentlist)] As datatype

' ...

functionname = expression

' ...

End Function

Page 19: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Primjer: izračun kvadratnog korijenaPrimjer: izračun kvadratnog korijena

Function CalculateSqRoot(ByVal number As Double) As DoubleIf number < 0 Then

Exit FunctionElse

Return Math.Sqrt(number)End If

End Function

19

Klasa Klasa System.MathSystem.Math sadrži matematičke postupkesadrži matematičke postupke

Sintaksa postupka za izračun kvadratnog korijena:Sintaksa postupka za izračun kvadratnog korijena:

Koja pretvorba se implicitno izvodi u primjeru?Koja pretvorba se implicitno izvodi u primjeru?

Public Function Sqrt( ByVal d As Double) As Double

Page 20: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Primjer korištenja imena funkcije za Primjer korištenja imena funkcije za povrat vrijednostipovrat vrijednosti

Module ReturnExamplePublic Sub Main()

Dim x As Integerx = FiveMinusTwo()Console.WriteLine(x)

End Sub

Kraj funkcije

3

20

End SubFunction FiveMinusTwo() As Integer

Dim x, y As Integerx = 5y = 2FiveMinusTwo = x - yConsole.WriteLine("Kraj funkcije")

End FunctionEnd Module

Page 21: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Korištenje parametaraKorištenje parametara

Deklariranje i pozivanje parametaraDeklariranje i pozivanje parametara

Mehanizmi prosljeñivanja parametaraMehanizmi prosljeñivanja parametara

Prosljeñivanje vrijednošćuProsljeñivanje vrijednošću

Prosljeñivanje upućivanjemProsljeñivanje upućivanjem

Varijabilna dužina parametarske listeVarijabilna dužina parametarske liste

21

Varijabilna dužina parametarske listeVarijabilna dužina parametarske liste

Page 22: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Deklariranje i pozivanje parametaraDeklariranje i pozivanje parametara

Omogućuju informacijama da budu proslijeñene unutar i Omogućuju informacijama da budu proslijeñene unutar i izvan procedure.izvan procedure.

Deklariranje parametaraDeklariranje parametara

smještaju se unutar zagrada nakon imena proceduresmještaju se unutar zagrada nakon imena procedure

višestruki parametri razdvojeni zarezomvišestruki parametri razdvojeni zarezom

parametarska lista može biti praznaparametarska lista može biti prazna

svaki parametar ima ime i tipsvaki parametar ima ime i tip

22

svaki parametar ima ime i tipsvaki parametar ima ime i tip

Pozivanje procedure sa parametrimaPozivanje procedure sa parametrima

potrebno osigurati vrijednost za svaki parametarpotrebno osigurati vrijednost za svaki parametar

Public Sub Main()Dim x As Shortx = Addition(5,2)Console.WriteLine(x)

End Sub

Function Addition(ByVal x As Short, ByRef y As Short) As ShortReturn x + y

End Function

????????????????

Page 23: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Mehanizmi prosljeñivanja parametaraMehanizmi prosljeñivanja parametara

Izbor izmeñu dva različita načinaIzbor izmeñu dva različita načina

pomoću vrijednosti pomoću vrijednosti ((by valueby value))

vrijednosni parametri se nazivaju i ulaznim parametrima jer vrijednosni parametri se nazivaju i ulaznim parametrima jer podaci mogu biti preneseni u proceduru ali ne i iz procedure podaci mogu biti preneseni u proceduru ali ne i iz procedure

pomoću upućivanja pomoću upućivanja ((by referenceby reference))

referencni parametri se ponekad nazivaju ulazno/izlaznim referencni parametri se ponekad nazivaju ulazno/izlaznim

23

referencni parametri se ponekad nazivaju ulazno/izlaznim referencni parametri se ponekad nazivaju ulazno/izlaznim parametrima jer podaci mogu biti preneseni u proceduru ali parametrima jer podaci mogu biti preneseni u proceduru ali i iz procedurei iz procedure

Page 24: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Prosljeñivanje vrijednošćuProsljeñivanje vrijednošću

Podrazumijevani mehanizam prosljeñivanja Podrazumijevani mehanizam prosljeñivanja parametaraparametara

kopira se vrijednost parametrakopira se vrijednost parametra

varijabla može biti promijenjena unutar procedurevarijabla može biti promijenjena unutar procedure

promjena nema utjecaja na vrijednost izvan procedurepromjena nema utjecaja na vrijednost izvan procedure

parametar mora biti istog ili kompatibilnog tipaparametar mora biti istog ili kompatibilnog tipa

implicitna pretvorba tipovaimplicitna pretvorba tipova

24

implicitna pretvorba tipovaimplicitna pretvorba tipova

Public Sub Main()Dim x As Integer = 5Count(x)Console.WriteLine(x)

End Sub

Sub Count(ByVal c As Integer)c += 1

End Function

xxxxxxxx55

cccccccc55

cccccccc66

original ostaje original ostaje original ostaje original ostaje original ostaje original ostaje original ostaje original ostaje

nepromijenjen!nepromijenjen!nepromijenjen!nepromijenjen!nepromijenjen!nepromijenjen!nepromijenjen!nepromijenjen!

xxxxxxxx55

kopija od x !kopija od x !kopija od x !kopija od x !kopija od x !kopija od x !kopija od x !kopija od x !

5

Page 25: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Prosljeñivanje upućivanjemProsljeñivanje upućivanjem

Referencni parametriReferencni parametri

upućivanje na memorijsku lokacijuupućivanje na memorijsku lokaciju

ne stvara se nova memorijska lokacijane stvara se nova memorijska lokacija

ista memorijska lokacija kao i varijabla koja se prosljeñuje u pozivu ista memorijska lokacija kao i varijabla koja se prosljeñuje u pozivu procedureprocedure

koristekoriste ByRefByRef ključnu riječ u definiciji procedureključnu riječ u definiciji procedure

promjena vrijednosti referencnog parametra utječe na vrijednost promjena vrijednosti referencnog parametra utječe na vrijednost proslijeñene varijableproslijeñene varijable

25

proslijeñene varijableproslijeñene varijable

Public Sub Main()Dim x As Integer = 5Count(x)Console.WriteLine(x)

End Sub

Sub Count(ByRef c As Integer)c += 1

End Function

original original original original original original original original

promjenjen!promjenjen!promjenjen!promjenjen!promjenjen!promjenjen!promjenjen!promjenjen!

xxxxxxxx55

6

xxxxxxxx66

Page 26: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Varijabilna dužina parametarske listeVarijabilna dužina parametarske liste

Promjenljivi broj parametaraPromjenljivi broj parametara

Deklarira se kao niz na kraju parametarske listeDeklarira se kao niz na kraju parametarske liste

modifikator modifikator ParamArrayParamArray

Uvijek se prosljeñuju Uvijek se prosljeñuju ByValByVal

Više u sljedećem poglavlju (nizovi)...Više u sljedećem poglavlju (nizovi)...

26

Više u sljedećem poglavlju (nizovi)...Više u sljedećem poglavlju (nizovi)...

Page 27: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Public Sub Main()

Prekrcavanje proceduraPrekrcavanje procedura

Deklariranje prekrcanih proceduraDeklariranje prekrcanih procedura

dijele isto ime u moduludijele isto ime u modulu

Potpis procedurePotpis procedure

Korištenje prekrcanih postupakaKorištenje prekrcanih postupaka

27

Public Sub Main()Console.WriteLine(Average(2, 3) + Average(5, 6, 7))End Sub

Function Average(ByVal x As Short, ByVal y As Short) As SingleReturn (x + y) / 2

End Function

Function Average(ByVal x As Short, ByVal y As Short,_ByVal z As Short) As Single

Return (x + y + z) / 3End Function

8,5

Page 28: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Potpis procedure Potpis procedure (1)(1)

Potpis procedure mora biti jedinstven unutar Potpis procedure mora biti jedinstven unutar modula/klasemodula/klase

Definiciju potpisa procedure čineDefiniciju potpisa procedure čine

ime procedureime procedure

tipovi parametaratipovi parametara

28

tipovi parametaratipovi parametara

broj parametarabroj parametara

Na potpis ne utječeNa potpis ne utječe

ime parametaraime parametara

povratna vrijednost procedurepovratna vrijednost procedure

Page 29: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Potpis procedure Potpis procedure (2)(2)

Različiti potpisi proceduraRazličiti potpisi procedura

Function Signature()'...

End Function

Function Signature(ByVal x As Short)'...

29

Function Signature(ByVal x As Integer)'...

End Function

Function Signature(ByVal x As Short, ByVal y As Short)'...

End Function

'...End Function

Page 30: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Potpis procedure Potpis procedure (3)(3)

Isti potpisi proceduraIsti potpisi procedura

Function Signature(ByVal x As Short) As Integer'...

End Function

Function Signature(ByRef x As Short) As Integer'...

30

'...End Function

Function Signature(ByVal y As Short) As Integer'...

End Function

Function Signature(ByVal x As Short) As Short'...

End Function

Page 31: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Korištenje prekrcavanja proceduraKorištenje prekrcavanja procedura

Prekrcavanja Prekrcavanja (overloading)(overloading) proceduraprocedura

se koristi za slične postupke koji zahtijevaju različite se koristi za slične postupke koji zahtijevaju različite brojeve ili tipove parametarabrojeve ili tipove parametara

za dodavanje nove funkcionalnosti postojećem koduza dodavanje nove funkcionalnosti postojećem kodu

31

Public Sub Main()Greet()Greet("Ivan")

End Sub

Sub Greet()Console.WriteLine("Hi")

End Sub

Sub Greet(ByVal name As String)Console.WriteLine("Hi {0}", name)

End Sub

Hi

Hi Ivan

Page 32: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Rekurzivne procedureRekurzivne procedure

Procedura koja poziva samu sebe.Procedura koja poziva samu sebe.

Znaju rješenje baznog problema.Znaju rješenje baznog problema.

Kod složenijih problema, dijele problem na dva dijelaKod složenijih problema, dijele problem na dva dijela

dio koji znaju riješitidio koji znaju riješiti

dio koji ne znaju riješiti dio koji ne znaju riješiti

mora nalikovati baznom oblikumora nalikovati baznom obliku

32

mora nalikovati baznom oblikumora nalikovati baznom obliku

rekurzivnim pozivom se dolazi do pojednostavljenjarekurzivnim pozivom se dolazi do pojednostavljenja

Procedura može pozvati samu sebeProcedura može pozvati samu sebe

direktnodirektno

indirektnoindirektno

Korisno za rješavanje odreñenih problemaKorisno za rješavanje odreñenih problema

za rukovanje složenim podatkovnim strukturamaza rukovanje složenim podatkovnim strukturama

liste, stablaliste, stabla

Page 33: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Direktni rekurzivni poziviDirektni rekurzivni pozivi

Public Sub Main()A()

End Sub

A

A

A

A

A

A

A

A

33

Sub A()Console.WriteLine("Izvodi se A")A()

End Sub

A

A

A

A

A

A

A

A

A

Page 34: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Indirektni rekurzivni poziviIndirektni rekurzivni pozivi

Public Sub Main()A()

End Sub

Sub A()Console.WriteLine("Izvodi se A")B()

End Sub

A

B

A

B

A

B

A

B

34

End Sub

Sub B()Console.WriteLine("Izvodi se B")A()

End Sub

B

A

B

A

B

A

B

A

B

Page 35: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Primjer: izračun faktorijela broja Primjer: izračun faktorijela broja (1)(1)

Faktorijel je umnožak svih brojeva izmeñu 1 i tog brojaFaktorijel je umnožak svih brojeva izmeñu 1 i tog brojan•(nn•(n--1)•(n1)•(n--2)•…•12)•…•1

F(0)=1 F(0)=1

F(1)=1F(1)=1

F(2)=1*2=2F(2)=1*2=2

Definicija rekurzivne procedure:Definicija rekurzivne procedure:

n! = n • (nn! = n • (n--1)!1)! , uz uvjet, uz uvjet 0! = 10! = 1

35

n! = n • (nn! = n • (n--1)!1)! , uz uvjet, uz uvjet 0! = 10! = 1

Function Factorial(ByVal number As Integer) As IntegerIf number <= 1 Then 'bazni slučaj

Return 1Else

Return number * Factorial(number - 1)End If

End Functionrekurzivni pozivrekurzivni poziv

Page 36: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Primjer: izračun faktorijela broja Primjer: izračun faktorijela broja (2)(2)

Function Factorial(ByVal number As Long) As Long…

Return number * Factorial(number - 1)…

End Function

33

Factorial(2)Factorial(2)

rekurzivni korakrekurzivni korak11

3*2*13*2*1

55

44

36

Function Factorial(ByVal number As Long) As Long…

Return number * Factorial(number - 1)…

End Function

Function Factorial(ByVal number As Long) As Long…

Return 1…

End Function

Factorial(1)Factorial(1)

33

2*12*1

22

11

Page 37: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

SažetakSažetak

Tipovi proceduraTipovi procedura

SubSub

procedure dogañajaprocedure dogañaja

FunkcijskeFunkcijske

SvojstvaSvojstva

Prosljeñivanje parametaraProsljeñivanje parametara

upućivanjem upućivanjem (by reference)(by reference)

37

upućivanjem upućivanjem (by reference)(by reference)

prijenos podataka u oba smjeraprijenos podataka u oba smjera

pozvana procedura koristi parametar za vraćanje nove vrijednosti pozvana procedura koristi parametar za vraćanje nove vrijednosti pozivnom kodupozivnom kodu

koristi se za vraćanje više vrijednostikoristi se za vraćanje više vrijednosti

vvrijednošćurijednošću (by value)(by value)

prijenos podataka samo u jednom smjeruprijenos podataka samo u jednom smjeru

zaštićuje proslijeñene varijable od promjena unutar procedurezaštićuje proslijeñene varijable od promjena unutar procedure

efikasnije za jednostavne vrijednosne tipoveefikasnije za jednostavne vrijednosne tipove

Page 38: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Zadatak 1: Brojač procedureZadatak 1: Brojač procedure

Zadatak: Izračunati broj pozivanja neke procedure.Zadatak: Izračunati broj pozivanja neke procedure.

Moguća rješenja, prednosti i nedostaci:Moguća rješenja, prednosti i nedostaci:

Korištenjem referencnog parametra preko kojeg se Korištenjem referencnog parametra preko kojeg se ažurira brojač u pozivnom koduažurira brojač u pozivnom kodu

problem s pozivima s više različitih mjesta u programu problem s pozivima s više različitih mjesta u programu

Upotrebom globalne varijable kojoj se povećava Upotrebom globalne varijable kojoj se povećava

38

Upotrebom globalne varijable kojoj se povećava Upotrebom globalne varijable kojoj se povećava vrijednost naredbom unutar procedure.vrijednost naredbom unutar procedure.

globalne varijable dozvoljavaju pristup programskom kodu iz globalne varijable dozvoljavaju pristup programskom kodu iz bilo kojeg dijela programa i ne predstavljaju najsigurniju zaštitu bilo kojeg dijela programa i ne predstavljaju najsigurniju zaštitu podatkapodatka

Deklariranjem varijable unutar procedure korištenjem Deklariranjem varijable unutar procedure korištenjem modifikatora modifikatora StaticStatic

Page 39: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Zadatak 2: Potenciranje Zadatak 2: Potenciranje

Napisati rekurzivnu proceduru koja računa Napisati rekurzivnu proceduru koja računa potenciranje brojeva.potenciranje brojeva.

39

Page 40: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Pitanja ?Pitanja ?

40

Page 41: Uvod u programiranje Programiranje 1 (450) - …. semestar/Programiranj… · Uvod u programiranje Programiranje 1 (450) Poglavlje 4 Procedure i postupci 1 drddrrdr. .. . scssccsc.

Za više informacijaZa više informacija……

Odgovaram na mailOdgovaram na mail--oveove ((uglavnom uvijekuglavnom uvijek ::--))

jmusicjmusic@@fesb.hrfesb.hr (FESB)(FESB)

Web site Web site za slajdoveza slajdove, , kod, informacijekod, informacije::

www.fesb.hr/www.fesb.hr/elearningelearning

41