Test rešavanje zadataka - alas.matf.bg.ac.rsmi08005/test/seminarskiVIS.pdf · Univerzitet u...

18
Univerzitet u Beogradu Matematički fakultet Seminarski rad iz Verovatnoće i statistike Test rešavanje zadataka Tačkaste ocene parametra raspodele student: Martin Hofer profesor: Vesna Jevremović broj indeksa: 5/2008 adresa aplikacije: http://www.alas.matf.bg.ac.rs/~mi08005/test/index.html

Transcript of Test rešavanje zadataka - alas.matf.bg.ac.rsmi08005/test/seminarskiVIS.pdf · Univerzitet u...

Univerzitet u Beogradu

Matematički fakultet

Seminarski rad iz

Verovatnoće i statistike

Test rešavanje zadataka

Tačkaste ocene parametra

raspodele

student: Martin Hofer profesor: Vesna Jevremović

broj indeksa: 5/2008

adresa aplikacije: http://www.alas.matf.bg.ac.rs/~mi08005/test/index.html

2

Sadržaj

Teorijski deo ...................................................................................................................................... 3

Tačkaste ocene parametra raspodele ................................................................................................. 3

Nepristrasnost, postojanost i efikasnost ........................................................................................ 3

Osobine uzoračke sredine i uzoračke disperzije za obeležje sa normalnom raspodelom ................ 5

Metoda maksimalne verodostojnosti ............................................................................................. 5

Metoda momenta .......................................................................................................................... 7

Uputstvo ............................................................................................................................................. 8

Kako program radi? .......................................................................................................................... 9

Kôd programa .................................................................................................................................. 10

3

Teorijski deo

Tačkaste ocene parametra raspodele

Na osnovu uzorka treba da se odredi kakva je raspodela obeležja na populaciji. Ako se zna tip

rapodele obeležja, odrediti njene parametre, ako se ne zna raspodela obeležja, odrediti je. Neka je dat 𝑋1,𝑋2,… ,𝑋𝑛 prost slučajan uzorak obima n za posmatrano obeležje X. Statistika

𝑌 = 𝑓 𝑋1 ,𝑋2 ,… ,𝑋𝑛 je slučajna promenljiva koja implicitno zavisi od parametara u raspodeli obeležja

X. Ako se sa Y ocenjuje parametar 𝜃, tada se statistika Y naziva ocena parametra 𝜃 i označava sa 𝜃 .

Nepoznati parametri raspodele posmatranog obeležja se ocenjuju na osnovu uzorka, kao i

realizovane vrednosti pogodno odabranih statistika. Taj postupak se naziva ocenjivanje parametara.

Pošto je realizovana vrednost statistike neki realni broj, tj. neka tačka na realnoj pravoj, ovakve ocene

parametara se nazivaju tačkaste ocene.

Nepristrasnost, postojanost i efikasnost

Definicija 1. Nepristrasna ocena

Neka je 𝑋1,𝑋2,… ,𝑋𝑛 prost slučajan uzorak obima n za obeležje X i neka je 𝜃 nepoznati

parametar u raspodeli obeležja X. Statistika 𝑌 = 𝑓 𝑋1,𝑋2 ,… ,𝑋𝑛 je nepristrasna ocena parametra 𝜃,

ako je: 𝐸 𝑌 = 𝜃.

Ako statistika 𝑌 = 𝑓 𝑋1,𝑋2,… ,𝑋𝑛 kojom se ocenjuje neki parametar 𝜃 postaje nepristrasna u

slučaju kada ovim uzorka teži beskonačnosti, tj. ako je𝐸(𝑌) → 𝜃, 𝑛 → ∞, tada je statistika Y

asimptotski nepristrasna ocena posmatranog parametra 𝜃. Ocena 𝜃 parametra 𝜃 koja nema osobinu

nepristrasnosti se naziva pristrasna ocena. Veličina njene pristrasnosti se meri razlikom

𝐸 𝜃 − 𝜃.

Za realizovani uzorak (𝑥1,𝑥2,… , 𝑥𝑛) se računa realizovana vrednost statistike Y, tj. računa se

