Програмирање 2/К1П 2017
Поправни први колоквијум 2017. године одржан је 24. априла. Задаци и решења су доступни са странице предмета.
Питања
Питање 1
Пошто немамо много избора за и (због услова да ) можемо да пробамо свако од понуђених решења да видимо које ради. Из услова да је добијамо да се у задатку ради о ИЕЕЕ стандарду.
У случају да је добијамо:
- ,
- ,
- ,
- ,
Уочимо да се сабирањем ова два броја не може добити број чија мантиса може стати у два бита и наставимо на следећи избор.
У случају да је добијамо:
- ,
- ,
- ,
- ,
Пошто мантиса броја C не може стати у три бита, настављамо на следећи избор.
У случају да је добијамо:
- ,
- ,
- ,
- ,
Пошто се овај број може сачувати на задатим ширинама тачно решење је под C.
Питање 2
Из поставке задатка имамо:
- ИЕЕЕ стандард
Први корак је претварање бројева у њихов бинарни облик:
Тачан резултат сабирања 23.875 и 5.999 је 29.875, а разлика 29.875 и 30 је 0.126, па је тачан одговор под А.
Питање 3
- На основу структуре
opможемо закључити да ће вредности њених чланова битиmul = 0,div = 1,add = 2иsub = 3. - Вредности у низу
nizна почетку биће[5, 10, 12, 18, 31, ?, ?, ?, ?, ?]. - Унутрашња петља је направљена да гурне све елементе низа тренутно мање од
xудесно и онда убациxна једно место испред последњег броја мањег одx. Након тога се повећаn, што би требало да означава дужину низа до које елементи постоје.
Итерација кроз петљу тече овако:
i = 0niz[i] % 4 = 5 % 4 = 1тако да падамо уcase div.x := niz[i] * niz[i + 1] = 5 * 10 = 50(падамо наdefault)niz[0] := niz[0] - 1 = 4,niz[1] := niz[1] + 1 = 11- Пошто је вредност
x(50) већа од свих осталих вредности у низу она се гура на крај низа. Стање низа је:[4, 11, 12, 18, 31, 50, ?, ?, ?, ?]. n := n + 1 = 6
i = 1niz[i] % 4 = 11 % 4 = 3тако да падамо наcase sub.x := x / (2 * 10) = 2- У овом кораку се претпостави да је величина
shortтипа једнака 2 бајта (иако то нигде није наглашено и не пише у стандарду)
- У овом кораку се претпостави да је величина
i := i + 1 = 2(број итерација се смањује за један)- Унутрашња петља гурне све елементе низа на десно и постави 2 на почетак. Тренутно стање низа је
[2, 4, 11, 12, 18, 31, 50, ?, ?, ?].
i = 3niz[i] % 4 = 12 % 4 = 0тако да падамо уcase mul.x := niz[i + 1] - niz[i] = 18 - 12 = 6- Стање низа је исто као и раније.
i = 4niz[i] % 4 = 18 % 4 = 2тако да падамо наcase add.x := niz[i] + niz[i + 1] = 49(падамо наcase subи одавде се ствари настављају слично као заi = 1)x := x / 20 = 2i := i + 1- Унутрашња петља поново додаје 2 на почетак низа тако да је тренутно стање низа:
[2, 2, 4, 11, 12, 18, 31, 50, ?, ?]
Крајњи испис биће познате вредности у низу: 2 2 4 11 12 18 31 50 (одговор под Б).
Питање 4
M = 8,N = 5mask := (1 << 3) - 1 = 4 - 1 = 3arr = [53, 156, 86, 13, 4]- За потребе задатка нам је лакше да изразимо овај низ као бинарне бројеве, па добијамо:
arr = [00110101, 10011100, 01010110, 00001101, 00000100].
- За потребе задатка нам је лакше да изразимо овај низ као бинарне бројеве, па добијамо:
- Након прве петље добијамо стање низа
c = [2, 2, 0, 1, 0, 0, 0, 0]. - Први члан
pје нула а сви остали збир прошлог елементаpи њему одговарајућег елемента изcпа је стање низаp = [0, 2, 4, 4, 5, 5, 5, 5]. - Затим се ради испис елемената
pсличном операцијом као у првој петљи (два пута ће се исписати прва два елемента а једном четврти) с тим што се исписани чланови низа повећавају за један при сваком испису.
Крајњи испис је 2 0 4 3 1, тако да је тачан одговор под Б.