Програмирање 2/К1П 2017 — разлика између измена
(Trenutno gotov jedan zadatak) |
м (Ispravljen link + uvodni pasus) |
||
| (3 међуизмене истог корисника нису приказане) | |||
| Ред 1: | Ред 1: | ||
[https://rti.etf.bg.ac.rs/rti/ir1p2/ | {{tocright}} | ||
'''Popravni prvi kolokvijum 2017. godine''' održan je 24. aprila. Zadaci i rešenja su dostupni sa [https://rti.etf.bg.ac.rs/rti/ir1p2/rokovi/2016_2017/13S111P2_K1_P_2016_2017_Resenja.pdf stranice predmeta.] | |||
== Pitanja == | == Pitanja == | ||
| Ред 41: | Ред 42: | ||
=== Pitanje 2 === | === Pitanje 2 === | ||
Iz postavke zadatka imamo: | |||
* <math>k = 5</math> | |||
* <math>p = 6</math> | |||
* <math>v = 15 = 2^4 - 1 \implies</math> IEEE standard | |||
Prvi korak je pretvaranje brojeva u njihov binarni oblik: | |||
* <math>A = 23.875 = 23 + 0.875 = 10111_2 + 0.111_2 = 10111.111_2 = 1.0111111_2 \cdot 2^4 \approx 1.1_2 \cdot 2^4</math> | |||
* <math>B = 5.999 = 101.111_2... = 1.01111_2... \cdot 2^2 \approx 1.1_2 \cdot 2^4 = 0.011_2 \cdot 2^4</math> | |||
* <math>A + B = (1.1_2 + 0.011_2) \cdot 2^4 = 1.111_2 \cdot 2^4 = 11110_2 = 30</math> | |||
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 <code>op</code> možemo zaključiti da će vrednosti njenih članova biti <code>mul = 0</code>, <code>div = 1</code>, <code>add = 2</code> i <code>sub = 3</code>. | |||
* Vrednosti u nizu <code>niz</code> na početku biće <code>[5, 10, 12, 18, 31, ?, ?, ?, ?, ?]</code>. | |||
* Unutrašnja petlja je napravljena da gurne sve elemente niza trenutno manje od <code>x</code> udesno i onda ubaci <code>x</code> na jedno mesto ispred poslednjeg broja manjeg od <code>x</code>. Nakon toga se poveća <code>n</code>, što bi trebalo da označava dužinu niza do koje elementi postoje. | |||
Iteracija kroz petlju teče ovako: | |||
* <code>i = 0</code> | |||
** <code>niz[i] % 4 = 5 % 4 = 1</code> tako da padamo u <code>case div</code>. | |||
** <code>x := niz[i] * niz[i + 1] = 5 * 10 = 50</code> (padamo na <code>default</code>) | |||
** <code>niz[0] := niz[0] - 1 = 4</code>, <code>niz[1] := niz[1] + 1 = 11</code> | |||
** Pošto je vrednost <code>x</code> (50) veća od svih ostalih vrednosti u nizu ona se gura na kraj niza. Stanje niza je: <code>[4, 11, 12, 18, 31, 50, ?, ?, ?, ?]</code>. | |||
** <code>n := n + 1 = 6</code> | |||
* <code>i = 1</code> | |||
** <code>niz[i] % 4 = 11 % 4 = 3</code> tako da padamo na <code>case sub</code>. | |||
** <code>x := x / (2 * 10) = 2</code> | |||
*** U ovom koraku se pretpostavi da je veličina <code>short</code> tipa jednaka 2 bajta (iako to nigde nije naglašeno i ne piše u standardu) | |||
** <code>i := i + 1 = 2</code> (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 <code>[2, 4, 11, 12, 18, 31, 50, ?, ?, ?]</code>. | |||
* <code>i = 3</code> | |||
** <code>niz[i] % 4 = 12 % 4 = 0</code> tako da padamo u <code>case mul</code>. | |||
** <code>x := niz[i + 1] - niz[i] = 18 - 12 = 6</code> | |||
** Stanje niza je isto kao i ranije. | |||
* <code>i = 4</code> | |||
** <code>niz[i] % 4 = 18 % 4 = 2</code> tako da padamo na <code>case add</code>. | |||
** <code>x := niz[i] + niz[i + 1] = 49</code> (padamo na <code>case sub</code> i odavde se stvari nastavljaju slično kao za <code>i = 1</code>) | |||
** <code>x := x / 20 = 2</code> | |||
** <code>i := i + 1</code> | |||
** Unutrašnja petlja ponovo dodaje 2 na početak niza tako da je trenutno stanje niza: <code>[2, 2, 4, 11, 12, 18, 31, 50, ?, ?]</code> | |||
Krajnji ispis biće poznate vrednosti u nizu: <code>2 2 4 11 12 18 31 50</code> (odgovor pod '''B'''). | |||
=== Pitanje 4 === | === Pitanje 4 === | ||
* <code>M = 8</code>, <code>N = 5</code> | |||
* <code>mask := (1 << 3) - 1 = 4 - 1 = 3</code> | |||
* <code>arr = [53, 156, 86, 13, 4]</code> | |||
** Za potrebe zadatka nam je lakše da izrazimo ovaj niz kao binarne brojeve, pa dobijamo: <code>arr = [00110101, 10011100, 01010110, 00001101, 00000100]</code>. | |||
* Nakon prve petlje dobijamo stanje niza <code>c = [2, 2, 0, 1, 0, 0, 0, 0]</code>. | |||
* Prvi član <code>p</code> je nula a svi ostali zbir prošlog elementa <code>p</code> i njemu odgovarajućeg elementa iz <code>c</code> pa je stanje niza <code>p = [0, 2, 4, 4, 5, 5, 5, 5]</code>. | |||
* Zatim se radi ispis elemenata <code>p</code> slič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 <code>2 0 4 3 1</code>, tako da je tačan odgovor pod '''B'''. | |||
[[Категорија:Рокови]] | |||
[[Категорија:Програмирање 2]] | |||
Тренутна верзија на датум 30. октобар 2023. у 03:05
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.