𝑦 = 𝑓 𝑋1,𝑋2,… ,𝑋𝑛 . S obzirom da je Y slučajna veličina, ta realizovana vrednost će u izvesnoj meri

odstupati od 𝐸 𝑌 . Poželjno je da se to odstupanje smanjuje kako se povećava obim uzorka. Stoga se, u

kategoriji nepristrasnih ocena, izdvajaju one koje imaju tzv. postojanost(stabilnost).

4

Definicija 2. Postojana ocena

Neka je dat prost slučajni uzorak 𝑋1,𝑋2,… ,𝑋𝑛 obima n za obeležje X i neka je 𝜃

nepoznati parametar u raspodeli obeležja X. Statistika 𝑌 = 𝑓 𝑋1,𝑋2,… ,𝑋𝑛 je postojana

ocena parametra 𝜃 ako 𝑌 →𝑃𝜃, 𝑛 → ∞.

Pri utvrĎivanju postojanosti ocena često se koristi tvrĎenje:

Teorema 1.

Ako je statistika 𝑌 = 𝑓 𝑋1,𝑋2,… ,𝑋𝑛 nepristrasna ocena za napoznati parametar 𝜃 i ako

𝐷(𝑌) → 0, 𝑛 → ∞, tada je Y postojana ocena za 𝜃.

Dokaz

Potrebno je dokazati da za statistiku 𝑌 = 𝜃 važi 𝜃 →𝑃𝜃,𝑛 → ∞. Na osnovu Čebiševljeve

nejednakosti se dobija:

𝑃 𝜃 – 𝜃 ≥ ε ≤𝐸 𝜃 –𝜃

2

𝜀2 =𝐸 𝜃 –E 𝜃

2

𝜀2 =𝐷 𝜃

𝜀2 → 0,𝑛 → ∞.

Uzoračka sredina i uzoračka disperzija su najčešće korišćene statistike za ocenu matematičkog

očekivanja, odnosno disperzije obeležja, što opravdavaju njihova svojstva. Naime, bez obzira na

raspodelu obeležja, uzoračka sredina je nepristrasna ocena za matematičko očekivanje obeležja, a

postojana je ako je disperzija obeležja konačna. TakoĎe, raspodela uzoračke sredine u opštem slučaju

konvergira ka normalnoj raspodeli, a u slučaju normalne raspodele obeležja i raspodela uzoračke

sredine je normalna raspodela. Uzoračka disperzija pri poznatom matematičkom očekivanju obeležja i

popravljena uzoračka disperzija pri nepoznatom očekivanju obeležja su nepristrasne ocene disperzije, a

ukoliko je četvrti moment raspodele konačan, onda su navedene statistike i postojane ocene disperzije.

Ako se koristi više različitih statistika za ocenu jednog parametra, onda se te statistike mogu

porediti svojim disperzijama.

Definicija 3. Efikasnija ocena

Neka je dat prost slučajni uzorak prost slučajni uzorak 𝑋1,𝑋2,… ,𝑋𝑛 obima n za obeležje X

i neka je 𝜃 nepoznati parametar u raspodeli obeležja X. Neka su dve nepristrasne ocene tog

parametra date statistikama 𝑌 = 𝑓 𝑋1,𝑋2 ,… ,𝑋𝑛 i 𝑍 = 𝑔 𝑋1,𝑋2,… ,𝑋𝑛 . Ako je 𝐷(𝑌) ≤ 𝐷(𝑍)

statistika Y je efikasnija ocena parametra 𝜃 od statistike 𝑍.

5

Osobine uzoračke sredine i uzoračke disperzije za obeležje sa

normalnom raspodelom

Neka obeležje X ima𝑵 𝒎,𝝈𝟐 raspodelu i neka je dat prost slučajni uzorak 𝑿𝟏,𝑿𝟐,… ,𝑿𝒏 obima n za posmatrano obeležje.

1. Statistika 𝑋 𝑛 = 1

𝑛 𝑋 𝑖

𝑛𝑖=1 je nepristrasna i postojana ocena za m i njena raspodela je 𝑁 𝑚,

𝜎2

𝑛 ,

dok statistika 𝑋 𝑛− m

𝜎 𝑛 ima N(0,1) raspodelu.

