Програмирање 2/К1 2018 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(WIP)
 
м (Ispravljen link + uvodni pasus)
 
(6 међуизмена истог корисника није приказано)
Ред 1: Ред 1:
[https://rti.etf.bg.ac.rs/rti/ir1p2/resenja/SI1P2_1718_K1.pdf Zadaci i rešenja na sajtu.]
{{tocright}}
'''Prvi kolokvijum 2018. godine''' održan je 19. marta. Zadaci i rešenja dostupni su sa [https://rti.etf.bg.ac.rs/rti/ir1p2/rokovi/2017_2018/13S111P2_K1_2017_2018_Resenja.pdf stranice predmeta.]


== Pitanja ==
== Pitanja ==
Ред 14: Ред 15:
* <math>p = 4, k = 4</math>
* <math>p = 4, k = 4</math>
* <math>v = 7 = 2^{k-1} - 1 \implies</math> '''IEEE standard'''
* <math>v = 7 = 2^{k-1} - 1 \implies</math> '''IEEE standard'''
* <math>e_X = 1010_2 = 10_10 \implies E_X = e_X - v = 3_10</math>
* <math>e_X = 1010_2 = 10_{10} \implies E_X = e_X - v = 3_{10}</math>
* <math>m_X = 0100_2 \implies M_X = 1.0100_2</math>
* <math>m_X = 0100_2 \implies M_X = 1.0100_2</math>
* <math>X = 1.0100_2 \cdot 2^3 = 0.00010100_2 \cdot 2^7 = 0.000101_2 \cdot 2^7</math>
* <math>X = 1.0100_2 \cdot 2^3 = 0.00010100_2 \cdot 2^7 = 0.000101_2 \cdot 2^7</math>
* <math>Y = 10100100_2 = 1.0100100_2 \cdot 2^7 = 1.01001_2 \cdot 2^7</math>
* <math>Y = 10100100_2 = 1.0100100_2 \cdot 2^7 = 1.0100_2 \cdot 2^7</math>
* <math>Z = X - Y = (0.000101_2 - 1.01001_2) \cdot 2^7 = -1.001011 \cdot 2^7</math>
* <math>Z = X - Y = (0.000101_2 - 1.0100_2) \cdot 2^7 = -1.001011 \cdot 2^7</math>
Odsecamo poslednje dve cifra sa <math>Z</math> kako bismo mogli da ga uglavimo u pet bitova za mantisu. Pošto su poslednje dve cifre <math>11</math>, <math>Z</math> zaokružujemo na viši broj, pa je <math>Z \approx -1.0011_2 \cdot 2^7 = -10011000_2 = -152_{10}</math> i tačan odgovor je pod '''A'''.
Odsecamo poslednje dve cifre sa <math>Z</math> kako bismo mogli da ga uglavimo u četiri bita za mantisu. Pošto su poslednje dve cifre <math>11</math>, <math>Z</math> zaokružujemo na viši broj, pa je <math>Z \approx -1.0011_2 \cdot 2^7 = -10011000_2 = -152_{10}</math> i tačan odgovor je pod '''A'''.


=== Pitanje 3 ===
=== Pitanje 3 ===
* Promenljive <code>a</code>, <code>b</code> i <code>c</code> se neće menjati tokom izvršavanja programa i uvek će zadržati svoje vrednosti 2, 3 i 4.
* <code>i</code> promenljiva nam funkcioniše kao brojač u ''do-while'' petlji, s tim što se poveća pre izvršenja ostatka petlje.
* Ne postoji <code>break</code> između <code>case</code> za 1 i 3 tako da će program nastaviti da izvršava <code>case 3</code> nakon <code>case 1</code>.
* Nakon <code>default</code> dela petlja se nastavlja bez povećavanja <code>n</code> na kraju.
* <code>n += c / a * a</code> je ekvivalentno <code>n += c</code>.
* Na kraju nam se ispisuju vrednosti <code>n</code> i <code>i</code>.
Iteracije kroz petlju izgledaju ovako:
# iteracija
#* <code>i := 1</code>
#* <code>n := b = 3</code>
#* <code>n := n + c = 3 + 4 = 7</code>
#* <code>n := n + 1 = 8</code>
#* <code>n >= 2 * i</code>, odnosno <code>8 >= 2 * 1</code> je tačno, petlja se nastavlja.
# iteracija
#* <code>i := 2</code>
#* <code>n & c = 1000 & 0100 = 0</code>
#* <code>n := n - c = 8 - 4 = 4</code>
#* <code>n >= 2 * i</code>, odnosno <code>4 >= 2 * 2</code> je tačno, petlja se nastavlja.
# iteracija
#* <code>i := 3</code>
#* <code>n := n + c = 4 + 4 = 8</code>
#* <code>n := n + 1 = 9</code>
#* <code>n >= 2 * i</code>, odnosno <code>9 >= 2 * 3</code> je tačno, petlja se nastavlja.
# iteracija
#* <code>i := 4</code>
#* <code>n & c = 1001 & 0100 = 0</code>
#* <code>n := n - c = 9 - 4 = 5</code>
#* <code>n >= 2 * i</code>, odnosno <code>5 >= 2 * 4</code> nije tačno, petlja se zaustavlja.
Dobijamo na kraju da su nam <code>n</code> i <code>i</code> jednaki 5 i 4, tako da je odgovor pod '''B''' tačan.
[[Категорија:Рокови]]
[[Категорија:Програмирање 2]]

Тренутна верзија на датум 30. октобар 2023. у 03:05

Prvi kolokvijum 2018. godine održan je 19. marta. Zadaci i rešenja dostupni su sa stranice predmeta.

Pitanja

Pitanje 1

Ovo je nestandardan zadatak u kojem nam količina bitova za eksponent () i mantisu () nisu poznati. Postupak rešavanja ide ovako:

  • IEEE standard
  • , ,

Pošto smo dobili broj čija se mantisa dužine 8 ne može skratiti bez zaokruživanja dobijamo da je . Za možemo da probamo par dovoljno bliskih brojeva, pošto imamo da je . Na primer, ako probamo dobićemo da je pa je a broj 10 se ne može smestiti na 3 binarne cifra pa ta opcija otpada. Na ovaj način dobijamo da je , tako da je tačan odgovor pod B.

Pitanje 2

  • IEEE standard

Odsecamo poslednje dve cifre sa kako bismo mogli da ga uglavimo u četiri bita za mantisu. Pošto su poslednje dve cifre , zaokružujemo na viši broj, pa je i tačan odgovor je pod A.

Pitanje 3

  • Promenljive a, b i c se neće menjati tokom izvršavanja programa i uvek će zadržati svoje vrednosti 2, 3 i 4.
  • i promenljiva nam funkcioniše kao brojač u do-while petlji, s tim što se poveća pre izvršenja ostatka petlje.
  • Ne postoji break između case za 1 i 3 tako da će program nastaviti da izvršava case 3 nakon case 1.
  • Nakon default dela petlja se nastavlja bez povećavanja n na kraju.
  • n += c / a * a je ekvivalentno n += c.
  • Na kraju nam se ispisuju vrednosti n i i.

Iteracije kroz petlju izgledaju ovako:

  1. iteracija
    • i := 1
    • n := b = 3
    • n := n + c = 3 + 4 = 7
    • n := n + 1 = 8
    • n >= 2 * i, odnosno 8 >= 2 * 1 je tačno, petlja se nastavlja.
  2. iteracija
    • i := 2
    • n & c = 1000 & 0100 = 0
    • n := n - c = 8 - 4 = 4
    • n >= 2 * i, odnosno 4 >= 2 * 2 je tačno, petlja se nastavlja.
  3. iteracija
    • i := 3
    • n := n + c = 4 + 4 = 8
    • n := n + 1 = 9
    • n >= 2 * i, odnosno 9 >= 2 * 3 je tačno, petlja se nastavlja.
  4. iteracija
    • i := 4
    • n & c = 1001 & 0100 = 0
    • n := n - c = 9 - 4 = 5
    • n >= 2 * i, odnosno 5 >= 2 * 4 nije tačno, petlja se zaustavlja.

Dobijamo na kraju da su nam n i i jednaki 5 i 4, tako da je odgovor pod B tačan.