You are on page 1of 75

Visoka škola za informacijske tehnologije

Programske metode i apstrakcije

1. Predavanje
Uvod u kolegij, Metode i Algoritmi, Apstrakcije,
Ponavljanje Python proceduralnih mogućnosti

Dušan Mišljenčević
Podsjetnici

• Evidentirajte prisutnost: Obvezno se potpišite!


• Konzultacije – termin prema dogovoru, online
• SCAD – svi potrebni materijali i linkovi
• Na prva dva roka se može polagati pojedinačno kolokvij ili ispit
➢ ako nekome ostane jedan kolokvij nepoložen na prva dva roka može
birati piše li taj kolokvij ili ispit...nakon ta dva roka ako ne položi ili ne
izađe, mora polagati ispit
➢ ako su nekome ostala dva nepoložena kolokvija na prvom roku može
birati koji će od ta dva kolokvija polagati (ili ispit)
o Ako ne prođe, na sljedećem može pisati samo ispit.
o Ako prođe, na drugom može polagati drugi nepoloženi kolokvij ili ispit.
• Na jesenskom roku se može pisati samo ispit

Programske metode i apstrakcije 2


Nastavne aktivnosti

• Predavanja i auditorne
➢ predavanja 3 sata, prema rasporedu
➢ auditorne 1 sat, prema rasporedu
• Laboratorijske vježbe
➢ 1 x 3 sata tjedno, prema rasporedu
➢ Obavijest na SCAD-u o priznavanju vježbi
• Ukupno 15 termina
• 2 kolokvija
➢ kolokvirajte! Uvjetni prolaz 40%, sumarni prosjek >=50%
➢ na prva dva roka možete ispraviti neki od kolokvija!

Programske metode i apstrakcije 3


Ocjenjivanje

• Izlazni testovi na predavanju (utječu na ocjenu predavanja)


• Ulazni / Izlazni testovi na laboratorijskim vježbama (utječu na
ocjenu laboratorijskih vježbi)
• Kreiranje ocjene – pogledajte opća pravila kolegija na SCAD-u
• Pogledajte silabus na SCAD-u

Programske metode i apstrakcije 4


Literatura

• Springer:

• Prezentacije i materijali s predavanja i auditornih vježbi


• Materijali s laboratorijskih vježbi

Programske metode i apstrakcije 5


Motivacija

• položiti predmet i skupiti ECTS bodove


• Naći dobar posao!
• Još bolje – pokrenuti svoj posao!
• The U.S. Bureau of Labor Statistics predviđa 21% rast poslova
programera u periodu od 2018 do 2028
• Srednja godišnja plaća SW programera je oko $106,000, što je
skoro trostruka godišnja plaća radnika u SAD
• Python je jedan od najtraženijih programskih jezika danas

Programske metode i apstrakcije 6


Agenda

• Uvod u kolegij
• Programske metode i algoritmi
• Programske apstrakcije
• Usporedbe programskih jezika
• Python – ponavljanje proceduralnih
mogućnosti

Programske metode i apstrakcije 7


Uvod – Važnost kolegija

• Računala obavljaju dvije ključne operacije


➢ obavljaju kalkulacije/izračune
➢ spremaju rezultate
• Rješavanje probleme na način prilagođen računalu
• Korištenje računala da čine što želimo/trebamo
• Kako znanje predstaviti podatkovnim strukturama
• Korištenje računalne metafore iteracije i rekurzije
• Korištenje apstrakcije tipova podataka i procedura
• Organiziranje i moduliranje sustava uporabom objekata klasa i
metoda
• Različite klase algoritama pretraživanja i sortiranja

Programske metode i apstrakcije 8


Uvod - O PMA kolegiju (1/2)

• Programske metode i apstrakcije


➢ Definicija i opis metoda
➢ Osnovni principi analize i projektiranja algoritama
➢ Definicija i opis apstrakcija
• Prikaz i usporedba najčešće korištenih programskih jezika

Programske metode i apstrakcije 9


Uvod - O PMA kolegiju (2/2)

• Kroz kolegij ćemo naučiti:


➢ Ponavljanje objektno-orijentiranih mogućnosti Python programskog
jezika
➢ Napredne proceduralne teme: iznimke (built-in), try-except-else-
finally, stringovi, konstante
➢ Napredne OOP teme u Pythonu: statički članovi, jednakost objekata,
hash metoda, uništavanje objekata, kontekstni upravitelji, unit testing
u Pythonu
➢ Uvod u algoritme, složenost, notacije, pristupi
➢ Višedimenzionalnost (lista sastavljena od drugih lista), Vezane liste
➢ Rekurzija i backtracking
➢ Tekstualne i binarne datoteke
➢ Kolekcije objekata - osnovne operacije, slijedne kolekcije,
asocijativne kolekcije rječnici i skupovi, iteratori
➢ Algoritmi pretraživanja
➢ Algoritmi sortiranja

Programske metode i apstrakcije 10


Programske metode (1/4)

• Programske metode su pristup analizi kompleksnih


probleme, planiranju SW razvoja i kontroliranju razvojnih
procesa
• Tipovi Programskih metoda
➢ Procedural Programming
➢ Problem je podijeljen u procedure ili blokove koda koji svaki izvodi neki
zadatak
➢ Object-oriented Programming
➢ Rješenje je podjela na objekte koji opisuju problem
➢ Functional Programming
➢ Problem tj. željeno rješenje je podijeljeno na funkcijske jedinice
➢ Logical Programming
➢ Ovdje je problem podijeljen na logičke umjesto funkcijskih jedinic a

Programske metode i apstrakcije 11


Programske metode (2/4)

• U svakoj metodi se problem rastavlja na manje jedinice


• Strategija pristupa jedinicama
➢ Strategije direktnog rješavanja (eng. Direct solution strategies)
➢ Optimizacijski model (Brute force algoritmi i greedy algoritmi)
➢ Unatražne strategije (eng. Backtracking strategies)
➢ Simple backtracking i branch-and-bound algoritmi.
➢ Top-down solution strategies
➢ Divide-and-conquer algoritmi.
➢ Bottom-up solution strategies
➢ Dinamičko programiranje (Dynamic programming)
➢ Randomized strategies
➢ Monte Carlo algoritmi

Programske metode i apstrakcije 12


Programske metode (3/4)

Metode u programiranju (kodu)


• Interface methods
• Constructor methods
• Implementation methods
➢ Method signature
➢ Mehtod body
➢ Return type and return statement

Programske metode i apstrakcije 13


Programske metode (4/4)

• Pristup pisanju koda


➢ Dizajn
➢ Kodiranje
➢ Provjera
• Tehnike u programiranju (kodu)
➢ Variable
➢ Ponavljanja ili petlje
➢ Izbor ili Selekcija
➢ Polja
➢ Objekti
➢ Modularnost
➢ Manipulacija Teksta
➢ Random brojevi

Programske metode i apstrakcije 14


Programske apstrakcije (1/2)

Apstrakcija u programiranju je sposobnost koda da


prikrije kompleksnu logiku

Programske metode i apstrakcije 15


Programske apstrakcije (2/2)

Primjer apstrakcije: telefon

Programske metode i apstrakcije 16


Algoritmi (1/3)

Algoritam je svaka precizno definirana procedura koja


➢ rješava dobro specificirani problem računanja
➢ prima skup ulaznih vrijednosti i daje izlazni skup
vrijednosti

Programske metode i apstrakcije 17


Algoritmi (2/3)

Algoritam je
• slijed (sekvenca) jednostavnih koraka/operacija koje želimo
napraviti
• kontrola toka procesa koji specificira kako je svaki korak izvršen
• uvjet kada se algoritam zaustavlja
• konceptualna ideja tj. program je konkretna primjena algoritma
• 1+2+3 = algoritam
• lista za kupovinu je primjer algoritma
• Kada je algoritam kvalitetan?
➢ Kada je algoritam točan?
➢ Kada je algoritam najbolji mogući?

Programske metode i apstrakcije 18


Algoritmi (3/3)

Primjer algoritma

Programske metode i apstrakcije 19


Usporedba programskih jezika (1/5)

• Kratki osvrt na programske jezike


• Svaki jezik razumije samo binarni kod
• Prevođenje u binarni kod radi compiler ili
interpreter
• Najčešće u upotrebi
➢C, C#, C++, Java, Python, Perl
➢HTML, CSS, JavaScript, PHP, Ruby
➢Objective-C, Swift, SQL, Go, R

Programske metode i apstrakcije 20


Usporedba programskih jezika (2/5)

• C
➢ Number of jobs: 8,000; Average annular salary: $97,000
➢ C u upotrebi od 1972
➢ Odlična podloga za učenje ostalih jezika
➢ Nije prikladan za websites ili mobilne aplikacije