2. Statistika 𝑛𝑆 𝑛

2

𝜎2 =1

𝜎2 (𝑋 𝑖 −𝑚)2𝑛

𝑖=1 ima 𝜒𝑛2 raspodelu, pa je 𝐸 𝑆 𝑛

2 = 𝜎2, a 𝐷 𝑆 𝑛2 =

2𝜎4

𝑛.

3. Statistika = 𝑛𝑆 𝑛

2

𝜎2 =1

𝜎2 (𝑋 𝑖 − 𝑋 𝑛)2𝑛

𝑖=1 ima 𝜒𝑛−12 raspodelu, pa je 𝐸 𝑆 𝑛

2 = 𝑛−1 𝜎2

𝑛,

a 𝐷 𝑆 𝑛2 =

2 𝑛−1 𝜎4

𝑛2 .

4. Statistike 𝑋 𝑛 i 𝑆 𝑛2_n su nezavisne slučajne veličine.

5. Uzoračka sredina 𝑋 𝑛 je najefikasnija u klasi linearnih nepristrasnih ocena

matematičkogočekivanja koje su oblika

𝛼𝑗𝑋𝑗𝑛𝑗 =1 , 𝛼𝑗

𝑛𝑗 =1 .

Metoda maksimalne verodostojnosti

Neka je 𝜃 nepoznati jednodimenzioni parametar u raspodeli obeležja X i neka je Θ skup svih

mogućih vrednosti parametra 𝜃, tzv. parametarski prostor. Neka je 𝑋1,𝑋2 ,… ,𝑋𝑛 prost slučajni

uzorak za neprekidno obeležje X i neka je 𝑓 𝑥,𝜃 gustina raspodele X. Funkcija

𝐿 𝑋; 𝜃 = 𝑓 𝑋1;𝜃 · 𝑓 𝑋2; 𝜃 · … · 𝑓 𝑋𝑛 ;𝜃

se naziva funkcija verodostojnosti. Za ocenu parametra 𝜃 se uzima statistika za koju se dostiže

supremum funkcije verodostojnosti. U nekim slučajevima to će ujedno biti maksimalna vrednost

funkcije verodostojnosti. Navedena metoda dobijanja ocena se naziva metoda maksimalne

verodostojnosti (MMV), a ocene dobijene tom metodom su ocene maksimalne verodostojnosti (MV).

Ako je funkcija verodostojnosti diferencijabilna, najpre se odreĎuju vrednosti parametara koje

su rešenja jednačine.

𝑑𝐿 𝑋;𝜃

𝑑𝜃= 0

ili jednačine 𝑑𝑙𝑛 𝐿 𝑋;𝜃

𝑑𝜃= 0.

MeĎu dobijenim rešenjima jednačine mogu se nalaziti vrednosti za koje funkcija L (ili lnL)

postiže svoj supremum, odnosno maksimum ako je drugi izvod funkcije L (ili lnL) negativan u tim

tačkama.

6

Ako je posmatrano obeležje diskretnog tipa, tada je funkcija verodostojnosti jednaka proizvodu

verovatnoća postizanja pojedinih vrednosti iz uzorka

𝐿 𝑋; 𝜃 = 𝑝 𝑋1;𝜃 · 𝑝 𝑋2;𝜃 · … · 𝑝 𝑋𝑛 ;𝜃

gde je 𝑝 𝑡; 𝜃 = 𝑃 𝑋 = 𝑡 . Zatim se oderĎuje maksimalna vrednost funkcije L (ili lnL) kao u

prethodnom slučaju.

Funkcija verodostojnosti se može posmatrati i kao statistika, kad je funkcija uzorka 𝑋1,𝑋2,… ,𝑋𝑛 , a može se posmatrati i kao funkcija čiji su argumenti nepoznati parametri, dok elementi

uzorka imaju ulogu konstanti.

U slučaju višedimenzionalnog parametra 𝜃 = 𝜃1, 𝜃2 ,… , 𝜃𝑠 i diferencijabilne funkcije

verodostojnosti, najpre je potrebno odrediti rešenja sistema jednačina

𝜕𝐿 𝑋;𝜃

𝜕𝜃𝑗= 0, 𝑗 = 1,2,… , 𝑠

