Uputstvo: • Rješenja zadataka napišite u Python modulima. Iz IDLE shell-a, novi modul možete napraviti tako što ćete iz menija File izabrati opciju ``New window''. Kad završite program, snimite ga sa ekstenzijom .py (npr. min.py, max.py itd) i pokrenite izborom opcije ``Run module'' iz menija ``Run'' (meni se nalazi u prozoru u kojem pišete modul, ne u shell-u. • Za većinu ovih programa najteži dio rješavanja je nalaženje ispravnog postupka za rješenje (tj. algoritma). Vaš uspjeh ili neuspjeh na ispitu zavisiće uglavnom od vaše sposobnosti da smislite ispravan algoritam. Primjeri koji su zadani u zadacima služe samo da se ukratko ilustruje namjena programa ili funkcije, pa su i veoma kratki. Za funkcije koje su generalne namjene (kao što su npr. funkcije iz prvog zadatka) često vam za nalaženje ispravnog algoritma može biti od pomoći da razmislite kako biste riješili jako veliki primjer. Npr. zamislite da morate naći najveći element iz liste od 5000 elemenata. Jako veliki primjeri vas često mogu natjerati da napišete precizan opis rješenja, koji se onda lako može prevesti u Python (ili bilo koji drugi programski jezik). • Zadaci nisu organizovani ni po težini ni po oblastima. Zli jezici bi mogli reći da su totalni dezorganizovani. 1. Napišite svoje varijante ugrađenih Python funkcija: • moj min • moj max • moj sum Funkcije treba da se ponašaju identično kao i odgovarajuće ugrađene funkcije (dakle moj min kao min itd). Primjer izvršavanja: >>> moj min ( [ 1 , 2 , 3 , 4 , 5 ] ) 1 >>> moj max ( [ 1 , 2 , 3 , 4 , 5 ] ) 5 >>> moj sum ( [ 1 , 2 , 3 , 4 , 5 ] ) 15 >>> 2. Kao što znate, svaka kvadratna jednačina se može predstaviti u obliku: ax2 + bx + c = 0 Tj. za opis jednačine dovoljno je poznavati njena tri koeficijenta a, b, i c. Osim toga, svaka ova jednačina ima dva rješenja (tzv. korijeni jednačine). Napraviti funkciju korijeni, koja, za zadane koeficijente, vraća par rješenja zadane jednačine. Uputstvo: jednačina nema uvijek realna rješenja. Funkcija sqrt ne može da nađe kvadratni korijen negativnog broja, pa ćete morati da smislite nešto sa kompleksnim brojevima. 3. Napisati funkciju satro koja zadanu rečenice vraća ispisanu u šatrovačkom žargonu. Rečenicu možete ``šatrovati'' tako što svaku riječ iz rečenice obrnete na pola (drugu polovinu stavite na početak, a prvu polovinu na kraj). U tu svrhu, prvo napravite funkciju satro rijec koja ``šatruje'' jednu riječ. Podsjetimo se, rečenicu možete razbiti na listu riječi koristeći metodu .split() stringa: >>> "Radis nesto tesko".split() ['Radis', 'nesto', 'tesko'] 1 S druge strane, da spojite listu riječi tako što ćete između riječi ubaciti neki string, možete iskoristiti metodu .join() stringa: >>> '-'.join(['Lista', 'nekih', 'stringova']) 'Lista-nekih-stringova' >>> ' '.join(['Lista', 'nekih', 'stringova']) 'Lista nekih stringova' Metode join i split će vam biti potrebne u funkciji satro). Kada napišete pomenute funkcije, napišite i ostatak programa. Od korisnika tražite da unese neku rečenicu (zbog jednostavnosti pretpostavite da se ona sastoji samo od riječi i razmaka, dakle bez interpunkcijskih znakova), a zatim je ispišite ``šatrovanu''. Unesi recenicu: Radis nesto komplikovano Disra stone kovanokompli 4. Napisati program koji korisniku prvo prikazuje meni u menzi, zatim od njega traži da unese broj željene narudžbe, a zatim štampa odgovarajuću akciju ili štampa poruku o grešci ukoliko korisnikov izbor nije ispravan. Primjer izvršavanja: 1. Supa i salata 2. Spageti bolonjez 3. Kuvarov specijalitet Koji broj zelite da narucite? 2 Vasa narudzba "Spageti bolonjez" stize! Još jedan primjer: 1. Supa i salata 2. Spageti bolonjez 3. Kuvarov specijalitet Koji broj zelite da narucite? 5 Zao mi je, neispravna narudzba! Napomena: meni se prikazuje samo jednom, dakle nema potrebe da koristite petlje. 5. Jedna bitna operacija u kompjuterskim naukama je tzv. operacija heširanja. Operacija heširanja kao argument uzme neki tekst, a zatim ga nekako konvertuje u broj. Ova operacija ima veoma veliku primjenu u više oblasti, od kojih je jedna kriptografija. Druga stvar koju ćemu da iskoristimo je modulo operator (%). Već znate šta ovaj operator radi računa ostatak pri dijeljenju. Ovaj operator je koristan jer je za razliku od većine drugih matematičkih operatora ``jednosmjeran''. Pod tim podrazumijevamo da mogu da vam kažem da sam zamislio broj x, i da x % 5 daje rezultat 3, ali da vam ova informacija nije dovoljna da saznate x (x bi moglo biti 3, ili 8, ili 13, ili...). U ovom zadatku, pokušaćete da napravite ekran za prijavljivanje na sistem. Korisnik će morati da unese ispravnu lozinku da bi mogao da vidi tajnu poruku. Daćemo korisniku tri šanse da unese ispravnu lozinku, a zatim odštampati ili tajnu poruku ili poruku o neuspjehu (nakon 3 promašena pokušaja od strane korisnika). Prvo, definišite funkcije kriptuj koja uzima jedan parametar tipa string. Funkcija treba da hešira string koristeći ugrađenu Python funkciju hash (u interpreteru možete da isprobate kako ova 2 funkcija radi) i zatim naći ostatak dobijene vrijednosti pri dijeljenju sa nekim prostim brojem (npr. brojem 541 - ovaj broj je veoma mali za ozbiljnu kriptografiju, ali je za naš primjer dovoljno dobar). Funkcija zatim treba da vrati izračunati broj. Npr. kriptuj("mojasif ra") treba da vrati rezultat 40 (ako koristite 541 kao prost broj). Na početku datoteke, definišite promjenjivu KLJU C koja ce biti rezultat izvršavanja funkcije kriptuj sa željenom lozinkom (npr. ukoliko stavite lozinku ``mojasifra'', stavite KLJU C = 40). Sad napišite ostatak programa. Svaki put kada pitate korisnika za lozinku. Ukoliko se vrijednosti poklapaju, korisnik je (najvjerovatnije) unio ispravnu lozinku. 6. Mnoge kompjuterske igre u pozadini imaju kompleksne programe za simuliranje fizike (tzv. fizičke ``engine''). Jedna od osnovnih funkcija ovih programa je da provjere da li se neka dva objekta sudaraju ili ne. Objekti čudnih oblika se često aproksimiraju pomoću lopti. U ovom programu, pokušaćemo da ustanovimo da li se dvije lopte sudaraju ili ne. Da bismo malo pojednostavili stvari, radićemo u dvije dimenzije (mada je postupak za 3D veoma sličan). Da bismo odredili da li se dvije lopte sudaraju, jedine informacije koje su nam bitne su pozicija lopte u prostoru i njezina veličina. Poziciju možemo zapamtiti tako što ćemo zapamtiti x i y koordinate centra lopte, a veličinu tako što ćemo zapamtiti poluprečnik lopte. Dakle lopta je uređena trojka (x, y, r). Da bismo ustanovili da li se dvije lopte sudaraju, moramo da sračunamo udaljenost između njihovih centara, a zatim da provjerimo da li je ona manja od sume njihovih poluprečnika. Ako jeste, onda se sudaraju. Napisati funkciju koja uzima dvije kugle i računa da li se sudaraju ili ne. Zatim pozovite funkciju sa dva različita para lopti. Prvi par treba da budu lopte (0, 0, 1) i (3, 3, 1); rezultat bi trebalo da bude da se ne sudaraju. Drugi par su lopte (5, 5, 2) i (2, 8, 3); one se sudaraju. 7. Ovaj zadatak je dio specijalnog novogodišnjeg izdanja predmeta ``Uvod u računarstvo 1''. Cilj je da napišete funkciju bor, koja pomoću zvjezdica crta stablo bora. Funkcija treba da uzme jedan argument, koji predstavlja broj ``segmenata'' koje stablo treba da ima. Kako kaže stara kineska poslovica, slika vrijedi 1000 riječi. >>> bor(1) * *** ***** >>> bor(2) * *** ***** *** ***** ******* >>> bor(3) * *** ***** *** ***** ******* ***** ******* ********* >>> bor(4) 3 * *** ***** *** ***** ******* ***** ******* ********* ******* ********* *********** Ako biste ovaj zadatak čitali u zbirci, vjerovatno bi bio označen - zvjezdicom... 4
© Copyright 2024 Paperzz