Програмирање 2/К1П 2017
Popravni prvi kolokvijum 2017. godine održan je 24. aprila. Zadaci i rešenja su dostupni sa stranice predmeta.
Pitanja
Pitanje 1
Pošto nemamo mnogo izbora za i (zbog uslova da ) možemo da probamo svako od ponuđenih rešenja da vidimo koje radi. Iz uslova da je dobijamo da se u zadatku radi o IEEE standardu.
U slučaju da je dobijamo:
- ,
- ,
- ,
- ,
Uočimo da se sabiranjem ova dva broja ne može dobiti broj čija mantisa može stati u dva bita i nastavimo na sledeći izbor.
U slučaju da je dobijamo:
- ,
- ,
- ,
- ,
Pošto mantisa broja C ne može stati u tri bita, nastavljamo na sledeći izbor.
U slučaju da je dobijamo:
- ,
- ,
- ,
- ,
Pošto se ovaj broj može sačuvati na zadatim širinama tačno rešenje je pod C.
Pitanje 2
Iz postavke zadatka imamo:
- IEEE standard
Prvi korak je pretvaranje brojeva u njihov binarni oblik:
Tačan rezultat sabiranja 23.875 i 5.999 je 29.875, a razlika 29.875 i 30 je 0.126, pa je tačan odgovor pod A.
Pitanje 3
- Na osnovu strukture
opmožemo zaključiti da će vrednosti njenih članova bitimul = 0,div = 1,add = 2isub = 3. - Vrednosti u nizu
nizna početku biće[5, 10, 12, 18, 31, ?, ?, ?, ?, ?]. - Unutrašnja petlja je napravljena da gurne sve elemente niza trenutno manje od
xudesno i onda ubacixna jedno mesto ispred poslednjeg broja manjeg odx. Nakon toga se povećan, što bi trebalo da označava dužinu niza do koje elementi postoje.
Iteracija kroz petlju teče ovako:
i = 0niz[i] % 4 = 5 % 4 = 1tako da padamo ucase div.x := niz[i] * niz[i + 1] = 5 * 10 = 50(padamo nadefault)niz[0] := niz[0] - 1 = 4,niz[1] := niz[1] + 1 = 11- Pošto je vrednost
x(50) veća od svih ostalih vrednosti u nizu ona se gura na kraj niza. Stanje niza je:[4, 11, 12, 18, 31, 50, ?, ?, ?, ?]. n := n + 1 = 6
i = 1niz[i] % 4 = 11 % 4 = 3tako da padamo nacase sub.x := x / (2 * 10) = 2- U ovom koraku se pretpostavi da je veličina
shorttipa jednaka 2 bajta (iako to nigde nije naglašeno i ne piše u standardu)
- U ovom koraku se pretpostavi da je veličina
i := i + 1 = 2(broj iteracija se smanjuje za jedan)- Unutrašnja petlja gurne sve elemente niza na desno i postavi 2 na početak. Trenutno stanje niza je
[2, 4, 11, 12, 18, 31, 50, ?, ?, ?].
i = 3niz[i] % 4 = 12 % 4 = 0tako da padamo ucase mul.x := niz[i + 1] - niz[i] = 18 - 12 = 6- Stanje niza je isto kao i ranije.
i = 4niz[i] % 4 = 18 % 4 = 2tako da padamo nacase add.x := niz[i] + niz[i + 1] = 49(padamo nacase subi odavde se stvari nastavljaju slično kao zai = 1)x := x / 20 = 2i := i + 1- Unutrašnja petlja ponovo dodaje 2 na početak niza tako da je trenutno stanje niza:
[2, 2, 4, 11, 12, 18, 31, 50, ?, ?]
Krajnji ispis biće poznate vrednosti u nizu: 2 2 4 11 12 18 31 50 (odgovor pod B).
Pitanje 4
M = 8,N = 5mask := (1 << 3) - 1 = 4 - 1 = 3arr = [53, 156, 86, 13, 4]- Za potrebe zadatka nam je lakše da izrazimo ovaj niz kao binarne brojeve, pa dobijamo:
arr = [00110101, 10011100, 01010110, 00001101, 00000100].
- Za potrebe zadatka nam je lakše da izrazimo ovaj niz kao binarne brojeve, pa dobijamo:
- Nakon prve petlje dobijamo stanje niza
c = [2, 2, 0, 1, 0, 0, 0, 0]. - Prvi član
pje nula a svi ostali zbir prošlog elementapi njemu odgovarajućeg elementa izcpa je stanje nizap = [0, 2, 4, 4, 5, 5, 5, 5]. - Zatim se radi ispis elemenata
psličnom operacijom kao u prvoj petlji (dva puta će se ispisati prva dva elementa a jednom četvrti) s tim što se ispisani članovi niza povećavaju za jedan pri svakom ispisu.
Krajnji ispis je 2 0 4 3 1, tako da je tačan odgovor pod B.