ili sistema jednačina

𝜕𝑙𝑛𝐿 𝑋;𝜃

𝜕𝜃𝑗= 0, 𝑗 = 1,2,… , 𝑠

Zatim se odreĎuje, npr. pomoću totalnog diferencijala drugog reda, za koja rešenja sistema se

dobija maksimalna vrednost funkcije verodostojnosti (ili njenog logaritma).

Ocene koje se dobijaju postupkom MMV imaju, često, dobre osobine, kao što su neprekidnost

i/ili postojanost, a takoĎe su često efikanije od ocena dobijenih nekom drugom metodom. Pod

odreĎenim uslovima raspodele ocena dobijenih MMV meto imaju asiptotski normalnu raspodelu. Jedna

od osobina ocena dobijenih MMV je i da su one simetrične funkcije uzorka. To znači da na vrednost

ocene utiču vrednosti podataka, a ne njihov redosled. TakoĎe, ocene po MMV imaju osobinu

invarijantnosti u smislu sledećeg tvrĎenja:

Neka je 𝑔(𝑥) neprekidna funkcija koja ima neprekidnu inverznu funkciju i neka je Y statistika

kojom se po MMV ocenjuje parametar 𝜃. Tada je 𝑔(𝑌) statistika kojom se po MMV ocenjuje 𝑔(𝜃).

Statistika kojom se po MMV ocenjuje neki parametar ne mroa da bude jedinstvena. Jedan takav

slučaj je pri ocenjivanju parametra 𝜃 uniformne raspodele 𝑈 𝜃 − 0.5,𝜃 + 0.5 , kada je svaka statistika

V za koju važimax1≤𝑗≤𝑛 𝑋𝑗 − 0.5 ≤ 𝑉 ≤ min1≤𝑗≤𝑛 𝑋𝑗 + 0.5, ocena po MMV za 𝜃.

7

Metoda momenta

Osim MMV postoje i druge opšte metode. Jedna od njih je metoda momenta, koja je, kao i

MMV primenljiva i na obeležja sa diskretnimm i na obeležja sa neprekidnim raspodelama.

Ova metoda se zasniva na činjenici da su, pod izvesnim uslovima, uzorački momenti postojane i

asimptotski nepristrasne ocene odgovarajućih teorijskih momenata.

Drugi razlog je u činjenici da, u nekim slučajevima, momenti jednoznačno odreĎuju raspodelu.

Ako u raspodeli obeležja X ima r, 𝑟 ≥ 1, nepoznatih parametara, onda se statistike kojima se ti

parametri ocenjuju mogu dobiti rešavanjem sistema od r jednačina

𝐸 𝑋𝑗 =1

𝑛 𝑋𝑗

𝑛

𝑗=1

, 𝑗 = 1,… , 𝑟

Ovi sistemi jednačina su uglavnom nelinearni, tako da se ne može dati opšti postupak za

njihovo rešavanje. U nekim slučajevima se rešenja odreĎuju samo približno, nekom metodom

numeričke matematike.

Metoda momenata se ne može primeniti ako momenti raspodele obeležja ne postoje, kao što je

slučaj, npr., sa Košijevom raspodelom čija je gustina 𝑔 𝑥 =1

𝜋 1+𝑥2 , 𝑥 ∈ 𝑅.

Statistike koje se dobijaju po metodi momenata su često manje efikasne ocene od statistika koje

se dobijaju po MMV (za isti parametar).

Treba naglasiti da je prilikom primene metode momenata moguće koristiti i centralne momente,

ili kombinovati obične i centralne momente. Osim toga, važno je da se formira sistem od r jednačina sa

r nepoznatih parametara, ali to ne moraju redom biti momenti pd prvog do r-tog.

Za neke raspodele i neke parametre u tim raspodelama poklapaju se ocene dobijene metodom

momenata ili MMV. Npr. u slučaju normalne raspodele, sa nepoznatim očekivanjem i nepoznatom

disperzijom,po metodi momenata rešava se sistem

𝐸 𝑋 = 𝑋 𝑛 ,𝐸 𝑋2 =1

𝑛 𝑋𝑗

2

𝑛

𝑗=1