• C#
➢ Number of jobs: 18,000; Average annular salary: $97,000
➢ Originalno razvijen od Microsofta za rad na .NET framework
➢ Baziran na C i C++.
➢ Brz i siguran

• C++
➢ Number of jobs: 9,000; Average annular salary: $97,000
➢ Vrlo moćan, brz, siguran, efikasan, lower-level.
➢ Izvrstan kao baza za učenje ostalih jezika

Programske metode i apstrakcije 21


Usporedba programskih jezika (3/5)

• Java
➢ Number of jobs: 29,000; Average annular salary: $104,000
➢ Jedan od najpopularnijih
➢ Za različite okoline write once, run anywhere

• Python
➢ Number of jobs: 19,000; Average annular salary: $120,000
➢ Python je jedan od najčešćih beginner-friendly programa
➢ Jednostavan za učenje
➢ Nije prikladan za mobilne aplikacije

• Perl
➢ High-level scripting language razvijen 1987
➢ Originalno namijenjen za text processing and manipulation
➢ Perl često nudi multiple solutions to a single problem

Programske metode i apstrakcije 22


Usporedba programskih jezika (4/5)

• HTML
➢ HyperText Markup Language je markup language a ne klasični programski jezik
➢ Koristi se za kreiranje sadržaja svih web stranica
• CSS
➢ Cascading Style Sheets jezik za kreiranje izgleda web stranice (paragrafi, zaglavlja, slike)
➢ CSS je samo jezik za stil, nije “pravi” programski jezik
• JavaScript
➢ Number of jobs: 24,000; Average annular salary: $118,000
➢ Programski jezik za web aplikacije, vrlo popularan
➢ Frameworks and Libraries – Angular, jQuery, React
• PHP
➢ Number of jobs: 7,000; Average annular salary: $81,000
➢ Script jezik za web aplikacije na server strani, danas je pomalo zastario
➢ Razvijen od strane Rasmus Lerdorf kao toolset
• Ruby
➢ Višenamjenski „High-Level” jezik, razvijen 1995
➢ Pogodan za brz razvoj web aplikacija

Programske metode i apstrakcije 23


Usporedba programskih jezika (5/5)

• Objective-C
➢ Primarno jezik za Apple, Mac OS X i iOS, razvijen 1980
➢ Danas ga uvelike zamjenjuje Swift

• Swift
➢ Number of jobs: 1,800; Average annular salary: $93,000
➢ Glavni jezik za razvoj Mac OS X i iOS

• SQL
➢ Structured Query Language – jezik vezan uz relacijske baze podataka (RDBMS)

• Go
➢ Number of jobs: 1,700; Average annular salary: $93,000
➢ Još se naziva i Golang, razvijen od strane Googla za razvoj aplikacija s puno podataka
➢ Nije popularan izvan Silicon Valley

• R
➢ Number of jobs: 1,500; Average annular salary: $93,000
➢ Koristi se za statističke analize i za Machine Learning aplikacije

Programske metode i apstrakcije 24


Python Razvojna okruženja

• Razvojna okruženja
➢ PyCharm
➢ IDLE
➢ Jupyter notebook
• Kako koristimo razvojna okruženja?
➢ Jupyter notebook
➢ .ipynb datoteke su dostupne na SCAD-u
➢ Importirate ih u okruženje u koje želite (Colaboratory,
Anaconda Jupyter notebook, client instalacija)
➢ PyCharm: laboratorijske i auditorne vježbe
➢ IDLE: samo za početne primjere

Programske metode i apstrakcije 25


Python Razvojna okruženja: IDLE

• IDLE (eng. Integrated DeveLopment Environment)


• Program predstavlja slijed definicija i naredbi
➢ Definicije se evaluiraju
➢ Naredbe izvršava Python interpreter
• IDLE podržava dva načina rada:
➢ Interaktivni/interpretivni (direktan unos u shell) ili
➢ Skriptni (spremiti u datoteku ekstenzije .py koja se učitava
u shell i evaluira)
• In/Out i print() naredba

Programske metode i apstrakcije 26


Python Razvojna okruženja: Jupyter Notebook (1/2)

• Jupyter notebook
➢ .ipynb ekstenzija datoteke
➢ Pomak od console-based pristupa prema interaktivnom razvoju
➢ Podrška za razvoj, dokumentiranje, izvršavanje koda,
komunikaciju rezultata
➢ Kombinacija dviju komponenti:
➢ web aplikacije (interaktivni preglednik) i
➢ Notebook dokumenta (input i output izračuna, tekst, izračuni, slike,
multi-medijski sadržaj)
• Jupyter notebook
➢ Colaboratory
➢ Anaconda
➢ Client instalacija

