You are on page 1of 117

Metodiki pristup nastavi

programiranja u srednjoj koli


uporabom programskog jezika

Python

Daniel Rakijai, prof. mentor


daniel.rakijasic@skole.hr
www.python.org
Python

Istovremeno i strukturni i objektno orijentirani


jezik
Tvorac Guido van Rossum
Nastao 1990.
Koriste ga NASA, IBM, Google, Yahoo, ..
Poduavaju ga na MIT-u i na naim fakultetima
Interpreter i kompajler
Trenutno meu 10 najpopularnijih jezika
Zato Python?
besplatan, open source licenca
podran na razliitim operativnim sustavima
unutar Pythona mogu se pozivati funkcije drugih
programa (npr. C-a)
Python kd mogue je izvoditi unutar programa
pisanog npr. u C-u
automatski sustav za rad s memorijom
moe posluiti kao zamjena za pseudo jezik
Potie algoritamski nain razmiljanja
Manje je usmjeren prema sintaksi jezika
Podrava razliite stilove programiranja, od
strukturnog do objektnoorijentiranog
Pomoni alati u nastavi
programiranja
loomen.carnet.hr
www.gliffy.com
www.pastie.org
www.linoit.com
https://gist.github.com/
Notepad++
Nastavni program 2. razred
PMG
1. Algoritmi i programi
2. Python - priprema i izvoenje programa
3. Osnovne programske strukture (sekvenca,
selekcija, iteracija)
4. Funkcije, programi, moduli
5. Podatkovne zbirke
6. Osnove raunalne grafike
2.1 Algoritmi i
programi
Algoritamsko rjeavanje zadataka
Program, programiranje
Strojni jezik, mnemoniki jezik, vii
programski jezici
Jezini prevoditelji (interpreteri i
kompajleri)
Izvorni i izvrni kod
Koraci (faze) programiranja:
1. Opis, definiranje i analiza
problema
2. Traenje i oblikovanje naina
rjeavanja problema
3. Pisanje, razvijanje izvornog
7. Iz kompjutorskog programa
r 4. Provjera ispravnosti i
a dotjerivanje programa
d 5. Aktiviranje i koritenje
a programa
d
6. Odravanje programa i po
o
ALGORITAM

Muhammed ibn Musa al Khowarizmi


Postupak koji dovodi do rjeenja nekog
problema u konanom broju koraka, a
sastoji se od pravila ili instrukcija.
Tehnika za rjeavanje nekog problema uz
pretpostavku da rjeenje postoji.
Uputa
Primjeri
ALGORITAM

Algoritam se moe prikazati:


pseudokodom
dijagramom tijeka
naredbama u nekom programskom
jeziku
Svaki prikaz algoritma moe se
sastojati od:
sekvence (niz naredbi koje se izvode
jedna iza druge)
selekcije (predstavlja uvjet za
Zadatak 1

Napiite pseudokod i nacrtajte


dijagram tijeka za program koji e
ispisati brojeve od 20 do 10 ali bez
broja 13.

http://goo.gl/kRsL43
Zadatak 2

Ivica i Marica igraju zanimljivu igru.


Jedno od njih baca kocku, a drugo
pokuava pogoditi koji je broj na
donjoj strani kocke.
Napii pseudokod i nacrtaj dijagram
tijeka za program koji e za uneseni
broj na gornjoj strani kocke za igru
ispisati koji je broj na donjoj strani.
2.2 Python - priprema i
izvoenje programa
Rad u komandnoj liniji IDLE suelja

Jednostavni tipovi podataka :


cijeli brojevi
realni brojevi
logiki tip
znakovni niz (string)
Aritmetiki operatori i izrazi
+ - * ** / // %
Varijable
Naredbe za unos i ispis
Osnovna pravila pisanja programa
VJEBA komandna linija

35
0.0000035
print(Danas je ponedjeljak\n i ne pada kia)
a=500
b=300
print(a,b)
a,b=b,a
print(a,b)
bin(a)
hex(a)
2.3 Osnovne
programske strukture
(sekvenca, selekcija, iteracija)
Jednostavni programi (sekvenca)

Kodiranje
Semantika i sintaksa
Pogreke sintaktike i logike
Ureivaki dio IDLE suelja
Zadatak 3

Napiite program koji e uitati stranice


pravokutnika i zatim izraunati i ispisati
njegov opseg i povrinu.
Zadatak 4

Napiite program koji e unositi iznos u


kunama i zatim ispisati koliko nam treba
kovanica ili novanica od 1,2,5 i 10 kuna
za navedeni iznos.
Programsko grananje (selekcija)
Vrste programskog grananja

Jednostruko (if)
Viestruko (if .. else, if.. elif)
Blok naredbi if (ugnijeene if
naredbe)
Zadatak 5 jednostruko grananje

Napiite program koji e uitati cijeli


broj a i ispisati njegov drugi korijen
ako je a vei od 0.
If .. else - PRIMJER 1
Provjeri je li prirodan broj a paran ili neparan.

if a % 2 == 0:
print('Paran je ')
else:
print('Neparan je')
If .. else - PRIMJER 2
provjeri jesu li uitana dva cijela broja jednaka

if a==b:
print('jednaki su')
else:
print('razliciti su')
If .. else - PRIMJER 3

Ako je broj vei od nule izraunaj njegov


drugi korijen, a ako nije ispii poruku
"Nemogue"

if a>0:
korijen=math.sqrt(a)
else:
print('Nemogue')
Zadatak 6

Napiite program koji e za uitani cijeli broj


provjeriti je li djeljiv sa 7.
Zadatak 7

Napiite program koji e unositi dva cijela broja i


zatim od veeg oduzeti manji.
If .. elif viestruko grananje

if uvjet_1:
naredba_1
elif uvjet_2:
naredba_2
elif uvjet_3:
naredba_3
...
Zadatak 8

Napiite program koji e za uitani realan broj x


izraunati y zadan sljedeom formulom:
Zadatak 9

Napiite program koji e unositi temperaturu u


C i ispisivati poruku:
Programske petlje (iteracija)

for
while
petlja unutar petlje
Programska petlja for - primjeri

for i in range(4):
print(i)

for i in range(3,10):
print(i)

for i in range(10,100,7):
print(i)
Zadatak 10

Napiite program koji e unositi neki prirodni broj


i zatim provjeriti je li taj broj prost (prim broj).
Zadatak 10 - rjeenje

n=int(input("Unesi broj - "))


prost=True
for i in range(2,n//2):
if n%i==0:
prost=False
if prost:
print("broj je prost!")
else:
print("broj nije prost")
Zadatak 11 (while)

Napiite program koji e unositi prirodne brojeve


sve dok se ne unese 0, a program e zatim
ispisati koliko ste unijeli parnih a koliko neparnih
brojeva.
Zadatak 12 (while i sluajni brojevi)

Napiite program u kojem e igra pogaati koji


je prirodni broj izmeu 0 i 10 zamislilo raunalo
te ispisati u kojem je pokuaju igra pogodio
broj.
2.4 Potprogrami
(funkcije, programi i moduli)
Ugraene funkcije

min()
max()
pow()

bin()
hex()
oct()
dec()

chr()
ord()
int()
abs()
Moduli

import math uvoz svih funkcija iz modula


from math import sqrt uvoz pojedine funkcije iz
modula

help(math) prikaz svih funkcija u modulu

help('modules') popis svih dostupnih modula


Vlastite funkcije

def ime_funkcije(popis_parametara):
bok_naredbi
return vrijednost
Zadatak 13

Napii program koji e unositi dvije rijei te


pomou posebne funkcije slova() spojiti te dvije
rijei tako da rije s vie slova bude prva.

Primjer:
ULAZ:plavi
suncokret

IZLAZ:suncokret plavi
2.5 Podatkovne zbirke
stringovi, liste, skup, datoteke
Liste
Zadatak 14

Mata je skupio n lubenica za prodaju.


Lubenice tee od 4,5 kg moe prodati za
3Kn/kg, a za manje dobije 1,5 Kn/kg.
Napii program koji e unositi teinu
lubenica u listu te prvo ispisati teinu svih
lubenica a zatim izraunati i ispisati koliko
novaca moe ukupno zaraditi Mata.
Zadatak 14 - primjer
Zadatak 14 - rjeenje
Zadatak 15

Ivica je jedan od sudaca u natjecanju


skijakih skokova. Dobio je zadatak
biljeiti duljinu skokova i na kraju
natjecanja prikazati prva tri najdua
skoka.
Napravite program koji e pomoi Ivici.
Zadatak 15 - primjer
Zadatak 15 - rjeenje
Skup (set)

unija |
presjek &
razlika
simetrina razlika ^
element skupa in
nije element not in
podskup < <=
nadskup > >=
razliito !=
jednako ==
Zadatak 16

Napiite program koji e ispisati sva slova


koja se koriste u nekoj rijei!
Primjer:
anakonda
ankod
Zadatak 17

Ivici i Marici jako je dosadno na proljetnim


praznicima pa su smislili novu igru. Svatko od
njih zapie nazive ivotinja (koliko se god moe
sjetiti) i zatim usporede liste.
Pobjednik igre je onaj igra koji je zapisao vie
ivotinja koje ne postoje kod drugog igraa.
Napii program koji simulira ovu igru!
Datoteke

tekstualne i binarne
open(ime, nain)
r, rb itanje
w, wb pisanje
a dodavanje
naredbe za itanje: read(), readline(), readlines()
naredbe za pisanje: write(), writelines()

naredbe seek() i tell() pozicija unutar datoteke


Primjer

t=open('popis.txt','r')
lista=t.readlines()
print(lista)
t.seek(0)
popis=t.read()
print(popis)
t.seek(0)
red=t.readline()
print(red)
t.close()
Zadatak 18

Napiite program u kojem e korisnik upisivati


cijele brojeve sve dok ne upie 0. Program e
parne brojeve spremati u datoteku parni.txt a
neparne u neparni.txt.
2.6 Osnove raunalne
grafike
kornjaina grafika u Pythonu
Primjer

from turtle import *


from random import randint
title('random krugovi')
reset()
colormode(255)
for i in range(1,1000):
pu()
goto(randint(-200,200),randint(-200,200))
pd()
color(randint(1,255),randint(1,255),randint(1,255))
circle(randint(10,100))
Zadatak 19

U tekstualnoj datoteci zapisane su prosjene


temperature za svaki od 12 mjeseci u godini.
Napiite program koji e podatke iz datoteke
prikazati linijskim grafikonom.
Nastavni program 3. razred
PMG
1. Osnove objektno orijentiranog programiranja
2. Rekurzivni potprogrami
3. Apstraktne strukture podataka
4. Algoritmi sortiranja i kombinatorni algoritmi
5. Kriptografija
6. Rad s grafikim korisnikim sueljem
7. Izrada seminarskog rada
3.1 Osnove objektno
orijentiranog
programiranja
Klasa i objekt
Metode radnje nad klasama

Specijalne metode:
__init__ konstrutor klase
__str__ tekstualni prikaz objekta - print()
__repr__ prikaz objekta kad navedemo samo
ime objekta

Primjer: klasa i objekt uenik
Primjer: Kolekcija objekata - razred
Zadatak 20

Definirajte klasu objekta krug koji e imati


svojstva: polumjer i boja te metode za
raunanje opsega i povrne.
Dodajte mu i metodu crtaj koja e ga
nacrtati na ekranu.
3.2 Rekurzivni
algoritmi
Rekurzivni potprogrami

rekurzija - nain definiranja koncepta,


gdje se tekst definicije poziva na sam
koncept
rekruzivni potprogram potprogram koji
poziva samog sebe
to mora imati svaki rekurzivni
potprogram?
uvjet prekida
vrijednost za koju se potprogram vie nee
rekurzivno pozivati
najmanje jedna vrijednost
svi rekurzivni pozivi moraju zavravati uvjetom
prekida
rekurzivni poziv
poziv potprograma unutar potprograma koji
definiramo
svaki rekurzivni poziv treba biti takav da vodi
prema uvjetu prekida
Kako gledati na rekurzije?
Zadan je problem nekog opsega (n)

Raunalo ne zna rijeiti problem traenog


opsega (n), ali zna rijeiti problem bilo
kojeg drugog opsega (n 1, n 2, n / 2, n +
1, n + 2,)

Problem: pronai vezu izmeu problema


traenog opsega i nekog drugog opsega
Zbroj prvih n prirodnih brojeva

1 + 2 + 3 + 4 + + (n - 1) + n

Raunalo ne zna zbrojiti prvih n prirodnih


brojeva ali zna zbrojiti n-1, n-2, n/2, prirodnih
brojeva.
S (n) = 1 + 2 + 3 + 4 + + (n - 1) + n

S (n) = 1 + 2 + 3 + 4 + + (n - 1) + n

S (n) = S (n - 1) + n
Primjer - najvei zajedniki djelitelj
(mjera) dvaju prirodnih brojeva
Treba odrediti primjerice mjeru prirodnih
brojeva a i b
Raunalo ne zna odrediti mjeru brojeva a
i b ali zna mjeru nekog drugog slinog
para, npr. (a-1, b) (a, b - 1), (a / 2, b),
Trebamo nai vezu izmeu mjere neka
dva slina para prirodnih brojeva i brojeva
aib
Primjer - najvei zajedniki djelitelj
(mjera) dvaju prirodnih brojeva
Euklidov algoritam:
ako su brojevi jednaki, onda je njihova mjera
jedan od brojeva (a ili b)
ako su brojevi razliiti onda je njihova mjera
jednaka mjeri sljedeeg para brojeva:
manji od brojeva a i b
razlika |a-b|

36 16 4 12

20 16 4 8

4 16 4 4
Najvei zajedniki djelitelj (mjera)
dvaju prirodnih brojeva
Uvjet prekida: a = b; mjera je npr. A
Rekurzivna relacija:
mjera (a, b) = mjera (min (a, b), |a - b|)

funkcija mjera (a, b)


{
ako je a = b onda
mjera := a
inae ako je a > b onda
mjera := mjera (a b, b)
inae mjera := mjera (b a, a)
}
Zadatak 21

Problem: Fibonaccijev niz je niz kod kojega su prva dva


elementa jednaka 1, a svaki sljedei element jednak je
zbroju prethodna dva elementa. Napiite program koji
e odrediti vrijednost n-tog elementa Fibonaccijevog
niza.
Primjer: 1, 1, 2, 3, 5, 8, 13, 21,
3.3 Apstraktne
strukture podataka
(stog, red, stablo)
Stog (stack)

Stog je linearna struktura podataka u kojoj se novi


element dodaje na vrh strukture
Prilikom uzimanja elementa, uzima se onaj koji se nalazi
na vrhu strukture (stoga)
LIFO (Last In First Out)
Operacije nad stogom

push(e) dodaje element e na vrh stoga


pop() vraa i brie element s vrha stoga
isEmpty() vraa True ako je stog prazan,
inae vraa False
Zadatak 22

to e ispisati sljedei dio programa?


s = Stack()
s.push('A')
s.push('B')
s.push('C')
print(s.pop())
print(s.pop())
s.push('D')
print(s.pop())
Red (Queue)

Red je linearna struktura podataka u kojoj


elemente dodajemo na jedan kraj (kraj
reda), a uzimamo ih s drugog kraja
(poetka reda)
FIFO (First In First Out) element koji je
prvi uao na red prvi e biti skinut s reda
Operacije

enqueue(e) dodaje element e na kraj


reda
dequeue() uzima i vraa element s
poetka reda
isEmpty() vraa True ako je red prazan,
inae vraa False
Zadatak 23

to e ispisati slijedei dio programa?


r = Queue()
r.enqueue('A')
r.enqueue('B')
r.enqueue('C')
print(r.dequeue())
print(r.dequeue())
r.enqueue('D')
print(r.dequeue())
Stablo (tree)

Za razliku od stoga i reda koji su linearne


strukture, stablo je hijerarhijska struktura
podataka
U takvoj strukturi jedan element ima vie
elemenata koji iz njega slijede
Elemente stabla nazivamo vorovima
Metode obilaska stabla

preorder : korijen lijevo desno


inorder : lijevo korijen desno
postorder : lijevo desno - korijen
Primjer - stablo

class stablo:
def __init__(self, k, l = None, d = None):
self.Korijen = k
self.Lijevo = l
self.Desno = d
return
def preorder(self):
s = self.Korijen
if self.Lijevo != None:
s += self.Lijevo.preorder()
if self.Desno != None:
s += self.Desno.p
return s
Primjer - stablo

f = stablo('F')
e = stablo('E', l = f)
d = stablo('D')
e = stablo('C', l = d, d = e)
d = stablo('B')
s = stablo('A', l = d, d = e)
s.preorder()
3.4 Algoritmi sortiranja
i kombinatorni
algoritmi
Tehnike sortiranja

Sortiranje zamjenom elemenata (exchange sort)


Sortiranje izborom najmanjeg elementa
(selection sort)
Sortiranje zamjenom susjednih elemenata
(bubble sort)
Sortiranje umetanjem (insertation sort)
Sortiranje sjedninjavanjem (merge sort)
Brzo sortiranje po Hoareu (quick sort)
Sortiranje razvrstavanjem u pretince (bucket
sort)
Zadatak
osobe poredati po visini od najnie do
najvie

V[1] V[2] V[3] V[4] V[5] V[6]


O emu ovisi algoritam?

raunalo moe u jednom koraku


usporeivati samo dva broja
usporeujemo po dva susjedna elementa u
nizu
zamjenjujemo im mjesta ako nisu u
dobrom poretku
Prvo ponavljanje - 1. korak

usporeujemo prvu i drugu osobu


nisu u dobrom poretku pa im zamjenjujemo mjesta

V[1] V[2] V[3] V[4] V[5] V[6]


2. korak

usporeujemo drugu i treu osobu

V[1] V[2] V[3] V[4] V[5] V[6]


3. korak

usporeujemo treu i etvrtu osobu

V[1] V[2] V[3] V[4] V[5] V[6]


4. korak

usporeujemo etvrtu i petu osobu

V[1] V[2] V[3] V[4] V[5] V[6]


5. korak

usporeujemo petu i estu osobu

V[1] V[2] V[3] V[4] V[5] V[6]


Rezultat

V[1] V[2] V[3] V[4] V[5] V[6]

na posljednjem je mjestu najvia osoba


Drugo ponavljanje

postupak ponavljamo na rasponu od prve do pete osobe

V[1] V[2] V[3] V[4] V[5] V[6]


Tree ponavljanje

postupak ponavljamo na rasponu od prve do etvrte


osobe

V[1] V[2] V[3] V[4] V[5] V[6]


etvrto ponavljanje

postupak ponavljamo na rasponu od prve do tree osobe

V[1] V[2] V[3] V[4] V[5] V[6]


Peto ponavljanje

usporeujemo prvu i drugu osobu

V[1] V[2] V[3] V[4] V[5] V[6]


Rezultat

osobe su poredane po veliini

V[1] V[2] V[3] V[4] V[5] V[6]


Rjeenje

v=input("Unesi redom visine osoba odvojene razmakom - ")


v=v.split()
v = [eval(x) for x in v]
sortirano=False
ponavljanje=1
while sortirano==False:
sortirano=True
for i in range(1,len(v)-ponavljanje):
if v[i]>v[i+1]:
v[i],v[i+1]=v[i+1],v[i]
sortirano=False
ponavljanje=ponavljanje+1
print(v)
3.5 Kriptografija
Osnovni pojmovi
kriptografija (gr. kryptos = tajan + grapheins
= pisati) bavi se pisanjem "tajnih" poruka
jasni tekst tekst pisan na jeziku sudionika
komunikacije
kriptirani tekst (kriptogram) tekst dobiven
skrivanjem jasnog teksta
kriptiranje (enkripcija) pretvaranje jasnog u
kriptirani tekst
klju kriptiranja pravilo prema kojem se
odvija kriptiranje
dekriptiranje postupak pretvaranja
kriptiranog teksta u jasni tekst
kriptoanaliza pokuaj dobivanja jasnog teksta
iz kriptiranog teksta bez poznavanja kljua
Primjena kriptografije

Internet duani
Internet bankarstvo
zatita video i audio sadraja
medicina
financije

Tradicionalni kriptosustavi

Cezarovo kriptiranje
Kriptiranje s pomakom
Modularna aritmetika
Vigenrovo kriptiranje
Transpozicijsko kriptiranje
Suvremeni kriptosustavi

Data Encryption Standard (DES)


RSA
Modularno potenciranje
Digitalni potpis
Digitalni certifikat
Primjer Cezarovo kriptiranje

def cezar(s):
k =
for t in s:
n = ord(t) - 65
n += 3
n %= 26
n += 65
k += chr(n)
return k

recenica=input("Unesi reenicu koju eli kriptirati - ")


print("Kriptirana reenica - ", cezar(recenica))
3.6 Rad s grafikim
korisnikim sueljem
modul tkinter
Elementi

Prozor
Okvir za ispis teksta
Polje za unos teksta
Gumb
Dijaloki prozori
Okrugli gumb
Kvadratni gumb
Izbornici
ListBox
Primjer: aplikacija za izraun opsega
i povrine pravokutnika
from tkinter import*
t=Tk()
t.title('Pravokutnik')
t.geometry(300x220')
t.mainloop()
Primjer: aplikacija za izraun opsega
i povrine pravokutnika
from tkinter import*
t=Tk()
t.title('Pravokutnik')
t.geometry(300x220')
g=Label(t,text="Opseg i povrina pravokutnika")
g.pack(side=TOP)
texta=Label(t,text='Duljina stranice a =')
texta.place(x=20, y=50)
textb=Label(t,text='Duljina stranice b =')
textb.place(x=20, y=80)
t.mainloop()
Primjer: aplikacija za izraun opsega
i povrine pravokutnika
from tkinter import*
t=Tk()
t.title('Pravokutnik')
t.geometry(300x220')
g=Label(t,text="Opseg i povrina pravokutnika")
g.pack(side=TOP)
texta=Label(t,text='Duljina stranice a =')
texta.place(x=20, y=50)
textb=Label(t,text='Duljina stranice b =')
textb.place(x=20, y=80)

a=Entry(t, width=5)
a.place(x=130, y=50)
b=Entry(t, width=5)
b.place(x=130, y=80)
t.mainloop()
Primjer: aplikacija za izraun opsega
i povrine pravokutnika
from tkinter import*
t=Tk()
t.title('Pravokutnik')
t.geometry(300x220')
g=Label(t,text="Opseg i povrina pravokutnika")
g.pack(side=TOP)

texta=Label(t,text='Duljina stranice a =')


texta.place(x=20, y=50)
textb=Label(t,text='Duljina stranice b =')
textb.place(x=20, y=80)
a=Entry(t, width=5)
a.place(x=130, y=50)
b=Entry(t, width=5)
b.place(x=130, y=80)

gumb = Button(t, text = 'Izraunaj',


command=racunaj)
gumb.place(x=20,y=120)
t.mainloop()
Primjer: aplikacija za izraun opsega
i povrine pravokutnika
def racunaj():
sa=int(a.get())
sb=int(b.get())
o=2*sa+2*sb
p=sa*sb
opseg=Label(t,text="Opseg iznosi "+str(o))
povrsina=Label(t,text="Povrina iznosi "+str(p))
opseg.place(x=20,y=160)
povrsina.place(x=20, y=190)
return
3.7 Izrada seminarskog
rada
Literatura:

Leo Budin, Predrag Broanac, Zlatka Markui, Smiljana


Peri, "Rjeavanje problema u Pythonu", Element,
Zagreb 2014.
Leo Budin, Predrag Broanac, Zlatka Markui, Smiljana
Peri, Napredno rjeavanje problema u Pythonu",
Element, Zagreb 2014.

http://
www.slideshare.net/vesnatomic3/uvod-u-programiranje
-49042363

http://ipaq.petagimnazija.hr/kurikulum-python/

You might also like