, 𝑗 = 1,… , 𝑟

i dobijaju ocene: uzoračka sredina 𝐸 𝑋 i uzoračka disperzija 𝑆 𝑛2, za 𝐷 𝑋 . Iste ocene se dobijaju i po

MMV.

U nekim slučajevima se ocene po metodi momenata i MMV razlikuju. Npr. ako treba oceniti

nepoznati parametar 𝜃 kada je raspodela obeležja X uniformna na intervalu, 0,𝜃 , onda se, na osnovu

prostog slučajnog uzorka obima n, po metodi momenata dobija ocean 2𝑋 𝑛 , a po MMV se dobija ocena

max1≤𝑗≤𝑛 𝑋𝑗 .

8

Uputstvo

U bazi se nalaze 20 zadataka za rešavanje. Test se sastoji od 10 slučajno izabranih zadataka, 5

lakših, 4 srednje težine i jednog težeg zadatka. Uz svaki zadatak imate tri ponuĎena rešenja, od kojih je

samo jedno tačno. Ukoliko tačno odgovorite dobijate odreĎeni broj poena za taj zadatak. Ako netačno

odgovorite oduzima vam se 10% poena tog zadatka. Svakako uvek možete odgovoriti sa "Ne znam",

kao neutralan odgovor i dobiti 0 poena za taj zadatak. Ukupan broj poena koji možete ostvariti je 40.

Zatim se taj broj množi sa faktorom 2.5 i maksimalan broj je 100. Konačan broj poena se zaokružuje na

gornji deo.

Da biste položili, potrebno je uzeti najmanje 51 poen od 100. Nakon polaganja testa, možete

saznati vaše netačne odgovore ukoliko postoje.

Broj poena Ocena

<51 Pali ste!

51-60 6

61-70 7

71-80 8

81-90 9

91-100 10

9

Kako program radi?

1. faza

Pri startovanju programa na slučajan način se iz baze biraju 10 od 20 zadataka. S obzirom da se

test sastoji od 5 lakših zadataka, 4 malo teža i jednog najtežeg, na taj način treba izabrati zadatke.

Naime, prvih 10 zadataka u bazi su lakši i prva funkcija pod nazivom prikaziZadatakLaksi() izvršava

upit nad bazom, tačnije te zadatke rasporedi “random” naredbom rand() i izabere prva 5 zadataka

naredbom limit 5. Funkcija prikaziZadatakSrednji() bira zadatke srednje težine. Oni u bazi imaju redni

broj od 11 do 17, tako da se upit izvršava nad tim zadacima. TakoĎe se rasporeĎuju “random”

narednom rand() i biraju se 4 zadatka narednom limit 4. Slično radi funkcija prikaziZadatakSrednji()

samo što je redni broj zadataka od 17 do 20 i bira se jedan zadatak.

Sledeće je kako da za svaki izabrani zadatak prikazati ponudjene odgovore i da oni budu u

različitom rasporedu u odnosu na prethodno prikazivanje, odnosno kako stalno “mešati” te zadatke. Za

svaki zadatak u bazi postoje 3 ponudjena odgovora od kojih je jedan tačan. Postoji i četvrti ponuĎeni

odgovor “Ne znam” koji je neutralan i podrazumevan odgovor. S obzirom da postoje 3 ponuĎena

odgovora, onda postoje 3! = 6 načina da se oni predstave. Tako da, koristimo promenljivu koja

“random” uzima vrednost od 1 do 6 i uz svaki izabrani zadatak bira se jedna od tih 6 kombinacija. Npr.

ako ta promenljiva ima vrednost 1 kombinacija predstavljanja zadatka je odgovor1(u bazi

odg1),odgovor2(u bazi odg2),odgovor3(u bazi odg3), ako je promenljiva uzela vrednost 2, onda je

kombinacija odg2,odg1,odg3 itd. Svaki odgovor smeštamo u poseban niz radi njegovog daljnjeg

korišćenja.

2. faza

Pošto smo rešili zadatke, moramo proveriti da li je odgovor tačan, netačan ili podrazumevano

“Ne znam”. Pravimo niz u kome smeštamo 10 slučajno izabrana zadataka. Pošto zadaci imaju težinu,