Programske metode i apstrakcije 27


Python Razvojna okruženja: Jupyter Notebook (2/2)

Programske metode i apstrakcije 28


Podatkovne strukture (objekti)

• Program manipulira podatkovnim objektima


➢Objekt ima tip koji definira vrstu operacija koje
program može napraviti nad njim
➢Objekti mogu biti
➢Skalarni (ne mogu se podijeliti) zovu se i value type
➢Na stoku
➢Non-skalar (imaju internu strukturu kojoj se može
pristupiti) zovu se i reference type
➢Na Heapu

Programske metode i apstrakcije 29


Skalarni i non-skalarni objekti

• Skalarni (value type)


➢ int – predstavlja cjelobrojne vrijednosti, npr. 7
➢ float – predstavlja decimalne realne brojeve, npr. 5.24
➢ bool – predstavlja Boolean (logičke) vrijednosti True i False
➢ NoneType – specijalni tip, ima jednu vrijednost None
➢ Korisna metoda za dohvat tipa objekta: type()

• Non-Scalar (reference type)


➢ class

• U Pythonu su svi objekti klase

Programske metode i apstrakcije 30


Konverzija tipova (cast)

• Omogućava pretvorbu jednog tipa podataka u


drugi tip podataka
➢float(5) konvertira integer vrijednost 5 u float
5.0; float je aproksimacija realnog broja
➢int(3.27) radi truncate decimalne vrijednosti u
cjelobrojnu vrijednosti 3
➢Implicitne i eksplicitne konverzije

Programske metode i apstrakcije 31


Izrazi (1/2)

• Izrazi kombiniraju podatkovne objekte i


operatore
• Izrazi rezultiraju vrijednošću određenog tipa
• Opća sintaksa
<objekt><operator><objekt>
• Primjeri operatora nad int i float
vrijednostima (sljedeći slajd)

Programske metode i apstrakcije 32


Izrazi (2/2)

• a+b →zbroj
• a-b →razlika
• a*b →produkt
• a/b →dijeljenje
• a//b →cjelobrojno dijeljenje
• a%b →modulo(ostatak dijeljenja)
• a**b →potencija

Programske metode i apstrakcije 33


Redoslijed izvršavanja operacija

Programske metode i apstrakcije 34


Pridjeljivanje vrijednosti varijabli

• Pridjeljivanje vrijednosti (Binding) podrazumijeva


pridruživanje vrijednosti imenu varijable
• Naredba jednakosti (=) se koristi za binding
• Vrijednost se sprema u računalnoj memoriji
• Vrijednost varijable se dobiva pozivom preko
imena varijable
• Zašto izrazi dobiju ime kroz varijablu?
➢pojednostavljenje rada s izrazom i vrijednosti izraza
➢lakše je koristiti ime varijable nego ponavljati izraz
➢moguće je naknadno napraviti izmjenu

Programske metode i apstrakcije 35


Promjena vrijednosti varijabli

• Nazivu varijable možemo ponovno dodijeliti vrijednost (eng. re-bind)


➢ Vrijednost varijable povrsina se nije promijenila samom promjenom polumjera
(dok ponovno ne pozovemo izraz za izračun površine)

Programske metode i apstrakcije 36


Usporedba varijabli

• Uspoređuju se samo isti tipovi varijabli


➢i>j
➢i>=j
➢i<=j
➢i==j (test jednakosti, Boolean vrijednost, True
ako je istinita)
➢i!=j (test nejednakosti, Boolean vrijednost,
True i nije jednako j)

Programske metode i apstrakcije 37


Logičke operacije

• Načini rada s boolean varijablama


➢ not a (ako je a True, evaluira na False i obratno)
➢ a and b (True samo kad su i a i b True)
➢ a or b (True ako je bar jedna od varijabli True)
➢ a xor b nije podržano u Pythonu na bit nivou

Programske metode i apstrakcije 38


Kratki test (1/2)

• Pridružite odgovarajući tip podataka za vrijednost

Programske metode i apstrakcije 39


Kratki test (1/2) - rješenje

• Pridružite odgovarajući tip podataka za vrijednost

Programske metode i apstrakcije 40


Kratki test (2/2)

