|
26.02.2015., 23:26 | #32 |
Premium
Datum registracije: Oct 2006
Lokacija: Dubrovnik
Postovi: 2,576
|
Simple: computepay je funkcija koja prima dva argumenta (h i r) odnosno ante i mate ili kako god hoćeš ih možeš nazvati. Kada se program izvršava, najprije se izvršava try pa se zatim poziva computepay funkcija čiji se rezultat sprema u varijablu pay te sa print pay ispisiva taj rezultat. Ukratko, kada poziva funkciju predaje argumente hours i rate koji su neka realna brojčana vrijednost. Ti argumenti se pri pozivu funkcije kopiraju u varijable h i r (moglo ih se isto nazvati hours i rate ali vjerojatno namjerno nije kako ne bi mislio da radiš direktno sa donjim varijablama već njihovim kopijama). Ovisno o tome je li h <= 40 rade se zadane operacije a rezultat se sprema u varijablu p. Tu varijablu, odnosno njenu vrijednost moramo zapamtiti prilikom izvršenja funkcije. Za taj dio je zaslužan return p koji kod poziva pay = computepay(hours, rate) ima ulogu da u varijablu pay spremi vrijednost varijable p iz funkcije. Nadam se da nisam zakompliciro s odgovorom to bi izgledalo ovako na primjeru: ukoliko za Enter hours unesemo 5.5 a za Enter rate unesemo 3.5 onda pozivamo funkciju computepay koja bi izgledala computepay(5.5, 3.5). Ulaskom u funkciju varijabla h iznosi 5.5 a varijabla r 3.5. Iizvršava se if uvjet jer h nije veći od 40 pa je rezultat 19.25 i taj rezultat se sprema u varijablu p. Else dio se preskače i funkcija vraća vrijednost 19.25 te se ta vrijednost sprema u varijablu pay jer smo tako rekli pri pozivu funkcije (pay = computepay(...)). Kada isprintamo varijablu p (print p) vidit ćemo da je rezultat 19.25. Zadnje izmijenjeno od: Bullet1. 26.02.2015. u 23:34. |
|
|
Oglas
|
|
26.02.2015., 23:32 | #33 | |
Buying Bitcoin
Datum registracije: Feb 2007
Lokacija: Croatia
Postovi: 7,976
|
Citiraj:
|
|
27.02.2015., 00:17 | #34 |
Premium
Datum registracije: May 2012
Lokacija: Zagreb
Postovi: 848
|
Predzadnji red, kad poziva funkciju compute, prenosi parametre hours i rate a u prvom redu ih ta funkcija kopira u h i r. U predzadnjem redu ti ito tako pise pay=... A vracas p, ona vrijedbost koju vracas ce se spremiti u pay. |
27.02.2015., 04:24 | #35 |
Premium
Datum registracije: Oct 2006
Lokacija: Dubrovnik
Postovi: 2,576
|
Samo treba shvatiti da h i hours nisu iste varijable već je h kopija od hours. Dakle ako ti imaš varijablu imena Neo-ST koju šalješ funkciji, nije uopće bitno kako će se ona u funkciji zvati. Može se zvati isto Neo-ST a može Bullet, Pero a, z, žnj itd. funkcija ima oblik: funkcija (a, b) { ...tijelo funkcije... } a u main programu ti tu funkciju pozivaš funkcija(Neo-ST, Bullet) gdje argumenti koje predaješ odgovaraju tipu varijable koja funkcija prima. Neznam kako bi ti pobliže objasnio od ovako: Dakle, computepay gledaj kao funkciju i nema apsolutno nikakve veze što je ona napisana prije try. Try se nalazi u main dijelu programa i služi kako bi ti dao vrijednost nekoj varijabli. Imaš jabuku i trebaš joj dati vrijednost da znaš koliko ona košta. Ako si definirao da jabuka košta 2kn možeš ju zapisati kao jabuka = 2. S druge strane imaš krušku koja košta 3kn i definiraš varijablu kruška = 3. Sada imaš dvije opcije za izračun koliko jedna jabuka i jedna kruška skupa koštaju. Prva opcija je da u main programu samo nastaviš pisati nešto poput: suma = jabuka + kruška ; što znači da je suma = 2 + 3 odnosno suma = 5; ili napraviš funkciju koja se zove suma te prima parametre artikl1 i artikl2. Takav zapis funkcije izgleda suma(artikl1, artikl2). Ti od te funkcije tražiš da ti napravi sumu dvaju artikala i da ti vrati rezultat. Nebitno je jesu li u pitanju kruške i jabuke ili šljive i smokve, ista je matematika. Dakle, definirao si u glavnom programu da je: jabuka = 2; kruška = 3; i sada želiš primjeniti funkciju koja će zbrojiti vrijednosti krušaka i jabuka. To ćeš napraviti jednostavnim pozivom funkcije suma(jabuka, kruška) i spremit ćeš povratnu vrijednost u neku varijablu kako bi tu sumu mogao koristiti dalje u programu ili ju samo ispisati. Da ne filozofiram dalje, napisat ću ti jednostavniji primjer od toga što imaš zadano pa možda shvatiš. Code:
//ovo je funkcija koju pozivaš iz main programa def suma(artikl1, artikl2): rezultat = artikl1 + artikl2; return rezultat; //ovo je main program jabuka = 2; kruška = 3; šljiva = 5; smokva = 1; //funkcija sprema rezultat (5) u varijablu trošak1 trošak1 = suma(jabuka, kruška); //ispisivamo vrijednost varijable trošak1 odnosno broj 5 print trošak1; //funkcija sprema rezultat (6) u varijablu trošak2 trošak2 = suma(šljiva, smokva); //ispisivamo vrijednost varijable trošak2 odnosno broj 6 print trošak2; //funkcija sprema rezultat (11) u varijablu ukupan_trošak ukupan_trošak = suma(trošak1, trošak2); //ispisivamo vrijednost varijable ukupan_trošak odnosno broj 11 print ukupan_trošak; Jabuka se preslikala u artikl1 Kruška se preslikala u artikl2 Šljiva se preslikala u artikl1 Smokva se preslikala u artikl2 Trošak1 se preslikao u artikl1 Trošak2 se preslikao u artikl2 Već su neke ure i neznam kako da ti bolje objasnim, sorry... |
27.02.2015., 09:02 | #36 |
Premium
Datum registracije: Jan 2013
Lokacija: Zagreb
Postovi: 863
|
Ako sam dobro shvatio, funkcija je zadana sa svojim varijablama. Kad definiramo sumu, unutar sume su elementi funkcije i nije bitno sto napisemo jer kad napisemo tu funkciju program zna o kojoj je funkciji rijec i automatski za artikl1 stavlja jabuku, za artikl2 stavlja krusku...odnosno u primjeru sa slike za hours stavlja h a za rate r Jesam dobro shvatio? |
27.02.2015., 11:26 | #37 |
Registered User
Datum registracije: Jan 2015
Lokacija: Zagreb
Postovi: 695
|
Tako je. Ono što funkcija radi je definirano u tijelu funkcije, a s kojim vrijednostima će to nešto raditi zadaje se pomoću argumenata. Tijelo funkcije je sve ono što ide ispod def ime_funkcije(arg1, arg2, arg3), pri čemu su arg1, arg2 i arg3 argumenti. Osim toga što se "razbijanjem" koda na funkcije dobiva na čitljivosti te lakšem pronalaženju i popravljanju grešaka, jedna od glavnih svrha njihovog korištenja je tzv. reusability, tj. ista funkcija može se koristiti u različitim programima i za potpuno različite stvari. Bullet1 je naveo kao primjer funkciju suma i s njom je zbrajao cijene voća. Ista ta funkcija može se kasnije u nekom drugom programu koristiti npr. za zbrajanje kilometara od Zagreba do Rijeke i od Rijeke do Splita. Naravno, ako će je se koristiti za zbrajanje kilometara, bilo bi primjerenije da se artikl1 i artikl2 preimenuju u nešto poput kilometri1 i kilometri2 jer bi bilo lakše za razumijeti u okviru tog programa, pa bi to izgledalo ovako: Code:
def suma(kilometri1, kilometri2): rezultat = kilometri1 + kilometri2 return rezultat # Cestovne udaljenosti izmedu gradova su sljedece: zagreb_rijeka = 170 rijeka_split = 360 ''' Koliko cu kilometara prijeci ako krenem iz Zagreba, prespavam u Rijeci i nastavim dalje prema Splitu? ''' udaljenost = suma(zagreb_rijeka, rijeka_split) print udaljenost Code:
def suma(artikl1, artikl2): rezultat = artikl1 + artikl2 return rezultat # Cestovne udaljenosti izmedu gradova su sljedece: jabuka = 170 kruska = 360 ''' Koliko cu kilometara prijeci ako krenem iz Zagreba, prespavam u Rijeci i nastavim dalje prema Splitu? ''' trosak = suma(jabuka, kruska) print trosak Zadnje izmijenjeno od: KhongLo. 27.02.2015. u 11:34. |
27.02.2015., 12:28 | #39 |
Registered User
Datum registracije: Jan 2015
Lokacija: Zagreb
Postovi: 695
|
Kad sam se već dotaknuo lakšeg modificiranja programa i debugginga dat ću još jedan primjer zašto treba koristiti funkcije. Kad sam se prvi put u susreo s programiranjem, korištenje funkcija (i klasa) mi se činilo sasvim bezveze i razmišljao sam u stilu: Ma to je za pi***, ja cijeli kod napišem u komadu i ako je krajnji rezultat točan, onda sam miran, no vrlo brzo sam shvatio da je taj način razmišljanja kriv. Primjer: Web shop koji prodaje računalne komponente daje 10% popusta za gotovinsko plaćanje. Kod koji određuje cijenu koju će kupac platiti izgleda ovako: Code:
def konacna_cijena(cijena_komponente, nacin_placanja): # 10% = 0.1 popust = 0.1 if nacin_placanja is 'gotovina': return cijena_komponente - popust*cijena_komponente else: return cijena_komponente # Kupac nazove i pita za cijenu AMD FX 8320 procesora, a trgovac mu odgovara: cijena_procesora = 1200 cijena_gotovina = konacna_cijena(cijena_procesora, 'gotovina') print('Za placanje gotovinom to ce vas kostati', cijena_gotovina, 'kn,') cijena_rate = konacna_cijena(cijena_procesora, 'rate') print('a ako placate na rate, onda je cijena', cijena_rate, 'kn.') Kada bi kod bio napisan tako da se za svaku komponentu konačna cijena računa zasebno kao što je to dano u primjeru ispod, tada bi promjena iz 10 u 9% zahtijevala malo više vremena, a mogućnost da se nešto propusti promijeniti ili napravi krivo je daleko veća. Code:
def cijena_procesora(cijena_cpu, nacin_placanja): popust = 0.1 if nacin_placanja is 'gotovina': return cijena_cpu - popust*cijena_cpu else: return cijena_cpu def cijena_grafe(cijena_gpu, nacin_placanja): popust = 0.1 if nacin_placanja is 'gotovina': return cijena_gpu - popust*cijena_gpu else: return cijena_gpu def cijena_memorije(cijena_ram, nacin_placanja): popust = 0.1 if nacin_placanja is 'gotovina': return cijena_ram - popust*cijena_ram else: return cijena_ram Doduše, programe koji imaju veze s poslovanjem trgovine bilo bi bolje pisati objektno orijentirano, ali sada smo na funkcijama, pa sam onda korištenje klasa izostavio. |
27.02.2015., 21:28 | #40 |
only fool, not a horse
Datum registracije: Apr 2008
Lokacija: near zgb
Postovi: 1,276
|
ups. nevidjeh čitavu drugu stranu teme.. Zadnje izmijenjeno od: rodney. 27.02.2015. u 21:56. |
|
|
Oglas
|
|
27.02.2015., 21:55 | #41 |
Buying Bitcoin
Datum registracije: Feb 2007
Lokacija: Croatia
Postovi: 7,976
|
Znači mene je bunilo kako on zna da se hours mora kopirat u h, a rate u r. Odgovor je: bitan je redoslijed unosa ? Znači ako imam: Code:
def suma(artikl1, artikl2): rezultat = artikl1 + artikl2 return rezultat jabuka = 170 kruska = 360 trosak = suma(jabuka, kruska) print trosak To mi se čini malo nezgrapno, šta kad programi postanu kompleksni, ko će više povezati gdje se koja vrijednost kopira |
27.02.2015., 21:58 | #42 |
only fool, not a horse
Datum registracije: Apr 2008
Lokacija: near zgb
Postovi: 1,276
|
Sve mi se pomješalo sad u ovoj temi.. Da redosljed je bitan. |
27.02.2015., 22:07 | #43 |
Registered User
Datum registracije: Jan 2015
Lokacija: Zagreb
Postovi: 695
|
Upravo iz tog razloga nikada nećeš naići na preporuku da vidiš zadatak, otvoriš text editor i kreneš s nakucavanjem koda, već da prije nego i takneš tipkovnicu imaš posloženo što i kako ćeš raditi (npr. pseudokod ili dijagrami toka). |
27.02.2015., 22:14 | #44 |
Creeper
Datum registracije: May 2013
Lokacija: USS Enterprise (NCC-1701-B)
Postovi: 2,178
|
A koliko je teško/jednostavno kod prebaciti u .exe da bi se mogao izvršavati na drugom računalu?
__________________
If the only thing keeping a person decent is the expectation of divine reward then, brother, that person is a piece of sh*t |
27.02.2015., 22:34 | #45 |
Buying Bitcoin
|