odnosno lakši ili prva 5 zadataka nose 3.5 poena, proveravamo posebno za njih da li je odgovot tačan

ili netačan. Ako jeste tačan na neku sumu dodajemo taj broj poena, ako nije oduzimamo 10% za taj broj

poena. Dalje ispitujemo zadatke srednje težine za koji se dobija 4 poena ukoliko je odgovor tačan,

odosno oduzima se 0.4 ukoliko je odgovor netačan. Isto važi za poslednji zadatak koji je ujedno i

najteži i nosi 6.5 poena ako se tačno odgovori, odnosno oduzima se 0.65 ukoliko se netačno odgovori.

U svakom slučaju ako je odgovor “Ne znam” dodaje se 0 poena. Dobijenu sumu brojeva množimo sa

2.5 i dobijeni broj zaokružujemo na gornji deo( npr. 50.1 => 51, kao i 50.8 =>51 ). Proveramo uslove

kolika je konačna suma od 100 poena. Prikazuje se broj poena od 40, broj poena od 100, ocena ukoliko

je položio i broj tačnih odgovora.

3.faza Kako je kandidat video svoju ocenu, ne bi bilo loše da prikažemo i rešenja za te zadatke. Pošto

svaki put kada smo izabrali zadatak, njemu smo preko html taga dodelili neki id kako bi znali za koji

zadatak treba prikazati rešenje. Pravimo niz u kome smeštamo id svakog izabranog zadatka. MySQL

upitom nad bazom, za svaki id prikazujemo rešenje. Kako bi kadidat znao šta je tačno, šta netačno ili

gde je dao odgovor “Ne znam” na kraju svakog rešenja pojavljuje se sličica koja označava odgovor.

Nakon pogledanih rešenja, može se ponovo pokrenuti test.

10

Kôd programa

PHP Skript koji bira zadatke iz baze i raspoređuje odgovore za svaki izabrani zadatak

<?php include('db.inc'); db_connect(); //Funckija koja prikazuje 5 laksih zadataka function prikaziZadatakLaksi() { //upit koji vršimo nad bazom $query = "SELECT * FROM zadaci where rbr<=10 order by rand() limit 5"; $result = mysql_query($query) or die(mysql_error());