Koje su sljedećih vrijednosti izraza?


4*2.0
--5
13/3
13.0/3.0
3**2+1
3**2.0+1

Odredite tip podataka i vrijednost rješenja!


>>>i = 3
>>>i=i+4.0

>>>i = 3
>>>z

>>>3>4 or 2<3 and 8>6

Programske metode i apstrakcije 41


Kratki test (2/2) - rješenje

Programske metode i apstrakcije 42


Grananje programa (1/2)

• Najjednostavnija naredba grananja je uvjetno


grananje
➢ ako je uvjet ispunjen (True)
izvršava se kod A
➢ ako uvjet nije ispunjen (False)
izvršava se kod B
➢ nakon izvršavanja A ili B
kontrola se vraća na kod
izvan kontrole grananja

Programske metode i apstrakcije 43


Grananje programa (2/2)

Programske metode i apstrakcije 44


if i

Primjeri grananja programa (1/3)

i=int(input('Unesite cjelobrojnu vrijednost: '))


if i%2==0:
print('Paran broj')
else:
print('Neparan broj')

i=int(input('Unesite cjelobrojnu vrijednost: '))


if i%2==0:
if i%5==0:
print('Broj je djeljiv i s 2 i s 5')
else:
print('Broj je djeljiv s 2 a ne s 5')
elif i%5==0:
print('Broj je djeljiv s 5 a ne s 2')
else:
print('Broj nije djeljiv niti s 5 niti s 2')

Programske metode i apstrakcije 45


if i

Primjeri grananja programa (2/3)

i=int(input('Unesite prvu cjelobrojnu vrijednost: '))


j=int(input('Unesite drugu cjelobrojnu vrijednost: '))
k=int(input('Unesite treću cjelobrojnu vrijednost: '))

if i<j and i<k:


print('i je najmanji broj od unesenih: '+str(i))
elif j<k:
print('j je najmanji broj od unesenih: '+str(j))
else:
print('k je najmanji broj od unesenih: '+str(k))

Programske metode i apstrakcije 46


if i

Primjeri grananja programa (3/3)

i = float(input('Unesite vrijednost za decimalni broj i: '))


j = float(input('Unesite vrijednost za decimalni broj j: '))

if i==j:
print("unijeli ste jednake decimalne brojeve")
elif i<j:
print("i je manji broj od j")
if j != 0:
print("količnik i/j iznosi: ", i/j)
else:
print("j je manji decimalni broj")

print("kraj programa")

Diskutirati slučaj if i=j (Syntax Error)

Programske metode i apstrakcije 47


if i

Tip podataka str (1/3)

• Objekt tipa str se koristi za predstavljanje stringa


znakova (eng. characters)
• U Pythonu, su stringovi polja bytova Unicode
karaktera
• Stringovi su Immutable u Pythonu (i u ostalim
jezicima) jer jednom kreirani stringovi se ne mogu
mijenjati, promjene vraćaju novi string
• Literalne vrijednosti tipa str se mogu pisati s
jednostrukim ili dvostrukim navodnicima
• Brojke napisane s navodnicima su string!

Programske metode i apstrakcije 48


if i

Tip podataka str (2/3)

• Par operacija sa stringovima?


pogrešno

u verziji 2 ovo je bilo ispravno (True)

• Operator + koristi princip overloadinga. To znači da ima


različito značenje ovisno nad kojim tipom objekata se koristi.
➢ zbrajanje za brojeve
➢ konkatenacija za stringove
• Operator * također koristi princip overloadinga
➢ operator množenja za brojeve duplicira string

Programske metode i apstrakcije 49


if i

Tip podataka str (3/3)

• str je sekvencijalni tip podataka u Pythonu!


• Operacije podržane u svim sekvencijalnim tipovima:
➢ duljina (eng. length)
➢ daje broj znakova u stringu
➢ len(‘abc’) daje vrijednost 3
➢ indeksiranje (eng. indexing)
➢ omogućava oznaku/indeks za svaki član stringa
➢ zero-based: prvi znak ima indeks vrijednosti 0 ″abc″[0]= ″a″
➢ ″abc″[3] → IndexError: string indeks out of range
➢ negativni indeksi služe za indeksiranje od kraja stringa ″abc″[-1] = ″c″
➢ rezanje (eng. slicing)
➢ omogućava izdvajanje dijelova stringa
➢ s[start:end] → dio stringa koji počinje na indeksu start i završava na end-1
➢ ″abc″[1:3]= ″bc″, ″abc″[1:2]= ″b″

