You are on page 1of 23

Subroutines

Funkcije
Vrlo esto pri pisanju programa moemo doi u

situaciju kada vie puta treba da izvrimo isti set naredbi U ovim situacijama je poeljno koristiti funkcije (podrutine)

Sub..EndSub
Funkcija je segment koda unutar veeg programa koji

je specifian po tome to radi, i moe biti pozvan iz bilo kojeg dijela programa. Funkcije prepoznajemo po kljunoj rijei Sub pakon ega slijedi njeno ime i odgovarajue naredbe, dok kraj funkcije prepoznajemo po kljunoj rijei EndSub

Primjer
Segment koda koji slijedi predstavlja funkciju

PrintTime, ija je uloga da odtampa trenutno vrijeme na tekstualnom prozoru


Sub PrintTime TextWindow.WriteLine(Clock.Time) EndSub

Upotreba u programu
Slijedi program koji sadri navedu funkciju i poziva je

na vie mjesta u programu


PrintTime() TextWindow.Write("Enter your name: ") name = TextWindow.Read() TextWindow.Write(name + ", the time now is: ") PrintTime() Sub PrintTime TextWindow.WriteLine(Clock.Time) EndSub

Rezultat
Funkciju izvravate tako to pozivate ime_funkcije()
Zagrade su obavezne da bi rekli programu da izvri

funkciju

Prednosti funkcija
Kao to smo ve vidjeli, funkcije nam pomau da smanjimo

koliinu koda koju treba da otkucamo Kada jednom kreirate funkcijuPrintTime, moete je pozivati iz bilo kojeg mjesta u programu i ona e tampati trenutno vrijeme Osim navedenog, funkcije vam mogu pomoi da kompleksan problem raslanite na jednostavnije djelove Na primjer, ako treba da rijeite kompleksnu jednainu, moete napisati vie funkcija koje rjeavaju sitnije djelove te jednaine. Nakon toga moete povezati rezultate da bi dobili rjeenje poetne jednaine

itljivost programa
Funkcije takoe mogu poveati itljivost programa Drugim rijeima, ako ste umjesto djelova programa

koji se esto izvravaju kreirali funkcije sa odgovarajuim imenima, va program postaje jednostavniji za itanje i shvatanje Ovo je veoma bitno ako elite da shvatite tui program, ili da va program uinite razumljivim za ostale Ovo nam ponekad olakava da bre shvatimo kod koji smo samo napisali, naroito ako je od tada prolo puno vremena

Napomena
Funkcije u Small Basicu moete koristiti samo unutar

programa u kome su napisane Funkcije je nemogue pozivati iz ostalih programa

Upotreba promjenljivih
Funkcije mogu koristiti sve promjenljive koje ste

kreirali u programu Kao primjer, program koji slijedi uzima dva broja i tampa vei od njih Primjetite da se promjenljiva max koristi i unutar i izvan funkcije

Primjer
TextWindow.Write("Enter first number: ") num1 = TextWindow.ReadNumber() TextWindow.Write("Enter second number: ") num2 = TextWindow.ReadNumber() FindMax() TextWindow.WriteLine("Maximum number is: " + max) Sub FindMax If (num1 > num2) Then max = num1 Else max = num2 EndIf EndSub

Izlaz iz programa

Funkcije pri radu sa grafikom


Pogledajmo jo jedan primjer koji e nam ilustrovati

rad sa funkcijama Ovog puta emo koristiti grafiki program koji rauna koordinate razliitih taaka i smjeta ih u promjenljive xiy Nakon toga poziva funkciju DrawCircleUsingCenter koja crta krug sa centrom u taki (x,y)

Primjer
GraphicsWindow.BackgroundColor = "Black" GraphicsWindow.PenColor = "LightBlue" GraphicsWindow.Width = 480 For i = 0 To 6.4 Step 0.17 x = Math.Sin(i) * 100 + 200 y = Math.Cos(i) * 100 + 200 DrawCircleUsingCenter() EndFor Sub DrawCircleUsingCenter startX = x - 40 startY = y - 40 GraphicsWindow.DrawEllipse(startX, startY, 120, 120) EndSub

Rezultat

Pozivanje funkcija iz petlji


Ponekad se funkcije pozivaju iz unutranjosti petlji,

prilikom ega one izvravaju isti set naredbi ali sa razliitim vrijednostima u jednoj ili vie promjenljivih Uzmimo za primjer funkciju PrimeCheck koja provjerava da li je broj prost Moete napisati program koji korisniku dozvoljava da unese odreenu vrijednost, i pomou navedenu procedure odredi da li je broj prost Program koji slijedi ilustruje navedeno

PrimeCheck
TextWindow.Write("Enter a number: ") i = TextWindow.ReadNumber() isPrime = "True" PrimeCheck() If (isPrime = "True") Then TextWindow.WriteLine(i + " is a prime number") Else TextWindow.WriteLine(i + " is not a prime number") EndIf Sub PrimeCheck For j = 2 To Math.SquareRoot(i) If (Math.Remainder(i, j) = 0) Then isPrime = "False" Goto EndLoop EndIf Endfor EndLoop: EndSub

Pojanjenje
Funkcija PrimeCheck uzima vrijednost unijetog broja i

pokuava da ga podijeli sa manjim brojevima Ako je neki od tih brojeva djelilac broja i, broj i nije prost U tom trenutku funkcija setuje vrijednost promjenljive isPrime na False i izlazi Ako broj i nije djeljiv manjim brojevima, vrijednost promjenljive isPrime ostaje True

Rezultat

Lista prostih
Sada kada imamo funkciju koja provjera da li je broj

prostm moemo je iskoristiti da izlistamo sve proste broje manje od ,recimo , 100. Veoma je jednostavno izmijenjiti prethodni program tako da se PrimeCheck poziva iz petlje Ovo funkciji daje drugu vrijednost za raunanje pri svakom pokretanju petlje Slijedi kod navedenog programa

Lista prostih
For i = 3 To 100 isPrime = "True" PrimeCheck() If (isPrime = "True") Then TextWindow.WriteLine(i) EndIf EndFor
Sub PrimeCheck For j = 2 To Math.SquareRoot(i) If (Math.Remainder(i, j) = 0) Then isPrime = "False" Goto EndLoop EndIf Endfor EndLoop: EndSub

Objanjenje
U navedenom programu, vrijednost promjenljive i se

mijenja pri svakom ponavljanju petlje Unutar petlje se vri poziv funkcije PrimeCheck PrimeCheck uzima vrijednost promjenljive i i provjerava da li je i prost broj Rezultat se smjeta u promjenljivu isPrime kojoj se pristupa iz petlje van funkcije Vrijednost promjenljive i se tampa ako je i prost broj A poto program poine od broja 3 i ide do 100, dobijamo listu svih prostih brojeva koji se nalaze izmeu 3 i 100

Rezultat
Slijedi rezultat prethodnog programa

You might also like