You are on page 1of 11

X.

gimnazija Ivan Supek

SAT I KRETANJE KAZALJKI

Seminarski rad

učenik: Ena Hadžović

Zagreb, 18.5.2020.
SADRŽAJ

Sadržaj
SADRŽAJ................................................................................................................................................................2

ZADATAK...............................................................................................................................................................2

PROGRAM..............................................................................................................................................................2

PRIMJER IZVOĐENJA PROGRAMA...............................................................................................................7

ZAKLJUČAK..........................................................................................................................................................7

LITERATURA........................................................................................................................................................7

POPIS SLIKA..........................................................................................................................................................8

ZADATAK
Zadatak je u kornjačinoj grafici u programu Python nacrtati sat te pomoću animacije prikazati
vrtnju kazaljki.

PROGRAM
from turtle import*
from datetime import datetime

#vizualno sam program podjelila na manje djelove kako bi bilo lakše


#shvatiti što se u kojem djelu odvija i kako bi bilo lakše uočiti probleme
# ako do njih dođe

def jump(udaljenost, kut=0):


penup()
right(kut)
forward(udaljenost)
left(kut)
pendown()

2
def hand(lenght, pensize):
fd(lenght*1.15)
rt(90)
fd(pensize/2.0)
lt(120)
fd(pensize)
lt(120)
fd(pensize)
lt(120)
fd(pensize/2.0)

def make_hand_shape(name, lenght, pensize):


reset()
jump(-lenght*0.15)
begin_poly()
hand(lenght, pensize)
end_poly()
hand_form = get_poly()
register_shape(name, hand_form)

def clockface(radius):
reset()
pensize(7)
for i in range(60):
jump(radius)
if i % 5 == 0:
fd(25)
jump(-radius-25)

3
else:
dot(3)
jump(-radius)
rt(6)

# odredila sam izgled okvira sata i podjelila ga na manje djelove za minute (60 djelova)
# svaki 5. je bio za sat

def setup():
global second_hand, minute_hand, hour_hand, writer
mode("logo")
make_hand_shape("second_hand", 125, 25)
make_hand_shape("minute_hand", 130, 25)
make_hand_shape("hour_hand", 90, 25)
clockface(160)
second_hand = Turtle()
second_hand.shape("second_hand")
second_hand.color("gray20", "gray80")
minute_hand = Turtle()
minute_hand.shape("minute_hand")
minute_hand.color("blue", "pink")
hour_hand = Turtle()
hour_hand.shape("hour_hand")
hour_hand.color("blue", "magenta")
for hand in second_hand, minute_hand, hour_hand:
hand.resizemode("user")
hand.shapesize(1, 1, 3)
hand.speed(0)
ht()
writer = Turtle()

4
writer.ht()
writer.pu()
writer.bk(85)

# odredila sam izgled kazaljki (debljina, boja, duljina)

def dan(t):
dan = ["Ponedjeljak", "Utorak", "Srijeda",
"Četvrtak", "Petak", "Subota", "Nedjelja"]
return dan[t.weekday()]

def datum(z):
month = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June",
"July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."]
j = z.year
m = month[z.month - 1]
t = z.day
return "%s %d %d" % (m, t, j)

def tick():
t = datetime.today()
second = t.second + t.microsecond*0.000001
minute = t.minute + second/60.0
hour = t.hour + minute/60.0
try:
tracer(False)
writer.clear()
writer.home()
writer.forward(65)

5
writer.write(dan(t),
align="center", font=("Courier", 14, "bold"))
writer.back(150)
writer.write(datum(t),
align="center", font=("Courier", 14, "bold"))
writer.forward(85)
tracer(True)
second_hand.setheading(6*second)
minute_hand.setheading(6*minute)
hour_hand.setheading(30*hour)
tracer(True)
ontimer(tick, 100)
except Terminator:
pass
# from datetime :odredeni su dani i danasnji datum te vrijeme prema kojem se kazaljke vrte

def main():
tracer(False)
setup()
tracer(True)
tick()
return "EVENTLOOP"

if __name__ == "__main__":
mode("logo")
msg = main()
print(msg)
mainloop()
# ovako je mogućeno "necrtanje" već prikazivanje sata koji je već nacrtan

6
PRIMJER IZVOĐENJA PROGRAMA

Slika 1 Ovaj program prikazuje analogni sat kojem se okreću kazaljke i pokazuju današnje vrijeme i današnji datum i dan u
tjednu

Ovaj program prikazuje analogni sat kojem se okreću kazaljke i pokazuju današnje vrijeme i
današnji datum i dan u tjednu.

ZAKLJUČAK
Za ovaj sam, iako isprva lagan zadatak, morala se pomagati internetom i mnogim stranicama
kako bi si pojednostavila zapis i olakšala rješavanje problema. Najveći je problem bio pri
samoj animaciji kazaljki koje se vrte.

LITERATURA
https://docs.python.org/2/library/datetime.html
https://docs.python.org/3/library/datetime.html
https://docs.scipy.org/doc/numpy/reference/generated/numpy.poly.html
https://www.geeksforgeeks.org/numpy-poly-in-python/
https://www.programcreek.com/python/example/57311/numpy.poly
http://code.activestate.com/recipes/578875-analog-clock/
https://www.linuxzasve.com/serijal-tekstova-zajedno-naucimo-python-8-dio-funkcije
https://www.srce.unizg.hr/files/srce/docs/edu/osnovni-tecajevi/d450_polaznik.pdf
https://bib.irb.hr/datoteka/884671.foi-programiranje-u-pythonu.pdf
https://pcchip.hr/helpdesk/mala-skola-programiranja-python-funkcije/
https://pythonosnoveblog.wordpress.com/funkcije/

7
https://lab.miletic.net/hr/nastava/materijali/python-funkcije-klase/
https://etno.ffzg.unizg.hr/wp-content/uploads/2013/11/Upute-za-pisanje-seminarskog-rada.pdf

POPIS SLIKA
Slika 1 Ovaj program prikazuje analogni sat kojem se okreću kazaljke i pokazuju današnje
vrijeme i današnji datum i dan u tjednu......................................................................................7

8
9
10
11

You might also like