Programske metode i apstrakcije 50


if i

Funkcija input()

• Python funkcija za input:


➢ input()
➢ raw_input() samo u Python 2
• Funkcija input()očekuje unos korisnika i pritisak tipke Enter

• Konverzija

Programske metode i apstrakcije 51


if i

Programske petlje

• Većina računalnih zadataka se ne može riješiti uporabom samo


grananja naredbi
• Petlje (loop) predstavljaju kontrolirano ponavljanje niza naredbi
• Ponavljanje postupka traje dok je zadovoljen neki uvjet
• Vrste programskih petlji
➢ while
➢ for
➢ do while
➢ Beskonačne
➢ Ugnježdene (nested)
• Kontrolne naredbe petlji
➢ break
➢ continue
➢ pass

Programske metode i apstrakcije 52


if i

while petlja

• zaglavlje osnovnog stavka


➢ izraz koji se interpretira/uvjet za izvršavanje petlje
• tijelo osnovnog stavka
➢ slijed naredbi koji se izvodi dok je uvjet ispunjen
• Treba imati na umu
➢ može se dogoditi da se petlja ne izvrši niti jednom
➢ nakon izvršavanja naredbi u tijelu, vraća se kontrola na ponovnu
provjeru uvjeta na početku
➢ treba paziti da se ne kreira beskonačna petlja
➢ idealna za probleme u kojima ne znamo broj ponavljanja unaprijed

Programske metode i apstrakcije 53


if i

while petlja - primjeri

Zadatak: ispisati treću potenciju za prvih sedam cijelih brojeva


i=1 #inicijalna vrijednost vrijednost
while i<8: #ograničavamo broj izvršavanja na 7
print(i**3) #ispisujemo treću potenciju
i += 1 #uvećavamo brojač za 1; inače imamo beskonačnu petlju
Primjer s break i continue

Programske metode i apstrakcije 54


if i

for petlja

• upravljačkoIme
➢ Privremena varijabla koja prima elemente kroz koje petlja
prolazi (u svakom prolazu po jednu vrijednost)
• pobrojiviObjekt
➢ Konačan raspon vrijednosti kroz koje petlja treba proći
• Treba imati na umu
➢ U Pythonu, for petlja nije kao u C tj. for (int i=0; i<n; i++) više
kao foreach u nekim jezicima
➢ U Pythonu, for petlja implementira collection-based iteracije
➢ Idealna za probleme u kojima znamo broj ponavljanja unaprijed

Programske metode i apstrakcije 55


if i

for petlja - primjeri

Zadatak: ispisati treću potenciju za prvih sedam cijelih brojeva


➢ for i in range(8):
print(i**3, end=‘ ’)
➢ Rješenje: 0, 1, 8, 27, 64, 125, 216, 343

➢ for i in range(1,8):
print(i**3, end=‘ ’)
➢ Rješenje: 1, 8, 27, 64, 125, 216, 343

➢ s = „VsiTe”
for i in s:
print(i)
➢ Rješenje: V, s, i, T, e

Programske metode i apstrakcije 56


if i

Programske petlje - break

➢ Ponekad je nužno prekinuti izvršavanje programske petlje


➢ Iako se može koristiti za obje petlje, u tim situacijama je bolje
koristiti while umjesto for petlje
➢ Naredba break prebacuje kontrolu na prvu naredbu nakon
tijela petlje
➢ Kod ugniježdenih petlji, break se odnosi samo na najdublje
ugniježdenu petlju u kojoj se naredba nalazi. Nema utjecaja
na obuhvatne petlje

Programske metode i apstrakcije 57


if i

Programske petlje - continue

➢ break prekida petlju neovisno o uvjetu ponavljanja


➢ continue omogućava preskakanje ostatka naredbi tijela
petlje i prolazak kroz sljedeću iteraciju
➢ Naredba se poziva iz tijela uvjetne naredbe preskakanja

Programske metode i apstrakcije 58


if i

Programske petlje – primjer continue

Zadatak: primorati korisnika da unese znak velikim slovima