$i=0; $j=rand(1,6);$k=0; echo "<ul>"; while($row = mysql_fetch_array($result)) { $odgovor[$i] = $row['rbr']; if($j==1) { $i++; echo "<li>"; echo "(3.5 poena) <b>$i. zadatak</b><br /> {$row['zadatak']}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==2) { $i++; echo "<li>"; echo "(3.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==3) { $i++; echo "<li>"; echo "(3.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />";

11

echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==4) { $i++; echo "<li>"; echo "(3.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==5) { $i++; echo "<li>"; echo "(3.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}";

echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==6) { $i++; echo "<li>"; echo "(3.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } echo "<input type='hidden' name='id$k' value='$odgovor[$k]' />"; $k++; echo "</ul>";

12

} //Funckija koja prikazuje 4 srednjih zadataka function prikaziZadatakSrednji() {

$query = "SELECT * FROM zadaci where (rbr>=11 and rbr<=17) order by rand() limit 4"; $result = mysql_query($query) or die(mysql_error());

$i=5; $j=rand(1,6);$k=5; echo "<ul>"; while($row = mysql_fetch_array($result)) {

$odgovor[$i] = $row['rbr']; if($j==1) { $i++; echo "<li>"; echo "(4 poena) <b>$i. zadatak</b><br /> {$row['zadatak']}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==2) { $i++; echo "<li>"; echo "(4 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==3) { $i++; echo "<li>"; echo "(4 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; }

13

else if($j==4) { $i++; echo "<li>"; echo "(4 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==5) { $i++; echo "<li>"; echo "(4 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==6) { $i++; echo "<li>"; echo "(4 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id$k' name='odg".$i."' ".$row['odg1'];

echo "<input type='radio' id='id$k' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } echo "<input type='hidden' name='id$k' value='$odgovor[$k]' />"; $k++; } echo "</ul>"; }

14

//Funckija koja prikazuje 1 tezak zadatak function prikaziZadatakTezi() {

$query = "SELECT * FROM zadaci where rbr>=18 order by rand() limit 1"; $result = mysql_query($query) or die(mysql_error());

$i=9; $j=rand(1,6); echo "<ul>";

while($row = mysql_fetch_array($result)) { $odgovor[9] = $row['rbr']; if($j==1) { $i++; echo "<li>"; echo "(6.5 poena) <b>$i. zadatak</b><br /> {$row['zadatak']}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg3'];

echo "<input type='radio' id='id9' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==2) { $i++; echo "<li>"; echo "(6.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg3'];

echo "<input type='radio' id='id9' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==3) { $i++; echo "<li>"; echo "(6.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id9' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />"; echo "</fieldset>"; echo "</li>"; }

15

else if($j==4) {

$i++; echo "<li>"; echo "(6.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg1'];

echo "<input type='radio' id='id9' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==5) { $i++; echo "<li>"; echo "(6.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg1']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg2'];

echo "<input type='radio' id='id9' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } else if($j==6) { $i++; echo "<li>"; echo "(6.5 poena) <b>$i. zadatak</b><br /> {$row["zadatak"]}"; echo "<br /><br />"; echo "<fieldset class='radio'>"; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg2']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg3']; echo "<input type='radio' id='id9' name='odg".$i."' ".$row['odg1'];

echo "<input type='radio' id='id9' name='odg".$i."' value='neznam' checked='checked'/><label>Ne znam</label><br />";

echo "</fieldset>"; echo "</li>"; } } echo "<input type='hidden' name='id9' value='$odgovor[9]' />"; echo "</ul>"; }

16

//Poziv funkcija za prikazivanje zadataka prikaziZadatakLaksi(); prikaziZadatakSrednji(); prikaziZadatakTezi(); db_disconnect() ?>

PHP Script koji prikazuje rezultate, odnosno broj ostvarenih poena na testu <?php $s=0;$suma;

$pitanje=array($_POST['odg1'], $_POST['odg2'], $_POST['odg3'], $_POST['odg4'], $_POST['odg5'], $_POST['odg6'], $_POST['odg7'], $_POST['odg8'], $_POST['odg9'], $_POST['odg10']); $odgovor=array($_POST['id0'], $_POST['id1'], $_POST['id2'], $_POST['id3'], $_POST['id4'], $_POST['id5'], $_POST['id6'], $_POST['id7'], $_POST['id8'], $_POST['id9']); $br=0;

for($i=0;$i<10;$i++)

{ //Prvih 5 zadataka za koje proveravamo da li su tačni ili netačni if($pitanje[$i] == "tacno" && $i<5) { $s+=3.5; $br++; } else if($pitanje[$i] == "netacno" && $i<5) $s-=0.35; //Sledeća 4 zadataka za koje proveravamo da li su tačni ili netačni if($pitanje[$i] == "tacno" && ($i>=5 && $i<9)) { $s+=4; $br++; } else if($pitanje[$i] == "netacno" && ($i>=5 && $i<9)) $s-=0.4; //Poslednji zadatak za koji proveravamo da li je tačan ili netačan if($pitanje[$i] == "tacno" && $i==9) { $s+=6.5; $br++; } else if($pitanje[$i] == "netacno" && $i==9) $s-=0.65;

/* U svakom slučaju ako je odgovor “ne znam”, dodaje se 0, što i nije neophodno, nego koristimo to radi lakšeg shvatanja prethodnih */

if($pitanje[$i] == "neznam") $s+=0;

} echo "<h1 style='text-align:center'>Osvojili ste ukupno: </h1><br />";

17

//Zaokružujemo sumu na gornji deo pozivom f-je ceil $suma = ceil($s*2.5); //Prikaz poena u tabeli

echo "<table id='rez'>"; echo "<tr><td></td><th>od 40</th><th>od 100</th></tr>";

if($suma<=0) echo "<tr><th>poeni</th><td style='color:red'>0</td><td

style='color:red'>0</td></tr>"; else if($suma>0 && $suma<51)

echo "<tr><th>poeni</th><td style='color:red'>$s</td><td style='color:red'>".$suma."</td></tr>"; else echo "<tr><th>poeni</th><td style='color:green'>$s</td><td style='color:green'>".$suma."</td></tr>";

echo "</table><br >"; //Vršimo provere kolika je suma

if($br==0 && suma<51) echo "<h2 style='text-align:center;font-family:Tahoma;'>Ni na jedno pitanje niste

tačno odgovorili.<br /> Rešenja zadataka možete videti ovde:</h2>"; if($br==1 && $suma<51)

echo "<h2 style='text-align:center;font-family:Tahoma;'>Nažalost, niste položili. <br /> Rešili ste tačno jedan zadatak.<br /> Rešenja zadataka možete videti ovde:</h2>";

if($br>1 && $suma<51) echo "<h2 style='text-align:center;font-family:Tahoma;'>Nažalost, niste položili. <br /> Rešili ste tačno ".$br." zadataka.<br /> Rešenja zadataka možete videti ovde:</h2>";

else if($suma>=51 && $suma<61) echo "<h2 style='text-align:center;font-family:Tahoma;'><br />Položili ste

test sa minimalnom ocenom, 6. <br /> Rešili ste tačno ".$br." zadataka.<br /> Rešenja zadataka možete videti ovde:</h2>";

else if($suma>=61 && $suma<71) echo "<h2 style='text-align:center;font-family:Tahoma;'><br />Vaša ocena je

7.<br /> Rešili ste tačno ".$br." zadataka.<br /> Rešenja zadataka možete videti ovde:</h2>";

else if($suma>=71 && $suma<81) echo "<h2 style='text-align:center;font-family:Tahoma;'><br />Vaša ocena je

8. <br /> Rešili ste tačno ".$br." zadataka.<br /> Rešenja zadataka možete videti ovde:</h2>";

else if($suma>=81 && $suma<91) echo "<h2 style='text-align:center;font-family:Tahoma;'><br />Odlično!<br

/>Vaša ocena je 9. <br /> Rešili ste tačno ".$br." zadataka.<br /> Rešenja zadataka možete videti ovde:</h2>";

else if($suma>=91) echo "<h2 style='text-align:center;font-family:Tahoma;'><br />Svaka čast!!!<br /> Položili ste sa test sa maksimalnom ocenom, 10. <br /> Rešili ste tačno ".$br." zadataka.<br /> Rešenja možete videti ovde:</h2>";

echo "<form method='post' action='resenja.php'>"; for($k=0;$k<10;$k++)

{ $j=$k+1; echo "<input type='hidden' name='id$k' value='".$odgovor[$k]."' />"; echo "<input type='hidden' name='odg$j' value='".$pitanje[$k]."' />"; } ?>

18

PHP Script koji prikazuje rešenja izabranih zadataka

<?php

include('db.inc'); db_connect();

$pitanje=array($_POST['odg1'], $_POST['odg2'], $_POST['odg3'], $_POST['odg4'], $_POST['odg5'], $_POST['odg6'], $_POST['odg7'], $_POST['odg8'], $_POST['odg9'], $_POST['odg10']); $odgovor=array($_POST['id0'], $_POST['id1'], $_POST['id2'], $_POST['id3'], $_POST['id4'], $_POST['id5'], $_POST['id6'], $_POST['id7'], $_POST['id8'], $_POST['id9']);

$query="SELECT * FROM zadaci WHERE rbr=";

$j=1; for($i=0;$i<10;$i++)

{ //Za svaki izabrani zadatak prikazujemo njegovo rešenje $query= $query."$odgovor[$i]"; $result = mysql_query($query) or die(mysql_error()); while($row = mysql_fetch_array($result))

{ if($pitanje[$i] == "tacno")

echo "<b>$j.</b> "."{$row['resenje']} <img src='tick.jpeg' alt='tick' />";

else if($pitanje[$i] == "netacno") echo "<b>$j.</b> "."{$row['resenje']} <img src='x.jpeg' alt='x' />";

else if($pitanje[$i] == "neznam") echo "<b>$j.</b> "."{$row['resenje']} <img src='nezna.png' alt='x' />";

echo "<br /><br />";

$j++; } $query = "SELECT * FROM zadaci WHERE rbr="; } db_disconnect(); ?>