SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO …digre.pmf.unizg.hr/4328/1/Algoritamsko rješavanje problema...
-
Upload
nguyenkhanh -
Category
Documents
-
view
227 -
download
1
Transcript of SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO …digre.pmf.unizg.hr/4328/1/Algoritamsko rješavanje problema...
SVEUČILIŠTE U ZAGREBU
PRIRODOSLOVNO-MATEMATIČKI FAKULTET
MATEMATIČKI ODSJEK
Jelena Štimac
ALGORITAMSKO RJEŠAVANJE PROBLEMA U NASTAVI INFORMATIKE U
SREDNJOJ ŠKOLI KORIŠTENJEM PROJEKTNE NASTAVE
Diplomski rad
Voditelj rada:
Dr. sc. Goran Igaly
Zagreb, 2015.
Ovaj diplomski rad obranjen je dana _____________ pred nastavničkim povjerenstvom u
sastavu:
1. __________________________, predsjednik
2. __________________________, član
3. __________________________, član
Povjerenstvo je rad ocijenilo ocjenom _____________________ .
Potpisi članova povjerenstva:
1. __________________________
2. __________________________
3. __________________________
Sadržaj 1. Uvod ........................................................................................................................................ 3
2. Projektna nastava .................................................................................................................... 5
2.1 Projekt ............................................................................................................................. 5
2.2 Cilj projektne nastave ...................................................................................................... 5
2.3 Faze projektne nastave ................................................................................................... 5
3. Nastavni plan i program iz informatike za srednje škole ........................................................ 7
4. Programski jezik Python .......................................................................................................... 8
4.1 Prednosti odabira programskog jezika Python ............................................................... 8
4.2 Povijest programskog jezika Python ............................................................................... 8
4.3 Interaktivno sučelje i uređivački dio ............................................................................... 9
5. Projekt u nastavi informatike u srednjoj školi korištenjem programskog jezika Python ...... 10
5.1 Odabir teme .................................................................................................................. 10
5.2 Priprema za projekt ....................................................................................................... 10
5.3 Postavljanje zadatka ...................................................................................................... 13
5.4 Podjela u timove i biranje predstavnika tima ............................................................... 13
5.5 Odabir problema ........................................................................................................... 14
5.6 Podjela zadataka po timovima ...................................................................................... 14
5.7 Trajanje projekta ........................................................................................................... 15
5.8 Prikupljanje materijala .................................................................................................. 15
5.9 Precizno zadavanje zadataka ........................................................................................ 17
5.10 Izrada početnih programa ............................................................................................. 17
5.11 Kritika rezultata i nove smjernice .................................................................................. 20
5.12 Prezentacija finalnih rješenja timova ............................................................................ 20
5.13 Integriranje rezultata u cjeloviti proizvod ..................................................................... 28
5.14 Uspostavljanje veze s nastavnim planom i programom ............................................... 34
5.15 Prezentacija proizvoda korisnicima ............................................................................... 34
5.16 Usporedba verzija 2.7 i 3.3 programskog jezika Python ............................................... 34
6. Zaključak ................................................................................................................................ 35
2
7. Literatura ............................................................................................................................... 36
8. Sažetak .................................................................................................................................. 37
9. Summary ............................................................................................................................... 38
10. Životopis ............................................................................................................................... 39
3
1. Uvod
Kvaliteta nastave u školama Republike Hrvatske često ovisi o stručnosti, kvaliteti i ambiciji
nastavnika koji je izvodi, o suradnji meĎu kolegama unutar škole, te o suradnji meĎu
kolegama iz istog predmeta na gradskoj, županijskoj ili čak državnoj razini. Nadalje, kvaliteta
nastave velikim dijelom ovisi i o unaprijed zadanom planu i programu odreĎenih predmeta
koji rijetko omogućavaju odstupanja u tipu nastave, a veliki problem vrlo često predstavlja
nedostatak vremena tijekom kojeg bi se učenicima pružila prilika da samostalno uče i budu
kreativni, primjenjujući istraživački, grupni i projektni rad.
Ministarstvo znanosti, obrazovanja i športa 2005. godine počelo je s ostvarivanjem
reformskoga projekta škola pod nazivom Hrvatski nacionalni obrazovni standard (HNOS) s
kojim su započele promjene u osnovnoj školi u dijelu koji se odnosi na programske sadržaje.
U 2007. godini izraĎena je Strategija za izradbu i razvoj nacionalnoga kurikuluma za
predškolski odgoj, opće obvezno i srednjoškolsko obrazovanje.
Prema [3] glavni cilj Hrvatskog nacionalnog obrazovnog kurikuluma je prelazak s
dosadašnjeg školovanja usmjerenog na učenje sadržaja na učenje kompetencija i ishode
učenja.
Drugim riječima, cilj je da nastava u školama u Republici Hrvatskoj prestane biti nastava
pretežito frontalnog tipa, gdje je nastavnik osoba koja nastavne sadržaje prepričava, diktira ili
piše po ploči, a učenici pritom slušaju, zapisuju činjenice, te je njihov jedini zadatak zapamtiti
te činjenice i prilikom ispitivanja njihovog znanja, bilo pisanim ili usmenim putem, te
činjenice reproducirati nazad. Naglasak se stavlja na procese i koncepte koje učenik
odreĎenim nastavnim sadržajima i metodama usvaja.
Glavni problem takve vrste nastave je malena mogućnost motiviranja učenika za nastavne
sadržaje, te kao ishod najčešće ima učenike koji napamet znaju reproducirati vrlo velike
količine podataka, koje teško povezuju sa stvarnim životom i mogućnošću praktične primjene
istih u rješavanju svakodnevnih problema.
Nastava informatike u osnovnim i srednjim školama je idealan primjer nastave tijekom koje bi
učenici mogli i trebali razvijati algoritamski i logički pristup rješavanju problema, ali pritom
pokušati te probleme povezati s drugim predmetima tijekom njihovog školovanja, a uz to
naučiti neke temeljne kompetencije za njihov daljnji život kao što su rad u timu, demokratski
pristup u donošenju odluka, samostalno sistematično istraživanje činjenica, prezentiranje
obavljenog rada, itd.
Cilj ovog rada je prikazati i detaljno opisati primjer kako se nastava informatike može
iskoristiti kako bi se kroz projektni rad učenike upoznalo s pojmom timskog rada,
samostalnim planiranjem, istraživanjem i razmišljanjem, jasnim definiranjem ciljeva, te
prezentiranjem rezultata. Osim toga, kroz projektne radove tijekom nastave informatike,
učenicima se na taj način pokušavaju približiti neki pojmovi iz matematike koji su primjereni
za njihov uzrast, te im na taj način pokazati kako matematika može biti zanimljiva, zabavna i
korisna.
4
Uz to, cilj ovog rada je taj da nastavnici informatike koji to žele, mogu iskoristiti predloženi
projekt, u originalnom obliku, ili modificiran, te ga primjenjivati u nastavi informatike u
srednjim školama. Iz tog razloga je projekt najvećim dijelom napisan u obliku sličnom
opširnijim didaktičkim pripremama, s dodatnim uputama i objašnjenima.
Programski jezik koji se koristi za implementaciju navedenih algoritama je Python.
5
2. Projektna nastava
2.1 Projekt
Prema [1] pojam projekt dolazi od latinske riječi koja označava plan, namjeru, nacrt ili skicu.
U modernom tumačenju projekt podrazumijeva zaokružen, cjelovit i složen pothvat čija se
obilježja i cilj mogu definirati, a mora se ostvariti u odreĎenom vremenu te zahtijeva
koordinirane napore nekoliko ili većeg broja ljudi, službi, poduzeća i sl.
Svaki dobar projekt bi trebao:
sadržavati jasno definirani cilj
rezultirati nekim proizvodom
podrazumijevati složeniji zadatak koji se može raščlaniti na manje podzadatke
imati jasno odreĎeni rok za završetak
sadržavati rad više skupina ljudi (nije nužan uvjet)
podrazumijevati suradnju izmeĎu tih skupina
2.2 Cilj projektne nastave
Tijekom projektne nastave unutar bilo kojeg obrazovnog predmeta učenici će razvijati
sposobnost za timski rad, razvijati sposobnost donošenja odluka pojedinačno i u timu,
razvijati kritički odnos prema vlastitom i tuĎem radu i sposobnost artikulacije te uvidjeti
nužnost i smisao podjele rada. Nadalje, učenici će razvijati samostalnost i odgovornost u radu,
doseći kompetencije planiranja, osposobiti se za korištenje raznih sredstava za rad i pravilnu
procjenu raspoloživih resursa, prakticirati samostalno pronalaženje informacija i kritički
odnos prema njima. Osim toga, osposobit će se za integriranje zajednički dobivenih radnih
rezultata, upoznati s procesom učenja i rada u jednoj socijalnoj grupi, upoznati s različitim
metodama rada, stvoriti proizvod za vlastito korištenje ili za korištenje od strane drugih,
savladati slučajeve razilaženja teorije i prakse, kao i strogo postavljenih granica nastavnih
predmeta, uzimajući u obzir aspekte koji nadilaze struku, prepoznati složenost realnog
postavljenog problema, te prepoznati utjecaje različitih dizajnerskih odluka.
2.3 Faze projektne nastave
Prva faza je priprema projekta koja sadrži sljedeće korake:
odabir teme projekta
priprema za projekt (upoznavanje učenika s potrebnim predznanjem za provedbu
projekta)
organiziranje projekta
Druga faza je postavljanje problema koje sadrži sljedeće korake:
postavljanje problema
brainstorming (ideje učenika)
sreĎivanje i grupiranje ideja (razlaganje problema na manje probleme)
izbor problema koji će se obraditi
preciziranje zadataka
odreĎivanje strukture tima
6
podjela u grupe
Treća faza je rad u grupama sa sljedećim koracima:
prikupljanje materijala
upotreba pomoćnih sredstava
komunikacija s drugim grupama
dokumentacijski radovi
izvještaji o radu grupa,
prezentacija meĎurezultata, kritika
nove smjernice od tima ili nastavnika
Četvrta faza je integriranje radnih rezultata koja podrazumijeva:
završni izvještaji grupa i prezentacije rezultata
podnošenje dokumentacije, dopune
integriranje rezultata u cjeloviti proizvod
vrednovanje ostvarenog, kritika
finalno sreĎivanje
Završna faza je doprinos nastavnom predmetu kroz koju se provodi:
uspostavljanje veze s nastavnim programom
prezentacija proizvoda korisnicima
7
3. Nastavni plan i program iz informatike za srednje škole
Prema [4] u prirodoslovno – matematičkim gimnazijama (B program) u Republici Hrvatskoj
tijekom obavezne nastave informatike u prvom i drugom razredu obraĎuju se sljedeće
nastavne cjeline iz programiranja:
Programiranje i faze programiranja (20 nastavnih sati u prvom razredu) koja sadrži
teme planiranje, specifikacija, algoritam, dijagram tijeka, pseudokod (upis,
pridruživanje, grananje, petlja, ispis), kodiranje, testiranje, ispravljanje, održavanje,
program, strukturno programiranje i rješavanje niza jednostavnijih problema na
algoritamskoj razini.
Jezici za programiranje (1 nastavni sat u drugom razredu razredu) koja sadrži teme
leksik, sintaksa i semantika
Uvod u jezik u kojemu će se programirati (11 nastavnih sati u drugom razredu) koja
sadrži teme ustroj programa, jednostavni tipovi podataka, naredbe za upis, ispis,
ureĎivanje tekstualnog zaslona i dodjeljivanje, stil pisanja programa i preglednost.
Složene naredbe i tipovi (16 nastavnih sati u drugom razredu) koja sadrži teme IF
THEN naredba, IF THEN ELSE naredba, petlje, skalarni i intervalni tipovi podataka.
Potprogrami (12 nastavnih sati u drugom razredu) koja sadrži teme strukturno
programiranje, postupno profinjenje i primjena potprograma u razradi problema.
Složeni tipovi podataka (20 nastavnih sati u drugom razredu) koja sadrži teme pojam
indeksa, jednodimenzionalno polje – niz, obrada niza petljom, osnovni algoritmi na
nizovima brojeva, pretraživanje, sortiranja i višedimenzionalna polja.
Složeni tipovi podataka – string, skup (16 sati) koja sadrži teme operacije i gotovi
potprogrami, koji se mogu primijeniti ili na stringu ili na skupu.
Iz službenog plana i programa za nastavu informatike vidljivo je kako su opisane teme
poprilično široke, a to daje slobodu odabira na koji način i pomoću kojih alata će se pojedine
teme obraditi, gdje dolazi do izražaja kreativnost i angažiranost samog nastavnika, ali i razina
znanja razrednog odjeljenja s kojim nastavnik radi. Iz navedenog programa je jasno da izbor
samog programskog jezika ovisi o sposobnostima i preferencijama nastavnika i resursima
škole u kojoj se nastava odvija.
Iako se većina pojedinih tema mora obraditi uz stalni nadzor i voĎenje nastavnika, u programu
za srednje škole iz informatike ima mjesta za projektni tip nastave u kojem učenici mogu
pokazati samostalnost, suradnju i kreativnost. Osim toga, nastava informatike, a posebno
nastava programiranja je dobar način kako se učenicima može prikazati neke sadržaje iz
nastave matematike na drugačiji, zanimljiviji i razumljiv način.
Primjer projektne nastave koji će biti predstavljen u ovom radu je prikladan za završetak
drugog razreda prirodoslovno – matematičke gimnazije programa B te se uglavnom
koncentrira na korištenje funkcija za generiranje nasumičnih brojeva koje učenici povezuju sa
znanjem iz vjerojatnosti te primjerima iz stvarnog života.
Osim učenja korištenja funkcija u programskom jeziku Python za generiranje nasumičnih
brojeva, učenici kroz prikazani projekt uvježbavaju prethodno stečeno znanje vezano uz
naredbe upisa i ispisa, petlje, naredbu if else, rad s nizovima, stringovima i listama.
8
4. Programski jezik Python
4.1 Prednosti odabira programskog jezika Python
Tijekom podučavanja programiranja u osnovnim i srednjim školama tijekom nastave
informatike, svaki nastavnik ima odreĎenu slobodu izbora alata pomoću kojim će to ostvariti.
U osnovnim školama u Republici Hrvatskoj zasad prevladava učenje programiranja pomoću
programskih jezika LOGO, QBasic, Pascal, dok u srednjim školama prevlada korištenje
programskih jezika poput C, C++ i Java. Prilikom uvoda u programiranje, kako bi što bolje
usvojili algoritamski pristup rješavanju problema, bitno je da učenici nisu fokusirani na samu
sintaksu odreĎenog programskog jezika.
Programski jezici poput LOGO-a, QBasica i Pascala imaju poprilično jednostavnu sintaksu,
dok je u ostalim navedenim jezicima sintaksa samog jezika ipak nešto kompliciranija, ali su
bogatije i mogućnosti koje ti jezici pružaju. Na primjer, prema [2] programski jezik LOGO je
dobar način za sam početak učenja programiranja, no ne omogućuje implementaciju
apstraktnih tipova podataka. Programski jezici C ili C++ s druge strane omogućavaju takvu
implementaciju, no sintaksa tih jezika je poprilično zahtjevna za korištenje.
U situaciji gdje je cilj učenicima omogućiti jednostavnu i lijepu sintaksu programskog jezika
u kojem rade, s preglednim i kratkim kodovima, a da pritom za naprednije razine omogućuje i
naprednije mogućnosti programiranja, poput objektno orijentiranog programiranja,
programski jezik Python je dobar izbor.
4.2 Povijest programskog jezika Python
Programski jezik Python je devedesetih godina prošlog stoljeća razvio Guido von Rossum iz
Nizozemske. Glavna motivacija prilikom razvijanja programskog jezika Python bila je
stvaranje programskog jezika koji je pogodan za učenje programiranja. Prema [6] tvorac
programskog jezika Python je izjavio „Over six years ago, in December 1989, I was looking
for a "hobby" programming project that would keep me occupied during the week around
Christmas. My office ... would be closed, but I had a home computer, and not much else on
my hands. I decided to write an interpreter for the new scripting language I had been thinking
about lately: a descendant of ABC that would appeal to Unix/C hackers. I chose Python as a
working title for the project, being in a slightly irreverent mood (and a big fan of Monty
Python's Flying Circus).“1
Python je napisan u programskom jeziku C. Od 2003. godine programski jezik Python je
neprekidno rangiran meĎu 10 najpopularnijih programskih jezika prema [5]. Od 2015. godine
nalazi se na petom mjestu prema popularnosti, te je bio „Programski jezik godine“ u 2007. i
2010. godini.
Neki od razloga popularnosti programskog jezika Python su sljedeći:
besplatno se može preuzeti i instalirati na sve popularne operacijske sustave
1 „Prije više od šest godina, u prosincu 1989. godine, tražio sam progamerski hobi-projekt koji bi me držao
zauzetim tijekom Božidnih praznika. Moj ured....je bio zatvoren, ali sam imao kudno računalo i nisam imao previše obaveza. Odlučio sam napisati interpreter za novi skriptni jezik o kojem sam u posljednje vrijeme mislio: nasljednik ABC-a koji bi se svidio Unix/C hakerima. Kako sam bio buntovno raspoložen i veliki obožavatelj Letedeg cirkusa Montyja Pyhtona, odlučio sam da de Python biti radni naziv projekta.“
9
lako se uči zbog jednostavne sintakse
omogućuje brzo pripremanje i testiranje programa
koristi se i u privredi za implementaciju profesionalnih projekata
4.3 Interaktivno sučelje i uređivački dio Programski jezik Python pokreće se otvaranjem razvojnog okruženja za Python koje se zove
IDLE (Integrated Development Environment). To sučelje funkcionira interaktivno.
Slika 1 Primjer korištenja interaktivnog sučelja programskog jezika Python
U sklopu tog razvojnog okruženja za Python postoji i ureĎivački dio, gdje se pišu programi
koji se kao datoteke pohranjuju na disk za kasnije korištenje. Ekstenzija programa pisanih u
programskom jeziku Python je .py.
Slika 2 Primjer korištenja uređivačkog sučelja programskog jezika Python
10
5. Projekt u nastavi informatike u srednjoj školi korištenjem
programskog jezika Python
5.1 Odabir teme
Učenicima se predloži okvirna tema projekta, a to su igre na sreću. S učenicima se provodi
rasprava o tome što su to igre na sreću, zatim da navedu neke njima poznate primjere igara na
sreću, te kakvo je njihovo predviĎanje kolike šanse za dobitak ima igrač prilikom
sudjelovanja. Očekivani učenički odgovori: Loto, Bingo, bacanje kockica, bacanje novčića,
kladionica, kartanje, rulet, automati s igrama na sreću, itd.
Nakon toga slijedi priprema za projekt u trajanju od jednog nastavnog sata tijekom kojeg se
pobliže upoznaju s pojmom nasumičnosti, te se u programskom jeziku Python obraĎuju
nasumične liste.
5.2 Priprema za projekt
Prije početka, učenike treba upoznati s korištenjem funkcija iz modula random i kreiranjem
nasumičnih listi. Ta priprema se odvija tijekom jednog nastavnog sata informatike.
Glavni cilj nastavnog sata
Učenici će korištenjem funkcija iz modula random u programskom jeziku Python uočiti kako
mogu generirati liste pseudonasumičnih brojeva.
Očekivana učenička postignuća
Učenici će:
ponoviti osnovne naredbe za rad s listama
uočiti što su to nasumični i pseudonasumični brojevi
saznati kako računala generiraju pseudonasumične brojeve
generirati liste čiji su elementi pseudonasumični brojevi
Tip nastavnog sata
Sat obrade novog gradiva.
Nastavni oblici
Frontalna nastava, individualni rad na računalu.
Nastavne metode
Prema izvorima znanja: metoda dijaloga i metoda demonstracije.
Prema oblicima zaključivanja: metoda analogije.
Nastavna sredstva
PowerPoint prezentacija „Nasumične liste“.
Nastavna pomagala
Ploča, kreda, računalo za svakog učenika, LCD projektor i demonstracijsko računalo za
nastavnika.
11
Tijek nastavnog sata
S učenicima se pokreće rasprava o tome kako bi opisali nasumično odabran broj.
Od učenika se očekuje da će znati da je to broj koji će biti odabran slučajno, a da pritom ništa
neće uvjetovati taj odabir. Učenicima se pojasni kako je stvarni nasumičan odabir ustvari
rijedak u praksi, odnosno da računala koriste pseudonasumičan odabir broja koji ustvari ovisi
o sistemskom vremenu računala. Na primjer, ako se u nekom programskom jeziku izvrši
naredba koja vraća nasumično odabran broj, taj broj će se generirati u ovisnosti o vremenu
koje je „zapisano“ negdje u računalu. Pritom će se gledati i godine, datumi, dani, sati, minute,
sekunde, milisekunde, pa će početni uvjet, prema kojem se generira neki slučajan broj, biti
jedinstven, jer ne postoje dva „ista“ vremena/trenutka.
Nakon toga, učenici, kroz diskusiju s nastavnikom, uočavaju koje funkcije u programskom
jeziku Python mogu koristiti za generiranje pseudonasumičnih brojeva, te kako generirati liste
pseudonasumičnih brojeva. Nastavnik s učenicima komentira kako u Pythonu postoje funkcije
koje vraćaju pseudonasumične brojeve. Te funkcije se u Pythonu nalaze u modulu random, pa
je na početku programa potrebno napisati da koristimo taj modul pomoću naredbe
from random import *
Zatim se učenici upoznaju s nekoliko značajnijih funkcija iz tog modula.
Funkcija randint(a,b) vraća nasumično odabran cijeli broj iz intervala ,a b .
Funkcija randrange(a,b,k) vraća nasumično odabran cijeli broj iz intervala ,a b s
korakom k .
Funkcija random()vraća nasumično odabran realni broj iz intervala 0,1 .
Na nekoliko primjera učenici isprobavaju kako rade navedene funkcije te se može primijetiti
kako za isti unos neće svaki puta dobiti iste rezultate.
Slika 3 Primjer korištenja funkcije randint()
Slika 4 Primjer korištenja funkcije randrange()
12
Slika 5 Primjer korištenja funkcije random()
Nakon toga učenici u svrhu vježbe izraĎuju program koji generira listu od 5 nasumično
odabranih cijelih brojeva izmeĎu 1 i 50. Poslije toga program trebaju modificirati tako da se
prvo unosi prirodan broj n te se generira lista od n nasumično odabranih cijelih brojeva
izmeĎu 1 i 50.
from random import *
L = []
for i in range (5):
L.append(randint(1,50))
print L
Modificirani zadatak:
from random import *
n = int(input('Unesi duljinu liste: '))
L = []
for i in range (n):
L.append(randint(1,50))
print L
Zadatak za domaću zadaću
Napisati program koji simulira igru „Pogodi zamišljeni broj“ izmeĎu računala i korisnika.
Računalo treba „zamisliti“ jedan cijeli broj iz intervala 1 do 100. Korisnik ima 15 pokušaja za
pogoditi „zamišljeni“ broj. Program treba vratiti poruku korisniku kojom ga obavještava je li
pogodio broj ili nije, te koji je broj „zamišljen“.
from random import *
broj = randint(1,100)
a=[]
for i in range (15):
a.append(int(input('Pogodi broj: ')))
if a[i]== broj:
13
print 'Bravo, pogodio si!'
i = 14
x = True
else:
print 'Nazalost, to nije zamisljeni broj!'
x = False
if x == False:
print 'Nisi pogodio broj!. Zamišljeni broj je bio', broj
Slika 6 Primjer korištenja programa za pogađanje zamišljenog broja
Nakon što su se učenici upoznali s nekim osnovnim funkcijama iz modula random, trebaju
razmisliti o tome koje bi igre na sreću ili njihove modificirane verzije s dosadašnjim znanjem
mogli uspješno simulirati pomoću programskog jezika Python i novonaučenih funkcija.
5.3 Postavljanje zadatka
Cilj projekta je pomoću programskog jezika Python izraditi simulaciju nekoliko igara na
sreću. Program treba omogućiti izbor željene igre nakon što su one ponuĎene. Prijedlozi
problema koji će se obraditi mogu biti loto, bacanje novčića, bacanje kocke, bingo,
kladionica, kartaške igre, itd.
5.4 Podjela u timove i biranje predstavnika tima
Učenike se ravnopravno podijeli na tri tima. Za podjelu učenika po timovima na raspolaganju
je nekoliko metoda.
14
1. Nasumičan odabir, izvlačenjem listića s oznakom grupe.
2. Nastavnik dijeli učenike po timovima na način da svakom timu pridijeli učenike različitih
mogućnosti i dotadašnjih postignuća na nastavi informatike.
3. Učenici sami biraju s kojim će učenicima biti u timu.
Sve tri metode imaju svoje prednosti i nedostatke. Prednost prve metode je ta da ne postoji
nikakav utjecaj nastavnika i učenika na ishod podjele, te prilika učenicima da nauče suraĎivati
s učenicima s kojima na to do tog trena nisu navikli. Nedostatak te metode je mogućnost
podjele timova koji nisu uravnoteženi prema sposobnostima i prethodno pokazanom znanju i
postignućima. Prednost druge metode je ta da su odabrani timovi pravedno uravnoteženi s
obzirom na njihove sposobnosti. Nedostatak te metode su mogući prigovori na neobjektivnost
nastavnika, ali i učenika u procjeni njihovim sposobnosti i znanja. Prednost treće metode je
prilika da se učenicima omogući meĎusobna suradnja u odlukama, prilikom koje imaju priliku
pokazati sposobnost demokratskog odlučivanja, odnosno složiti se s mišljenjima većine
učenika. Nedostatak je, kao i u prvoj metodi, moguća neuravnoteženost sposobnosti i
prethodnih postignuća. Prilikom odabira timova trebalo bi uzeti u obzir i mjesto stanovanja
pojedinih učenika unutar jednog tima, s obzirom na to da će učenici unutar tima lakše
suraĎivati na zadatku ako su jedni drugima lakše dostupni.
Nakon podjele učenika u timove, svaki tim ima zadatak meĎu sobom odabrati predstavnika
tima. Predstavnik tima će nakon zadanog vremenskog roka za rješavanje problema
prezentirati rješenje svog tima ostalim učenicima u razredu. Osim toga, predstavnik će biti
zadužen za koordinaciju vremena i mjesta konzultacija s nastavnikom i ostalim članovima
tima, te za koordinaciju rada s ostalim timovima, točnije, objedinjavanje svih zadataka
pojedinih timova u jedan cjeloviti program. Prilikom odabira voĎe tima, učenici imaju priliku
upoznati se s demokratskim načinom odabira, meĎusobno raspravljati i razmjenjivati
prijedloge te argumentirano obrazložiti svoj izbor.
5.5 Odabir problema
Jedan od mogućih primjera odabira igara na sreću koje će se pokušati simulirati programima u
programskom jeziku Python su Loto 7/39, bacanje kocke i bacanje novčića.
5.6 Podjela zadataka po timovima
Neke od metoda za dodjelu pojedinog zadatka timovima su sljedeće:
1. Nasumičan odabir teme, tako da predstavnici timova biraju listić na kojem je napisano
ime pojedine igre na sreću.
2. Nastavnik svakom timu dodjeljuje odreĎenu igru na sreću.
3. Predstavnici timova meĎusobno dogovaraju kojem će timu pripasti koja igra.
Kao i kod podjele učenika na timove, za svaku metodu odabira teme postoje prednosti i
nedostaci. Prednost prve metode je ponovo nemogućnost utjecaja nastavnika i učenika na
odabir. Nedostatak je mogućnost da pojedini tim dobije zahtjevniji zadatak, a pritom su u
njemu učenici slabijih sposobnosti i dotadašnjih nastavnih postignuća iz nastave informatike.
Prednost druge metode je mogućnost nastavnika da procijeni kojem timu bi koji zadatak bolje
odgovarao, s obzirom na to da je nastavnik upućen u konkretnu zahtjevnost svakog zadatka.
Nedostatak je ponovo moguća neobjektivnost i kriva procjena nastavnika u vezi učeničkih
15
sposobnosti. Treća metoda omogućuje učenicima suradnju, raspravu i dogovor. Nedostatak su
moguća prepiranja izmeĎu voĎa timova i neobjektivnost učenika.
S obzirom na odabrane zadatke, učenici unutar svog tima biraju ime tima. Nastavnik predlaže
da imena timova imaju veze sa zadatkom koji je dodijeljen njihovom timu radi lakše kasnije
komunikacije.
Neki prijedlozi za imena timova su:
Tim 1: Loto
Tim 2: Novčići
Tim 3: Kockice
5.7 Trajanje projekta
S učenicima se dogovora vremenski rok od sedam dana kako bi prikupili materijale te kako bi
izradili prve „nedotjerane“ verzije svojih programa. Nakon isteka roka, voĎe timova
prezentiraju i pojašnjavaju svoja prva rješenja ostalim učenicima i nastavniku tijekom dva
nastavna sata. Nakon toga, s učenicima se dogovara vremenski rok od tjedan dana kako bi
svoje programe dovršili na način da budu prikladni i jasni za korištenje korisnicima koji nisu
upućeni u njihovu izradu. Nakon toga, predstavnici timova u vremenskom roku od dva dana
trebaju zajednički kreirati glavni program koji će omogućavati odabir pojedine igre na sreću u
ovisnosti o želji korisnika. Uz to, dogovara se rok od tri radna dana kako bi učenici prikupili
osnovne informacije o igri na sreću koja je pripala njihovom timu, te o vjerojatnosti dobitka u
pojedinoj igri.
5.8 Prikupljanje materijala
Učenici skupljaju informacije o pravilima navedenih igara te vjerojatnostima za „dobitak“ za
svaku posebnu igru.
Učenici tima Loto ostatku razreda prezentiraju osnovna i pojednostavljena pravila igre Loto
7/39. Osoba koja želi sudjelovati u toj igri kupuje listić na kojem na bilo koji način odabire 7
prirodnih brojeva u rasponu od 1 do 39. Osoba ispunjeni listić uplaćuje na za to predviĎenim
mjestima. Jednom tjedno odvija se javno dostupno izvlačenje dobitnih brojeva iz bubnja u
kojem se vrte kuglice s brojevima od 1 do 39 te bubanj nasumično izbacuje sedam brojeva.
Ako sudionik igre na svom prethodnom uplaćenom listiću ima zaokruženih tih sedam brojeva,
dobitnik je Jackpot-a, gdje se redovito radi o dobitku višemilijunskog iznosa. Osim
pogoĎenih svih sedam brojeva, dobitne kombinacije za sudionike su i pogoĎenih 6, 5 ili 4
broja. Učenici, uz pomoć nastavnika, raspravljaju koja je vjerojatnost da osoba odabirom i
uplatom jedne odabrane kombinacije odabere svih sedam dobitnih brojeva.
Kako bi učenici razumjeli pojam vjerojatnosti nije im potrebno znanje nastavnih sadržaja
vjerojatnosti koji se formalno uče u završnim razredima samo nekih srednjih škola, već im je
za temeljno i intuitivno razumijevanje dovoljno znanje stečeno u osnovnoj školi na nastavi
matematike.
S učenicima se ponovi da je prema definiciji vjerojatnost nekog dogaĎaja jednaka omjeru
broja povoljnih ishoda za taj dogaĎaj i broja svih mogućih ishoda. Iz definicije slijedi kako je
najmanja vjerojatnost jednaka 0 (nemoguć dogaĎaj, koji nastupa kada nema niti jednog
povoljnog ishoda, ono za što se kolokvijalnim rječnikom govori „nema šanse“ te da je najveća
16
vjerojatnost jednaka 1 (siguran dogaĎaj, kada su svi mogući ishodi povoljni, odnosno „100%
šansa“). Osim sigurnih i nemogućih dogaĎaja, svi ostali dogaĎaji imaju vjerojatnost jednaku
nekom broju izmeĎu 0 i 1. Svaka tako izračunata vjerojatnost se množenjem brojem 100 može
izraziti u obliku postotka.
Prilikom bacanja novčića vrlo je jednostavno intuitivno zaključiti kako je vjerojatnost da
padne pismo, odnosno glava upravo 0.5 odnosno 50%. No, matematički se to može pokazati
na sljedeći način. Broj mogućih ishoda je 2. Broj povoljnih ishoda (na primjer, da padne
pismo) je 1. Vjerojatnost da tijekom bacanja novčića padne pismo jednak je omjeru povoljnih
ishoda u odnosu na broj mogućih ishoda, odnosno 1: 2 0.5 50% .
Igrača kocka je kocka koja na svakoj plohi ima jedan cijeli broj od 1 do 6. S učenicima se
komentira vjerojatnost da će jednim bacanjem kocke na gornjoj plohi biti broj 6, odnosno da
će „pasti šestica“. Broj mogućih ishoda je 6. Broj povoljnih ishoda je 1. Vjerojatnost da na
kocki padne šestica jednaka je omjeru povoljnih ishoda u odnosu na broj mogućih ishoda,
odnosno 1:6 0,166666667 16,67% .
U igri Loto 7/39 od 39 ponuĎenih brojeva bira se 7 brojeva. S učenicima se izračuna kolika je
vjerojatnost da svi odabrani brojevi budu izvučeni, odnosno kolika je vjerojatnost dobitka
sedmice u igri Loto 7/39. Najprije se izračuna broj mogućih ishoda. U bubnju ima 39 kuglica i
u prvom izvlačenju može se izvući bilo koja od njih. To znači da prvo izvlačenje možemo
obaviti na 39 različitih načina. Prilikom drugog izvlačenja u bubnju je jedna kuglica manje, pa
drugo izvlačenje možemo obaviti na 38 načina. Analogno, treće se izvlačenje može obaviti na
37 načina, četvrto na 36, peto na 35, šesto na 34 i sedmo na 33 načina. Navedena izvlačenja
su nezavisna, odnosno kuglica koja je izvučena prilikom drugog izvlačenja ne ovisi o kuglici
koja je izvučena prilikom prvog. To vrijedi i za sva ostala izvlačenja. Zbog toga je ukupan
broj mogućih ishoda, prema pravilu prebrojavanja39 38 37 36 35 34 33 77519922 480 .
Broj povoljnih ishoda izračunat ćemo na sličan način. Prvi izvučeni broj smije biti bilo koji od
naših 7 unaprijed odabranih brojeva, drugi izvučeni broj smije biti bilo koji od preostalih 6,
treći broj smije biti jedan od preostalih 5, itd. Dakle, prvi se broj može odrediti na 7 načina,
drugi na 6 načina, treći na 5 načina, četvrti na 4 načina, peti na 3 načina, šesti na 2 načina i
posljednji, sedmi, na samo 1 način. Ukupan broj povoljnih ishoda je 7 6 5 4 3 2 1 5040 .
Vjerojatnost da se na lotu izvuče baš onih 7 brojeva koji su i odabrani, jednaka je omjeru
povoljnih ishoda u odnosu na broj mogućih ishoda, odnosno
5040:77519922480 0.000000065 0.0000065% .
Nakon što se izračunaju matematičke vjerojatnosti za povoljne ishode, s učenicima se
komentiraju vjerojatnosti koje su se dobile i zaključuje se da je najveća vjerojatnost za
dobitak prilikom igre bacanja novčića, iako ni ta vjerojatnost nije velika da bi je mogli zvati
sigurno ili gotovo sigurno, već su nam šanse samo pola. Prilikom bacanja igraće kocke,
vjerojatnost da se dobije šestica je još manja, jer je povoljan samo jedan od šest mogućih
ishoda. No, vjerojatnost da netko osvoji Jackpot u igri Loto 7/39 je toliko malena da možemo
reći da je zanemariva. Sve tri igre ipak imaju nešto zajedničko. Ako se igra pošteno, dobitak u
svakoj igri ovisi isključivo o faktoru „sreće“, a ne o odabiru ili postupku igrača koji u igri
sudjeluje.
17
5.9 Precizno zadavanje zadataka
Zadatak Loto
Izraditi program koji će omogućiti korisniku izbor sedam cijelih brojeva brojeva te generirati
listu od sedam slučajno odabranih brojeva većih ili jednakih 1 i manjih ili jednakih 39.
Zadatak Novčić
Izraditi program koji će dvama korisnicima omogućiti odabir strane novčića (pismo ili glava)
te će nasumično ispisati rezultat bacanja novčića.
Zadatak Kockice
Izraditi program koji simulira bacanje igraće kocke za dva korisnika. Dobiveni broj svakog
korisnika treba biti nasumičan. Program treba ispisati da je pobjednik onaj igrač koji je
bacanjem kocke dobio veći broj. U slučaju izjednačenja, igra je neriješena.
5.10 Izrada početnih programa
Učenici tima Loto ostalim učenicima i nastavniku tijekom nastavnog sata izlažu i
objašnjavaju prve verzije svojih programa.
from random import *
L = []
M = []
for i in range (7):
M.append(int(input('Odaberi broj ')))
for i in range (7):
L.append(randint (1,39))
print 'Dobitni brojevi', L
Kako bi se mogle koristiti funkcije modula random u programskom jeziku Python, prvo treba
omogućiti korištenje tog modula naredbom from random import *. Naredbe L = []
i M = [] služe inicijalizaciji praznih lista u koje će se spremati dobitni, odnosno odabrani
brojevi. Prva for petlja omogućuje korisniku odabir sedam brojeva koje žele „zaokružiti“ na
listiću. Odabrani brojevi se pomoću funkcije M.append()pohranjuju u listu M. Druga for
petlja pomoću naredbe randint()nasumično generira sedam cijelih brojeva većih ili
jednakih od 1 i manjih ili jednakih od 39 koji se pohranjuju u listu L. Posljednja naredba samo
ispisuje listu dobitnih brojeva.
18
Slika 7 Primjer korištenja prve verzije programa Loto
Učenici tima Novčići prezentiraju svoja rješenja.
from random import *
prvi = int(input('Prvi igrač bira 1 za pismo ili 2 za glava '))
drugi = int(input('Drugi igrač bira 1 za pismo ili 2 za glava '))
palo = randint(1,2)
if (palo == 1):
print 'Pala je glava'
else:
print 'Palo je pismo'
Kao i kod tima Loto, kako bi se omogućilo korištenje funkcija iz modula random u
programskom jeziku Python potrebna je naredba from random import *.
Varijabli prvi se pridružuje vrijednost s obzirom na odbabir prvog korisnika što je
omogućeno naredbom int(input()). Analogno, varijabli drugi pridružuje se odabir
drugog korisnika.
Naredba randint(1,2) nasumično generira broj 1 ili 2 te se pridružuje varijabli palo.
Ako je generirani broj 1, program će ispisati „Pala je glava“, a ako je generirani broj 2,
program će ispisati „Palo je pismo“ pa korisnici u ovisnosti o svom početnom odabiru znaju
tko je pobjednik igre.
19
Slika 8 Primjer korištenja prve verzije programa Novčid
Učenici tima Kockice prezentiraju svoja rješenja.
from random import *
prvi = randint(1,6)
drugi = randint(1,6)
print 'Prvi igrac je bacio kocku i dobio broj ', prvi
print 'Drugi igrac je bacio kocku i dobio broj ', drugi
if prvi > drugi:
print 'Pobjednik je prvi igrac'
elif prvi < drugi:
print 'Pobjednik je drugi igrac'
else:
print 'Izjednaceno!'
Naredba randint(1,6)nasumično generira cijeli broj od 1 do 6 i time simulira bacanje
igrače kocke. Rezultati bacanja kocke se pridružuju varijablama prvi, odnosno drugi.
Naredbama print korisnike se obavještava koji broj im je „pao“ na kocki.
Pomoću naredbe if else usporeĎuju se dobiveni brojevi igrača. Igrač koji je „bacio“ veći
broj je pobjednik, osim u slučaju izjednačenja.
Slika 9 Primjer korištenja prve verzije programa Kockice
20
5.11 Kritika rezultata i nove smjernice
Nakon prezentacije početnih rješenja, svi učenici imaju zadatak više puta koristiti programe
drugih timova. Program tima Loto trebaju koristiti samostalno, a programe timova Novčići i
Kockice podijeljeni u parove. Pritom se učenicima sugerira bilježenje dobivenih rezultata,
odnosno bilježenje pobjeda. Osim toga, svi timovi u suradnji s nastavnikom raspravljaju o
mogućnostima poboljšanja njihovih početnih programa.
Učenici koji sudjeluju u izradama ili testiranjima programa nakon prezentiranja svih rješenja
upućeni su u način korištenja programa i pravila igre o kojoj se radi. No, cilj projekta na
kojem rade je taj da konačni produkt bude jasan, precizan i zabavan korisnicima koji ne znaju
ništa o izradi i funkcioniranju njihovih programa. Učenici svih timova u svoje programe mogu
dodati sažete i jasne upute o igri koju njihov program simulira, te urediti program kako bi
korisnike jasnije obavještavao o odabranim i dobivenim rezultatima. Osim toga, radi
povećanja zanimljivosti igara, timovi svoje programe mogu proširiti dodatnim opcijama.
Učenici tima Loto u svoj program mogu uključiti ispise broja „pogodaka“. Osim toga,
korištenjem funkcije randint() program stvarno generira listu sedam nasumično
odabranih brojeva, ali ta funkcija neće osigurati da meĎu „izvučenim“ rezultatima neće biti
ponavljanja brojeva, jer u stvarnoj igri Loto 7/39 nikad dva izvučena broja neće biti ista.
Učenici tima Novčići zanimljivost igre mogu povećati s uvoĎenjem više uzastopnih bacanja
novčića, gdje je broj bacanja neparan, a pobjednik igre je onaj korisnik koji je više puta
pobijedio.
Učenici tima Kockice takoĎer mogu uvesti više uzastopnih bacanja kocke, pa pobjednikom
proglasiti onog korisnika koji je više puta pobijedio ili onog korisnika koju ima veći rezultat
kad se zbroje rezultati svih bacanja. Osim toga, timovi mogu dodati opciju upisivanja imena
korisnika (igrača), te ispise imena pobjednika.
5.12 Prezentacija finalnih rješenja timova
Učenici tima Loto prezentiraju svoje finalno rješenje u koje su unijeli prethodno dogovorene
promjene.
import random
print 'Dobrodošli u igru Loto 7/39!'
print ''
print 'Pravila igre:'
print ''
print 'Na prilozenom listiću odaberite sedam brojeva.'
print 'Nakon odabira brojeva i uplate Vašeg listića pratite'
print 'ovotjedno izvlačenje brojeva. Ako je Vaših sedam
odabranih brojeva '
print 'dobitna kombinacija, osvojili ste Jackpot koji ovog
tjedna iznosi'
print '36 000 000 kuna!'
print 'Sretno!'
print ''
L = []
21
M = []
br = 0
for i in range (7):
M.append(int(input('Zaokruzite broj ')))
print 'Zaokruzili ste brojeve'
for i in range (7):
print M[i]
L = random.sample(range(1,39),7)
print 'Dobitni brojevi ovog kola Lota 7/39 su:'
for i in range (7):
print L[i]
for i in range(7):
for j in range(7):
if (M[i] == L[j]):
br = br+1
if (br == 4):
print 'Bravo! Pogodili ste četiri broja! Dobiveni iznos je
19 kn!'
elif (br == 5):
print 'Bravo! Pogodili ste pet brojeva! Dobiveni iznos je
970 kn!'
elif (br == 6):
print 'Bravo!!! Pogodili ste šest brojeva. Dobiveni iznos je
56 000 kn!'
elif (br == 7):
print 'JACKPOT!!!! Osvojili ste iznos od 36 milijuna
else:
print 'Nema dobitka. Vise srece drugi put! '
Promjene kojima je prva verzija programa tima Loto poboljšana su tekst koji se ispisuje
nakon pokretanja programa koji korisniku ukratko objašnjava pravila igre i korištenje
programa.
Osim toga, korištena je metoda sample iz modula random kako bi se spriječilo ponavljanje
„izvučenih“ brojeva u listi. S obzirom na to da u stvarnoj igri Loto 7/39 dobitni listići nisu
samo oni sa sedam pogoĎenih brojeva, već i sa četiri, pet ili šest brojeva, dodana je varijabla
br koja sprema broj pogoĎenih brojeva. To je omogućeno dvostrukom for petljom koja
usporeĎuje elemente liste M i elemente liste L te sprema broj elemenata koji se podudaraju. Na
kraju program pomoću naredbe if else provjerava postoji li značajan broj pogodaka te
obavještava korisnika o dobivenom iznosu u slučaju da on postoji, odnosno obavještava
korisnika ako nema novčanog dobitka, što će se dogoditi ako je korisnik imao nula, jedan, dva
ili tri pogotka.
22
Slika 10 Primjer korištenja završne verzije programa Loto
Učenici tima Novčić prezentiraju svoja rješenja.
from random import *
print 'Dobrodošli u igru bacanja novčića!'
print 'Ovo je igra koju igraju dva igrača.'
print 'Odaberite broj bacanja novčića koji želite odigrati, a
zatim unesite imena igrača.'
print 'Ako broj bacanja nije neparan, može se dogoditi da igra
nema pobjednika.'
print 'Prvi igrač upisuje pismo ili glava. Drugom igraču
pripada neodabrana opcija.'
print 'Igrač koji pobjedi u više partija je pobjednik.'
print 'Sretno!'
print ''
n = int(input('Odaberite broj igara koji želite odigrati: '))
if ((n % 2) ==0):
print 'Odaberite neparan broj igara, inače bi igra mogla
23
završiti bez pobjednika!'
n = int(input('Odaberite broj igara koji želite odigrati:'))
prvi = raw_input('Ime prvog igrača : ')
drugi = raw_input('Ime drugog igrača : ')
print prvi,', odaberite pismo ili glava?'
odabir =raw_input()
print ''
if (odabir == 'pismo'):
print drugi,'je glava!'
print ''
else:
print drugi,'je pismo!'
print ''
p=0
g=0
for i in range(n):
palo = randint(1,2)
print i+1,'. bacanje:'
if (palo == 1):
print 'Palo je pismo!'
print ''
p=p+1
else:
print 'Pala je glava'
print ''
g=g+1
if ((odabir =='pismo') & (p>g)):
print 'Pobjednik/ca je',prvi,'!'
elif ((odabir =='pismo') & (p<g)):
print 'Pobjednik/ca je',drugi,'!'
elif ((odabir =='glava') & (p>g)):
print 'Pobjednik/ca je',drugi,'!'
else:
print 'Pobjednik/ca je',prvi,'!'
Promjene koje su se dogodile od početne verzije programa su značajne, s obzirom na to da
ovaj program umjesto jednog bacanja novčića provodi broj bacanja koji bira korisnik.
Na početku su pomoću naredbe print dodane upute koje korisnike upućuju u pravila igre.
Novčić se baca n puta, gdje je n neparan broj. Igrač koji je imao više pobjeda je pobjednik.
Prilikom unosa parnog broja igara, korisnici dobivaju obavijest o tome kako zbog parnog
unosa broja igara, igra može završiti izjednačeno, te korisnicima nudi ponovni upis broja
igara.
Nakon toga, program omogućuje korisnicima upis imena. Igrač koji prvi upisuje ime, kasnije
prvi bira stranu novčića.
24
U varijablu odabir sprema se odabrana strana prvog igrača. Igrač unosi riječ pismo ili riječ
glava. Taj unos je omogućen naredbom raw_input, kao i kod unosa imena igrača, kako bi
se kasnije u programu mogao upotrebljavati tip podataka string, bez znakova navoda koji
inače taj string označuju.
U odnosu na prvu verziju koda, drugi igrač je samo obaviješten o tome da je njemu preostala
glava, ako je prvi odabrao pismo ili obrnuto. Nepotreban je odabir jedine preostale opcije
drugog igrača. To je omogućeno naredbom if else.
For petljom koja se vrti do odabranog broja igara n, nasumično se generiraju brojevi 1 ili 2,
gdje se pritom generiran broj 1 interpretira kao da je „palo“ pismo, a generiran broj 2 kao da
je „pala“ glava. Pomoću naredbe print tijekom svakog bacanja korisnike se obavještava o
broju bacanja te o rezultatu bacanja.
Nakon prikazanih svih rezultata bacanja, program ispisuje ime pobjednika.
Postoje dva moguća ishoda, ali su to četiri mogućnosti s obzirom na odabir prvog igrača:
Prvi igrač je odabrao pismo, pismo je palo više puta nego glava, pa je pobjednik prvi igrač.
Prvi igrač je odabrao pismo, glava je pala više puta nego pismo, pobjednik je drugi igrač.
Prvi igrač je odabrao glava, glava je pala više puta nego pismo, pobjednik je prvi igrač.
Prvi igrač je odabrao glava, pismo je palo više puta nego glava, pobjednik je drugi igrač.
Slika 11 Primjer korištenja završne verzije programa Novčid
Nešto drugačiji pristup ovoj igri je taj da program sam nasumično odabire kojem će igraču biti
dodijeljena koja strana novčića. Time se pomalo gubi smisao originalno zamišljene igre
25
bacanje novčića, ali je primjer dobre vježbe za učenike u radu s nasumičnim brojevima u
programskom jeziku Python.
from random import *
print 'Dobrodošli u igru bacanja novčića!'
print 'Ovo je igra koju igraju dva igrača.'
print 'Odaberite broj bacanja novčića koji želite odigrati, a
zatim unesite imena igrača.'
print 'Ako broj bacanja nije neparan, može se dogoditi da igra
nema pobjednika.'
print 'Svaki igrač će dobiti obavijest o tome koja strana
novčića je njegova.'
print 'Igrač koji pobjedi u više partija je pobjednik.'
print ''
print 'Sretno!'
print ''
n = int(input('Odaberite broj igara koji želite odigrati: '))
if ((n % 2) ==0):
print 'Odaberite neparan broj igara, inače bi igra mogla
završiti bez pobjednika!'
n = int(input('Odaberite broj igara koji želite odigrati:'))
prvi = raw_input('Ime prvog igrača : ')
drugi = raw_input('Ime drugog igrača : ')
odabir = randint(1,2)
if (odabir==1):
print prvi,', Vaša strana je pismo.'
print drugi,', Vaša strana je glava.'
else:
print prvi,', Vaša strana je glava.'
print drugi,', Vaša strana je pismo.'
print ''
p=0
g=0
for i in range(n):
palo = randint(1,2)
print i+1,'. Bacanje:'
if (palo == 1):
print 'Palo je pismo!'
print ''
p=p+1
else:
print 'Pala je glava'
print ''
26
g=g+1
if ((odabir ==1) & (p>g)):
print 'Pobjednik/ca je',prvi,'!'
elif ((odabir ==1) & (p<g)):
print 'Pobjednik/ca je',drugi,'!'
elif ((odabir3==2) & (p>g)):
print 'Pobjednik/ca je',drugi,'!'
else:
print 'Pobjednik/ca je',drugi,'!'
Varijabli odabir se nasumično pridružuje broj 1 ili 2. Pomoću naredbe if else svakom
igraču pridružuje se strana novčića:
ako je odabir nasumično odabran broj 1, prvi igrač je pismo, a drugi glava
ako je odabir nasumično odabran broj 2, prvi igrač je glava, a drugi pismo
Time je u potpunosti izbačeno korištenje stringova 'pismo' i 'glava' iz samog programa, već
program radi samo s brojevima 1 i 2 na kojima radi uvjete i ispisuje rezultate.
Tim kockice prezentira svoja rješenja.
print 'Dobrodošli u igru bacanja kockica. Ovo je igra koju
igraju dva igrača.'
print 'Svaki igrač unosi svoje ime, te biraju broj bacanja
kockica koji žele'
print 'ostvariti. Igrač koji ima veći zbroj rezultata nakon
svih bacanja'
print 'je pobjednik!'
print ''
print 'Sretno!'
print ''
from random import *
prvi = raw_input('Ime prvog igrača: ')
drugi =raw_input('Ime drugog igrača: ')
n = int(input('Unesi broj igara: '))
P = []
D = []
zb1 = 0
zb2 = 0
for i in range (n):
P.append(randint(1,6))
zb1 = zb1 + P[i]
print prvi
print i+1,'. bacanje:'
print P[i]
27
D.append(randint(1,6))
zb2 = zb2 + D[i]
print drugi
print i+1,'. bacanje:'
print D[i]
print ''
print prvi,',Vaš rezultat je:'
print (zb1)
print drugi,',Vaš rezultat je:'
print (zb2)
if zb1 > zb2:
print 'Pobjednik je',prvi
elif zb1 < zb2:
print 'Pobjednik je',drugi
else:
print 'Izjednačeno'
Modifikacije koje su napravljene u odnosu na prethodni program su unos imena igrača u
obliku stringa pomoću funkcije raw_input(). Osim toga, dodana je varijabla n kojoj se
pridružuje broj bacanja kocke koji biraju korisnici. Naredbama P = [] i D = [] stvaraju
se prazne liste u koje će se redom spremati rezultati svakog bacanja prvog, odnosno drugog
igrača. Početni zbrojevi rezultata svakog igrača su nula (varijable zb1 i zb2). Pomoću for
petlje odvija se odabrani broj bacanja n. Prilikom svakog koraka petlje, pomoću naredbe
randint(1,6) generira se prirodan broj izmeĎu 1 i 6 koji predstavlja rezultat bacanja
kocke pojedinog igrača. Pojedini rezultati se spremaju u listu, a zbrojevi svih dotadašnjih
rezultata u varijable zb1 i zb2. Na kraju program obavještava igrače, koristeći njihovo ime,
koliki je ukupni rezultat i tko je pobjednik.
28
Slika 12 Primjer korištenja završne verzije programa Kockice
5.13 Integriranje rezultata u cjeloviti proizvod
Nakon što svi timovi prezentiraju i pojasne razredu rješenja svojih projektnih podzadataka,
učenici svih timova testiraju rješenja drugih timova te komentiraju rezultate.
Predstavnici timova dobiju zadatak integrirati rješenja pojedinih timova u jedan program.
Glavni program mora korisniku omogućavati izbor pojedine igre. Nakon izbora igre, pokreće
se potprogram koji korisnici mogu koristiti na prethodno opisan način.
Nakon testiranja, predstavnici timova dogovaraju daljnju suradnju, vrijeme sastajanja, prostor
za rad i plan rada kako bi ostvarili zadani zadatak. Za integriranje rješenja, s nastavnikom
dogovaraju vremenski rok u kojem proizvod mora biti spreman za prezentiranje (3 dana).
Osim toga, predstavnici meĎu sobom trebaju odrediti glavnog predstavnika koji će cijelom
razredu prezentirati i pojasniti završno rješenje.
Jedan od načina kako se postojeći programi mogu integrirati u jedan program je taj da se
programe loto, kockice i novcici definira kao nove funkcije unutar glavnog programa.
Kako bi se unutar programa definirala nova funkcija potrebno je početku pisanja programa
definirati sve funkcije koje želimo u programu koristiti. U ovom projektu svaki posebni
29
program postaje nova funkcija koja u sebi sadrži sve naredbe koje je sadržavalo rješenje
pojedinih timova. Funkcije unutar programa koristimo na sljedeći način:
def ime_funkcije (parametri):
niz naredbi koje funkcija izvršava
Tako se na vrlo jednostavan način postojeći programi mogu integrirati u jedan program i
odreĎene funkcije pozivati u ovisnosti o odabiru igre korisnika.
U glavnom programu, nakon navoĎenja funkcija, korisniku treba ispisati upute za odabir igre i
osigurati opciju koja omogućuje ponovni izbor igre ako je slučajno pogriješio s upisom
naziva igre. Osim toga, u svakoj od funkcija se koristi modul random programskog jezika
Python, pa naredba from random import * može biti i u glavnom programu.
Primjer rješenja završnog programa:
def lotto():
print 'Dobrodošli u igru Loto 7/39!'
print ''
print 'Pravila igre:'
print ''
print 'Na priloženom listiću odaberite sedam brojeva.'
print 'Nakon odabira brojeva i uplate Vašeg listića
pratite'
print 'ovotjedno izvlačenje brojeva. Ako je Vaših sedam
odabranih brojeva '
print 'dobitna kombinacija, osvojili ste Jackpot koji ovog
tjedna iznosi'
print '36 000 000 kuna!'
print 'Sretno!'
print ''
L = []
M = []
br = 0
for i in range (7):
M.append(int(input('Zaokruzite broj ')))
print 'Zaokruzili ste brojeve '
for i in range (7):
print M[i]
L = random.sample(range(1,39),7)
Print 'Dobitni brojevi ovog kola Lota 7/39 su:'
for i in range (7):
print L[i]
for i in range(7):
for j in range(7):
if (M[i] == L[j]):
br = br+1
30
if (br == 4):
print 'Bravo! Pogodili ste četiri broja! Dobiveni
iznos je 19 kn!'
elif (br == 5):
print 'Bravo! Pogodili ste pet brojeva! Dobiveni iznos
je 970 kn!'
elif (br == 6):
print 'Bravo!!! Pogodili ste šest brojeva. Dobiveni
iznos je 56 000 kn!'
elif (br == 7):
print 'JACKPOT!!!! Osvojili ste iznos od 36 milijuna
kuna!!!!'
else:
print 'Nema dobitka. Vise srece drugi put!'
def kockice():
print 'Dobrodošli u igru bacanja kockica. Ovo je igra koju
igraju dva igrača.'
print 'Svaki igrač unosi svoje ime, te biraju broj bacanja
kockica koji žele '
print 'ostvariti. Igrač koji ima veći zbroj rezultata
nakon svih bacanja'
print 'je pobjednik!'
print ''
print 'Sretno!'
print ''
prvi = raw_input('Ime prvog igrača: ')
drugi =raw_input('Ime drugog igrača: ')
n = int(input('Unesi broj igara: '))
P = []
D = []
zb1 = 0
zb2 = 0
for i in range (n):
P.append(randint(1,6))
zb1 = zb1 + P[i]
print (prvi)
print ("%d. bacanje:" %(i+1))
print (P[i])
D.append(randint(1,6))
31
zb2 = zb2 + D[i]
print drugi
print i+1, '. bacanje:'
print D[i]
print ""
print prvi,' Vaš rezultat je:'
print zb1
print drugi,' Vaš rezultat je:'
print zb2
if zb1 > zb2:
print 'Pobjednik je',prvi
elif zb1 < zb2:
print 'Pobjednik je',drugi
else:
print 'Izjednačeno'
def novcici():
print 'Dobrodošli u igru bacanja novčića!'
print 'Ovo je igra koju igraju dva igrača.'
print 'Odaberite broj bacanja novčića koji želite
odigrati, a zatim unesite imena igrača.'
print 'Ako broj bacanja nije neparan, može se dogoditi da
igra nema pobjednika.'
print 'Prvi igrač upisuje pismo ili glava. Drugom igraču
pripada neodabrana opcija.'
print 'Igrač koji pobjedi u više partija je pobjednik.'
print 'Sretno!'
print ''
n = int(input('Odaberite broj igara koji želite odigrati:'))
if ((n % 2) ==0):
print 'Odaberite neparan broj igara, inače bi igra
mogla završiti bez pobjednika!'
n = int(input('Odaberite broj igara koji želite
odigrati: '))
prvi =raw_input('Ime prvog igrača : ')
drugi =raw_input('Ime drugog igrača : ')
print prvi,', odaberite pismo ili glava?'
odabir = raw_input()
print ''
if (odabir == 'pismo'):
32
print drugi,'je glava!'
print ''
else:
print drugi,'je pismo!'
print ''
p=0
g=0
for i in range(n):
palo = randint(1,2)
print ("%d. bacanje:" %(i+1))
if (palo == 1):
print 'Palo je pismo!'
print ''
p=p+1
else:
print 'Pala je glava'
print ''
g=g+1
if ((odabir =='pismo') & (p>g)):
print 'Pobjednik/ca je',prvi
elif ((odabir =='pismo') & (p<g)):
print 'Pobjednik/ca je',drugi
elif ((odabir =='glava') & (p>g)):
print 'Pobjednik/ca je,drugi
else:
print 'Pobjednik/ca je',prvi
print 'Dobrošli u "Igre na sreću" 2.d razreda! Danas u ponudi
imamo'
print 'igre Loto 7/39 za jednog igrača ili ako ipak želite
igrati igre u paru,'
print 'nudimo Vam igre bacanja kockica i bacanja novčića.'
print 'Za igru Loto 7/39 unesite riječ loto. Za igru bacanja
kockica unesite riječ kockice,'
print 'a za igru bacanja novčića unesite riječ novcici. Želimo
Vam puno sreće i pobjeda!'
print''
from random import *
pogreska = True;
while (pogreska):
igra = raw_input('Odaberi igru ')
if (igra=='loto'):
33
lotto()
pogreska = False
elif(igra=='kockice'):
kockice()
pogreska = False
elif(igra=='novcici'):
novcici()
pogreska = False
else:
print 'Krivo ste unijeli naziv igre!'
pogreska = True
Nakon pokretanja programa igre.py korisniku ili korisnicima se prikazuje početni tekst u
kojem su kratko navedena pravila odabira igre. Za igru Loto7/39 korisnik kod odabira igre
upisuje riječ loto, za bacanje kocke riječ kockice, a za bacanje novčića riječ novcici. Nakon
odabira igre, pokreće se odabrana igra, što je omogućeno naredbom if else. Ako je
korisnik krivo upisao riječ za pokretanje neke od željenih igara, program će ga na to upozoriti
i omogućiti mu ponovni odabir igre, a to je omogućeno korištenjem petlje while.
Slika 13 Primjer korištenja glavnog programa s ispravnim unosom naziva igre
Slika 14 Primjer korištenja glavnog programa s neispravnim unosom imena igre
34
5.14 Uspostavljanje veze s nastavnim planom i programom
Tijekom izrade ovog projekta, učenici će:
uvježbavati rad s naredbama unosa, ispisa, stringovima, listama, petljama for i while te sa strukturiranim načinom programiranja
upoznati se s pojmom modula i modulom random programskog jezika Python,
koristiti nekoliko funkcija iz tog modula te se upoznati s pojmom nasumičnog
odnosno pseudonasumičnog broja, te generirati liste pseudonasumičnih brojeva analizirati situacije u kojima se funkcije modula random mogu primijeniti prilikom
programskog simuliranja situacija iz stvarnog života uspostaviti vezu sa sadržajima iz matematike iz područja vjerojatnosti analizirati metode pomoću kojih mogu poboljšati svoja rješenja suradnički raditi sa skupinom ljudi gdje će primjenjivati demokratski način donošenja
odluka, izmjenjivati ideje i raspravljati o njima, te ih prezentirati ostalim učenicima
5.15 Prezentacija proizvoda korisnicima Učenici svoj rad mogu prezentirati drugim učenicima iste ili druge škole koji nisu imali
prilike raditi na projektu. Osim toga, učenici tijekom Dana otvorenih vrata svoje škole ili na
školskom sajmu svoj proizvod mogu predstaviti roditeljima, nastavnicima, učenicima i
ostalim gostima, te im pružiti mogućnost da njihov proizvod koriste u svrhu zabave. Uz
predstavljanje se mogu organizirati i simbolične nagrade za dobitnike u ponuĎenim igrama.
5.16 Usporedba verzija 2.7 i 3.3 programskog jezika Python
Može se dogoditi da različiti timovi učenika koriste različite verzije programskog jezika
Python. Zato prilikom integriranja rješenja u cjeloviti proizvod timovi meĎusobno trebaju
dogovoriti koju će verziju koristiti kod prezentiranja finalnog rješenja, te sve potprograme
uskladiti kako bi radili u odabranoj verziji. Najbitnije razlike izmeĎu verzija koje su bitne za
njihove programe vezane su uz korištenje naredbe print i funkcije input().Korištenje
naredbe print u verziji 2.7:
print 'tekst za ispis' ili print "tekst za ispis"
Korištenje naredbe print() u verziji 3.3:
print ('tekst za ispis') ili print ("tekst za ispis")
Naredba input() u verziji 3.3 automatski sprema unos string,dok u verziji 2.7. umjesto
toga treba koristiti funkciju raw_input().
35
6. Zaključak U školama Republike Hrvatske nastava se često se odvija na tradicionalan način, frontalnom
nastavom s nešto samostalnog rada učenika, gdje nastavnik nastavne sadržaje prenese
učenicima, a učenici ih kasnije jednostavno reproduciraju natrag. Iako zbog vremenskih i
materijalnih ograničenja drugačiji tip nastave često nije moguć, uvijek se može naći vrijeme i
prostor za odvijanje alternativnih načina nastave. Projektna nastava je poželjna u svim
obrazovnim predmetima osnovnih i srednjih škola, ali je u nastavi informatike uz malo truda
nastavnika i učenika jednostavno ostvariva, jer za provoĎenje projektne nastave u informatici
gotovo ništa osim računala nije potrebno. Tijekom projektne nastave učenici se motiviraju na
samostalno i grupno istraživanje, suraĎivanje s članovima svojeg tima, a zatim i sa članovima
ostalih timova. Osim toga, projektna nastava omogućuje korelaciju s drugim obrazovnim
predmetima te obraĎivanje problema koji se pojavljuju u njihovom svakodnevnom životu.
Programski jezik Python zbog svoje jednostavne, jasne i intuitivne sintakse dobar je izbor za
učenike koji su početnici u programiranju, ali i za one kojima su potrebne zahtjevnije
mogućnosti programskog jezika.
U radu je ukratko prikazan primjer provoĎenja projekta „Igre na sreću“ kroz koji učenici
drugih razreda srednjih škola na zabavan i jednostavan način mogu ponoviti gotovo sve što su
do tad naučili na nastavi matematike, a pritom učeći nove mogućnosti programskog jezika
Python i algoritamskim pristupom rješavanju problema mogu kreirati programe koji
simuliraju neke svima poznate i zabavne igre na sreću (Loto 7/39, bacanje kocke i bacanje
novčića). Nakon završetka projekta, proizvod koji su stvorili jasan je i jednostavan proizvod
koji se može prezentirati i onim korisnicima koji ne znaju i ne trebaju znati kako i na koji
način je sam proizvod kreiran.
36
7. Literatura [1] A. Čižmešija, Projektna nastava matematike, dostupno na
http://web.math.pmf.unizg.hr/nastava/mnm1/Projekt.ppt (srpanj 2014.)
[2] ] P. Brođanac i suradnici, Python – jezik za podučavanje algoritamskog pristupa rješavanju
problema, dostupno na
http://www.mipro.hr/LinkClick.aspx?fileticket=Fq7zZKz0nZw%3D&tabid=134&language=h
r-HR (lipanj 2015.)
[3] Ministarstvo znanosti, obrazovanja i sporta, Nacionalni okvirni kurikulum za osnovne i srednje
škole, dostupno na http://public.mzos.hr/fgs.axd?id=16803 (lipanj 2014.)
[4] Ministarstvo, znanosti obrazovanja i sporta, Nastavni plan i program iz informatike za gimnazije,
dostupno na http://dokumenti.ncvvo.hr/Nastavni_plan/gimnazije/obvezni/informatika.pdf
(kolovoz 2015.)
[5] Python (programming language), dostupno na
https://en.wikipedia.org/wiki/Python_(programming_language)#Use (rujan 2015.)
[6] G. von Rossum, Foreword for "Programming Python", dostupno na
https://www.python.org/doc/essays/foreword (rujan 2015.)
37
8. Sažetak Rad opisuje razvoj programskog jezika Python i prednosti korištenja tog programskog jezika.
U radu je opisan pojam projekta, faze koje bi trebao sadržavati svaki projekt u nastavi, te
prednosti korištenja projektne nastave informatike. U radu je prikazan primjer projektne
nastave informatike u drugom razredu srednje škole korištenjem programskog jezika Python.
IzraĎeni projekt se povezuju s ishodima iz nastavnog plana i programa iz informatike za prvi i
drugi razred srednje škole. Tijekom provoĎenja prikazanog primjera projekta, učenici uče
kako koristiti funkcije iz modula random za generiranje listi čiji su elementi nasumični
brojevi, te pomoću tih funkcija, podijeljeni u timove, izraĎuju programe koji simuliraju igre
na sreću Loto 7/39, bacanje igraće kocke i bacanje novčića.
38
9. Summary Paper describes the development of the programming language Python and the advantages of
using this programming language. Paper describes the concept of the project, phases which
should be part of any project in the classroom and the benefits of using project based learning.
Paper shows an example of the project based learning in computer classroom in the second
year of secondary school using the programming language Python.
Project is associated with the outcomes of the curriculum in information technology for the
first and second year of secondary school. During the project, students learn how to use the
functions of the module random for generating lists whose elements are random numbers and
divided into teams and using those function, students are developing training programs that
simulate gambling games Loto 7/39, dice roll and coin tossing.
39
10. Životopis
Jelena Štimac roĎena je 14.6.1985. godine u Koprivnici. Od roĎenja živi u Novigradu
Podravskom, selu nedaleko Koprivnice. PohaĎala je osnovnu školu „Prof. Blaž MaĎer“ u
Novigradu Podravskom, a zatim smjer opće gimnazije u koprivničkoj školi „Gimnazija Fran
Galović“. Godine 2010. završila je preddiplomski studij edukacije matematike, te upisala
diplomski studij matematike i informatike, smjer nastavnički. Tijekom školske godine
2012./2013. radila je kao nastavnik matematike u Osnovnoj školi „Prof. Blaž MaĎer“ u
Novigradu Podravskom i kao nastavnik informatike u zagrebačkoj 12. gimnaziji. Od početka
školske godine 2013./2014. pa do danas radi kao nastavnik matematike u Srednjoj školi
Koprivnica.