b = True
while b:
uneseniZnak=input('Unesite znak pisanim velikim slovima: ')
if uneseniZnak.isupper() == False:
print('Unijeli ste znak {0}. Trebate unijeti znak pisanim
velikim slovima:'.format(uneseniZnak))
continue
else:
print('Unijeli ste znak {0}'.format(uneseniZnak))
b = False

Programske metode i apstrakcije 59


if i

Programske petlje – alternativni stavci

➢ break prekida petlju neovisno o uvjetu ponavljanja i ne ulazi


u alternativni niz naredbi
➢ alternativni niz naredbi se izvršava kada nije ispunjen uvjet
ponavljanja u zaglavlju osnovnog stavka petlje

Programske metode i apstrakcije 60


if i

Programske petlje – pass

➢ pass ‘glumi’ to-do dio


➢ naredba ne radi ništa
➢ korisna je za situacije kada još ne znamo implementaciju a
želimo da kod radi za ostale opcije neke grane koda

Programske metode i apstrakcije 61


if i

Funkcije (1/2)

• Što su funkcije?
• Čemu služe?
• Kako se definiraju?
• Kako se pozivaju i koriste?
• Kako se definiraju i koriste argumenti funkcije?
• Kako se rezultat funkcije vraća pozivajućem kôdu?
• Metode su objektno orijentirane funkcije

Programske metode i apstrakcije 62


if i

Funkcije (2/2)

• Petlje su primjer kako jednostavno osigurati ponavljanje kôda


• Funkcije
➢ olakšavaju potrebu za pozivanjem dijelova kôda na više mjesta
➢ omogućavaju modularnost kôda u aplikaciji
• Do sada smo koristili ugrađene funkcije (npr. print) Pythona
• Želimo kreirati korisnički definirane funkcije
• Funkcije se mogu grupirati u module; modul se može import
• Osnovni pojmovi:
➢ naziv funkcije
➢ parametri/argumenti (0 ili više) – passed by value
➢ tijelo funkcije
➢ povratna vrijednost ili popratni učinci
➢ čiste funkcije (eng. pure functions)

Programske metode i apstrakcije 63


if i

Funkcije - definicija

def ispisVremena():
import time
vrijeme = time.localtime()
sati = vrijeme.tm_hour
minute = vrijeme.tm_min
sekunde = vrijeme.tm_sec
print(„Sada je {0} sati {1} minuta {2} sekundi”.format(sati, minute,
sekunde))

print(ispisVremena)
<function ispis vremena at 0x057BBC90>
print(ispisVremena())
Sada je 9 sati 5 minuta 30 sekundi
type(ispisVremena)
function

Programske metode i apstrakcije 64


if i

Funkcije – varijable (1/2)

• Doseg (eng. scope) varijable je dio izvornog koda u kojem se


varijabla određenog naziva može referencirati
➢ lokalna varijabla – doseg tijelo funkcije
➢ globalna varijabla – doseg je datoteka izvornog kôda/modul
• lokalna varijabla zaklanja globalnu varijablu istog naziva
a = 'programiranje'
b = 'python'
def kombinacijaStringova():
b = a[0:7]+'ske metode i apstrakacije'
return b
print(kombinacijaStringova())
print(a)
print(b)

programske metode i apstrakcije


programiranje
python

Programske metode i apstrakcije 65


if i

Funkcije – varijable (2/2)

• Ponekad (vrlo rijetko!) funkcija treba mijenjati globalnu varijablu


• Prva naredba u funkciji mora biti global naziv_globalne_varijable
• Izbjegavati globalne varijable ako je moguće
_brojac = 0
def brojim():
global _brojac
_brojac += 1
print(_brojac)
return _brojac

print(_brojac)
print(brojim())
print(_brojac)

0,1,1,1

Programske metode i apstrakcije 66


if i

To Do lista za kod kuće

• Instalirajte
➢ Python (ako do sada niste)
➢ PyCharm
• Proći kroz primjere s predavanja i auditornih vježbi
➢ Google Colab za Jupyter notebook datoteku sa SCAD-a
• Pripremiti se za laboratorijsku vježbu sljedeći tjedan
• Riješiti zadatke za domaću zadaću. Rješenja su u
nastavku predavanja.

Programske metode i apstrakcije 67


if i

Izlazni test

• Pripremite papire za rješenja


➢ Napišite današnji datum, svoje ime i prezime
• Napišite Python program koji traži unos cijele
vrijednosti od strane korisnika te ispisuje je li broj djeljiv
sa 7 i ima bar dvije znamenke.

Programske metode i apstrakcije 68


if i

Izlazni test

• Napišite Python program koji traži unos cijele


vrijednosti od strane korisnika te ispisuje je li broj djeljiv
sa 7 i ima bar dvije znamenke.
broj = int(input('Unesite cijeli broj: '))
if broj >=10 and broj % 7 == 0:
print('Broj je dvoznamenkast i djeljiv sa 7')
elif broj < 10 and broj % 7 == 0:
print('Broj je jednoznamenkast i djeljiv sa 7')
else:
print('Broj nije djeljiv sa 7')

Programske metode i apstrakcije 69


if i

Programske petlje - domaća zadaća

• while primjer
➢ Zadatak: pogoditi slučajno generiran cijeli broj u rasponu
od 1 do 25
• for primjer
➢ Zadatak: ispisati kvadrat brojeva od 1 do 20, za svaki šesti
a potom padajućim slijedom kvadrate brojeve od 8 do 1.
• Alternativni stavci petlji
➢ Zadatak: Neka BlackJack ima tri polja s brojkama 5,6,7,8 i
neka je dobitna kombinacija 777. Broj pokušaja je 5. Ako
nije ostvaren dobitak potrebno je ispisati „Nije ostvaren
dobitak”. Ako je ostvarena kombinacija 777 potrebno je
ispisati „Osvojen je JackPot!”.

Programske metode i apstrakcije 70


if i

Programske petlje - domaća zadaća

• while primjer
➢ Zadatak: pogoditi slučajno generiran cijeli broj u rasponu od 1 do 25
import random
donjaGranica = 1
gornjaGranica = 25
print(‘Pogodi broj između {0} i {1}’.format(donjaGranica, gornjaGranica))
random.seed()

brojPogodjen = False
brojPogadjanja = 0
ciljaniBroj = random.randint(donjaGranica, gornjaGranica)

while not brojPogodjen:


uneseniBroj = int(input(‘Unesi cijeli broj za pogađanje: ’))
brojPogadjanja += 1
if uneseniBroj < ciljaniBroj:
print(‘Ciljani broj je veći od unesenog’)
elif uneseniBroj > ciljaniBroj:
print(‘Ciljani broj je manji od unesenog’)
else:
print(‘Bravo! Broj ’, ciljaniBroj, ‘ je pogođen u ’, brojPogadjanja, ‘ pogađanja’)
brojPogodjen = True

Programske metode i apstrakcije 71


if i

Programske petlje - domaća zadaća

• while primjer
➢ Zadatak: pogoditi slučajno generiran cijeli broj u
rasponu od 1 do 25
➢ Pitanja za razmišljanje
➢ Što bi se dogodili da na kraju nismo stavili brojPogodjen = True
➢ Što bi se dogodilo da smo u tijelu stavili brojPogadjanja -= 1
➢ Kako bismo riješili zadatak da umjesto while not ne
koristimo not?
➢ Koja bi taktika bila najbolja za pogađanje ‘zamišljenog’ (u
biti generiranog) broja?

Programske metode i apstrakcije 72


if i

Programske petlje - domaća zadaća

• for primjer
➢ Zadatak: ispisati kvadrat brojeva od 1 do 20, za svaki šesti a potom padajućim slijedom
kvadrate brojeve od 8 do 1.
for i in range(1,20,6)
print(‘{0}^2 je {1}’.format(i,str(i**2))

1^2 je 1
7^2 je 49
13^2 je 169
19^2 je 361

for i in range(8,0,-1)
print(‘{0}^2 je {1}’.format(i,str(i**2))

8^2 je 64
7^2 je 49
6^2 je 36
5^2 je 25
4^2 je 16
3^2 j3 9
2^2 je 4
1^2 je 1

Programske metode i apstrakcije 73


if i

Programske petlje - domaća zadaća

• Alternativni stavci petlji


➢ Zadatak: Neka BlackJack ima tri polja s brojkama 5,6,7,8 i
neka je dobitna kombinacija 777. Broj pokušaja je 5. Ako
nije ostvaren dobitak potrebno je ispisati „Nije ostvaren
dobitak”. Ako je ostvarena kombinacija 777 potrebno je
ispisati „Osvojen je JackPot!”.
import random
random.seed()
for i in range(5):
#print(random.randint(5,8)+10*random.randint(5,8)+100*random.randint(5,8))
if random.randint(5,8)+10*random.randint(5,8)+100*random.randint(5,8)==777:
print('Osvojen je JackPot!')
break
else:
print('Nije ostvaren dobitak')

Programske metode i apstrakcije 74


Kraj 1. predavanja

Hvala na pozornosti!

Programske metode i apstrakcije 75

You might also like