Forumi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 26.02.2015., 23:23   #31
L31
Premium
Moj komp
 
Datum registracije: Jan 2013
Lokacija: Zagreb
Postovi: 863
Ne bih ti znao pomoci, tek sam na pocetku prvog predavanja one gospodjice iz prvog posta.
L31 je offline   Reply With Quote
Staro 26.02.2015., 23:26   #32
Bullet1
Premium
Moj komp
 
Bullet1's Avatar
 
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.
Bullet1 je offline   Reply With Quote
Staro 26.02.2015., 23:32   #33
Neo-ST
Buying Bitcoin
Moj komp
 
Neo-ST's Avatar
 
Datum registracije: Feb 2007
Lokacija: Croatia
Postovi: 7,976
Citiraj:
Autor Bullet1 Pregled postova
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).
Dobro, ali kako je on povezao hours sa h, rate sa r i pay sa p ?
Neo-ST je offline   Reply With Quote
Staro 27.02.2015., 00:17   #34
Princ288
Premium
Moj komp
 
Princ288's Avatar
 
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.
Princ288 je offline   Reply With Quote
Staro 27.02.2015., 04:24   #35
Bullet1
Premium
Moj komp
 
Bullet1's Avatar
 
Datum registracije: Oct 2006
Lokacija: Dubrovnik
Postovi: 2,576
Citiraj:
Autor Neo-ST Pregled postova
Dobro, ali kako je on povezao hours sa h, rate sa r i pay sa p ?
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;
Vidimo da smo funkciju suma upotrijebili 3 puta za različite proizvode. To je moguće zato jer se svaki puta kada pozovemo funkciju suma, oni argumenti koje smo predali u main programu preslikaju/kopiraju u one argumente koje funkcija prima.

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...
Bullet1 je offline   Reply With Quote
Staro 27.02.2015., 09:02   #36
L31
Premium
Moj komp
 
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?
L31 je offline   Reply With Quote
Staro 27.02.2015., 11:26   #37
KhongLo
Registered User
Moj komp
 
KhongLo's Avatar
 
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
Isti taj program mogao se napisati i bez da se išta u Bulletovom kodu mijenja, osim vrijednosti varijabli, samo je manje čitljivo i može biti zbunjujuće za onoga tko će čitati taj kod:
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
Oba programa bi na ekran trebala ispisati 530.

Zadnje izmijenjeno od: KhongLo. 27.02.2015. u 11:34.
KhongLo je offline   Reply With Quote
Staro 27.02.2015., 11:46   #38
L31
Premium
Moj komp
 
Datum registracije: Jan 2013
Lokacija: Zagreb
Postovi: 863
Kad se dobro objasni, izgleda vrlo jednostavno
L31 je offline   Reply With Quote
Staro 27.02.2015., 12:28   #39
KhongLo
Registered User
Moj komp
 
KhongLo's Avatar
 
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.')
Ako iz bilo kojeg razloga vlasnik web shopa odluči da je bolje da popust za gotovinsko placanja bude 9%, jedina stvar koju će trebati promijeniti jest umjesto popust = 0.1 napisati popust = 0.09.

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
Dakle, ovako se ne pisu programi!

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.
KhongLo je offline   Reply With Quote
Staro 27.02.2015., 21:28   #40
rodney
only fool, not a horse
Moj komp
 
rodney's Avatar
 
Datum registracije: Apr 2008
Lokacija: near zgb
Postovi: 1,276
ups. nevidjeh čitavu drugu stranu teme..
__________________
"I intend to live forever. So far, so good."

job security - example

Zadnje izmijenjeno od: rodney. 27.02.2015. u 21:56.
rodney je offline   Reply With Quote
Staro 27.02.2015., 21:55   #41
Neo-ST
Buying Bitcoin
Moj komp
 
Neo-ST's Avatar
 
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
on će uvijek jabuku kopirat u artikl1, a krusku u artikl2 ?
To mi se čini malo nezgrapno, šta kad programi postanu kompleksni, ko će više povezati gdje se koja vrijednost kopira
Neo-ST je offline   Reply With Quote
Staro 27.02.2015., 21:58   #42
rodney
only fool, not a horse
Moj komp
 
rodney's Avatar
 
Datum registracije: Apr 2008
Lokacija: near zgb
Postovi: 1,276
Sve mi se pomješalo sad u ovoj temi..
Da redosljed je bitan.
__________________
"I intend to live forever. So far, so good."

job security - example
rodney je offline   Reply With Quote
Staro 27.02.2015., 22:07   #43
KhongLo
Registered User
Moj komp
 
KhongLo's Avatar
 
Datum registracije: Jan 2015
Lokacija: Zagreb
Postovi: 695
Citiraj:
Autor Neo-ST Pregled postova
To mi se čini malo nezgrapno, šta kad programi postanu kompleksni, ko će više povezati gdje se koja vrijednost kopira
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).
KhongLo je offline   Reply With Quote
Staro 27.02.2015., 22:14   #44
partwish
Creeper
Moj komp
 
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
partwish je offline   Reply With Quote
Staro 27.02.2015., 22:34   #45
Neo-ST
Buying Bitcoin
Moj komp
 
Neo-ST's Avatar
 
Datum registracije: Feb 2007
Lokacija: Croatia
Postovi: 7,976