<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lukahrvacevic</id>
	<title>SI Wiki - Кориснички доприноси [sr]</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lukahrvacevic"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/wiki/%D0%9F%D0%BE%D1%81%D0%B5%D0%B1%D0%BD%D0%BE:%D0%94%D0%BE%D0%BF%D1%80%D0%B8%D0%BD%D0%BE%D1%81%D0%B8/Lukahrvacevic"/>
	<updated>2026-06-04T04:23:16Z</updated>
	<subtitle>Кориснички доприноси</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%97%D0%B0%D1%88%D1%82%D0%B8%D1%82%D0%B0_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0/%D0%88%D1%83%D0%BB_2021&amp;diff=6152</id>
		<title>Заштита података/Јул 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%97%D0%B0%D1%88%D1%82%D0%B8%D1%82%D0%B0_%D0%BF%D0%BE%D0%B4%D0%B0%D1%82%D0%B0%D0%BA%D0%B0/%D0%88%D1%83%D0%BB_2021&amp;diff=6152"/>
		<updated>2023-05-04T20:18:21Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 2. zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Julski rok 2021. godine&#039;&#039;&#039; održan je 29. juna. Postavka ovog roka nije javno dostupna.&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Ana i Branko razmenjuju ključ Diffie-Hellman algoritmom. Za tu svrhu koriste prost broj 10007 i njegov primitivni koren 3073. Ana je za svoj privatni broj odredila 3072, a Branko 520. Odrediti:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Javni broj koji je izračunala Ana &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;3374&amp;lt;/span&amp;gt;&lt;br /&gt;
# Javni broj koji je izračunao Branko &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;5388&amp;lt;/span&amp;gt;&lt;br /&gt;
# Ključ koji je razmenjen &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;1876&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
&lt;br /&gt;
Marko treba da plati uslugu n bitkoina u blokčejnu koji koristi SHA-256 heš funkciju i stoga formira transakciju t&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; sa iznosom n kojim se plaća usluga. Kako bi smanjio svoju obavezu i prevario prodavca usluge Marko želi da napravi drugu transakciju t&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; čija je vrednost manja od n i da je podmetne umesto t&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;. Koliko če različitih transakcija Marko morati da napravi da bi sa verovatnoćom 0.5 uspeo da napravi zadovoljavajuću transakciju t&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
Podrazumeva se da zamena transakcije treba da bude takva da nema novog rudarenja. Odgovor upisati u polje, operacija stepenovanja treba da se&lt;br /&gt;
označi simbolom ^.&lt;br /&gt;
&lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;2^255&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako se zna da blokčejn ima u svakom bloku 2048 transakcija, koliko je heš operacija potrebno da se izvrši da bi se izračunao &amp;quot;Transaction hash&amp;quot; ?&lt;br /&gt;
&lt;br /&gt;
Odgovor: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;11&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Na slici je dat prvi deo Kerberos v4 autentikacije:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; (1) \quad \mathbf{C \rightarrow AS} \quad ID_c \parallel ID_{tgs} \parallel TS_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; (2) \quad \mathbf{AS \rightarrow C} \quad E\left( K_c, \left[ \qquad \parallel TS_2 \parallel Lifetime_2 \parallel Ticket_{tgs} \right] \right) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \qquad Ticket_{tgs} = E\left( K_{tgs}, \left[ \qquad \parallel TS_2 \parallel Lifetime_2 \right]  \right) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elementi koji nedostaju u poruci (2) (ne i u Ticket&amp;lt;sub&amp;gt;tgs&amp;lt;/sub&amp;gt;) su:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# identifikator servera AS&lt;br /&gt;
# identifikator TGS&lt;br /&gt;
# identifikator klijenta C&lt;br /&gt;
# IP adresa servera V&lt;br /&gt;
# IP adresa klijenta C&lt;br /&gt;
# IP adresa servera AS&lt;br /&gt;
# ključ kojim komuniciraju klijent i autentikacioni server AS&lt;br /&gt;
# ključ kojim komuniciraju klijent i server V&lt;br /&gt;
# identifikator servera V&lt;br /&gt;
# ključ kojim komuniciraju klijent i TGS&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
: &#039;&#039;Isti zadatak kao sa [[Заштита података/К 2022#5. zadatak|kolokvijuma za RTI 2022. godine]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
MAC algoritam koji daje MAC kod veličine 32 bita ima ključ veličine 100 bita. Ako je raspodela MAC kodova koji daje algoritam uniformna i sve vrednosti su jednako verovatne, da bi otkrio ključ koji se koristi za generisanje MAC kodova napadaču će trebati:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt; različita para/različitih parova (poruka, MAC(poruka)).&lt;br /&gt;
# Da izvrši &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;2^100+2^68+2^36+2^4&amp;lt;/span&amp;gt; MAC operacija (za prikaz operacije stepenovanja koristiti simbol ^).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Firma F ima centralu koja se nalazi u Helsinkiju. Na centralnoj lokaciji se nalazi 5 web aplikacija kojima se pružaju interne poslovne usluge. Sve aplikacije koriste HTTPS. F ima 10 zaposlenih u svojoj ispostavi u Pragu. Ako se zna da svi zaposleni u ispostavi svakog radnog dana koriste svih 5 aplikacija na centralnoj lokaciji i da se povezuju na svaku od aplikacija dva puta: jednom na početku radnog dana i jednom nakon pauze, tokom svakog&lt;br /&gt;
radnog dana će se:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# generisati ukupno &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt; različitih kriptografskih ključeva potrebnih za zaštitu web saobraćaja TLS-om svih web sesija (uneti broj)&lt;br /&gt;
# izvršiti &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt; razmena ključeva (uneti broj)&lt;br /&gt;
# Ako se između lokacija firme u Helsinkiju i Pragu za zaštitu podataka između radnika i web aplikacija koristi site-to-site IPsec sa main modom razmene koji se vrši svake prve nedelje u mesecu u 23:00 i quick modom koji se vrši svaki dan u ponoć i ne koristi se TLS na web aplikacijama, onda če se svaki dan izvršiti &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt; razmena ključeva. (uneti broj)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
Kod kojih od navedenih kriptografskih algoritama učestanost pojavljivanja simbola/slova u šifrovanom tekstu ima istu raspodelu kao učestanost&lt;br /&gt;
pojavljivanja slova u originalnom tekstu?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# RSA algoritam &lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&#039;&#039;Row transposition&#039;&#039; algoritam&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;Vigenere&#039;&#039; algoritam sa autokey poboljšanjem&lt;br /&gt;
# Rotor mašina/Enigma&lt;br /&gt;
# Monoalfabetska šifra sa Gausovim poboljšanjem&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Monoalfabetska šifra&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;Playfair&#039;&#039; algoritam&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&#039;&#039;Rail-fence&#039;&#039; algoritam&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;Vigenere&#039;&#039; algoritam&lt;br /&gt;
# &#039;&#039;One-time pad&#039;&#039;&lt;br /&gt;
# &#039;&#039;Hill&#039;&#039;-ov algoritam&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Cezarov algoritam&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
Data je šema El Gamalovog algoritma za digitalno potpisivanje (&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; je hash poruke M):&lt;br /&gt;
* &amp;lt;math&amp;gt; S_1 = \alpha^K mod q  &amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt; S_2 = K^{-1}\left( m - X_AS_1 \right) mod (q-1) &amp;lt;/math&amp;gt;&lt;br /&gt;
Za ovako formiran digitalni potpis važi sledeće:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# Vrednosti koje su potrebne prijemnoj strani za proveru digitalnog potpisa su: &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Za jednu poruku M može da postoji više različitih ispravnih vrednosti digitalnog potpisa &amp;lt;math&amp;gt;(S_1, S_2)&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Vrednosti koje su potrebne prijemnoj strani za proveru digitalnog potpisa su: &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y_A&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Ukoliko se promeni poruka M, promeniće se vrednost celog digitalnog potpisa i &amp;lt;math&amp;gt;S_1&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;S_2&amp;lt;/math&amp;gt;&lt;br /&gt;
# Potpis je ispravan ukoliko je &amp;lt;math&amp;gt;S1 = S2&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Ukoliko se promeni poruka M, promeniće se vrednost &amp;lt;math&amp;gt;S_2&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Za jednu poruku M postoji tačno jedna ispravna vrednost digitalnog potpisa &amp;lt;math&amp;gt;(S_1, S_2)&amp;lt;/math&amp;gt;&lt;br /&gt;
# Vrednosti koje su potrebne prijemnoj strani za proveru digitalnog potpisa su: &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y_A&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Ukoliko se promeni poruka M, promeniće se vrednost &amp;lt;math&amp;gt;S_1&amp;lt;/math&amp;gt;&lt;br /&gt;
# Vrednosti koje su potrebne prijemnoj strani za proveru digitalnog potpisa su: &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
Originalnu poruku 00111100b propustiti kroz SDES algoritam korišćenjem ključa 0011001100b. Detalji algoritma dati su u nastavku.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ PC1:&lt;br /&gt;
| 3 || 5 || 2 || 7 || 4 || 10 || 1 || 9 || 8 || 6&lt;br /&gt;
|}&lt;br /&gt;
Rotacija: 1. iteracija za 1, 2. iteracija za 2&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ PC2:&lt;br /&gt;
| 6 || 3 || 7 || 4 || 8 || 5 || 10 || 9&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ IP:&lt;br /&gt;
| 2 || 6 || 3 || 1 || 4 || 8 || 5 || 7&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ IP&amp;lt;sup&amp;gt;-1&amp;lt;/sup&amp;gt;:&lt;br /&gt;
| 4 || 1 || 3 || 5 || 7 || 2 || 8 || 6&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ E:&lt;br /&gt;
| 4 || 1 || 2 || 3 || 2 || 3 || 4 || 1&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ S1:&lt;br /&gt;
| 1 || 0 || 3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 2 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 2 || 1 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || 0 || 2&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ S2:&lt;br /&gt;
| 0 || 1 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0 || 1 || 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0 || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || 0 || 3&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|+ P:&lt;br /&gt;
| 2 || 4 || 3 || 1&lt;br /&gt;
|}&lt;br /&gt;
Napomena: Sve vrednosti pisati u binarnom obliku bez sufiksa &amp;quot;b&amp;quot;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Koja je vrednost ključa prve iteracije &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;01011100&amp;lt;/span&amp;gt;&lt;br /&gt;
# Koja je vrednost ključa druge iteracije &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;11000000&amp;lt;/span&amp;gt;&lt;br /&gt;
# Koja je vrednost poruke nakon inicijalne permutacije &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;01101010&amp;lt;/span&amp;gt;&lt;br /&gt;
# Koja je vrednost poruke nakon prolaska kroz funkciju iteracije za prvu iteraciju &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;11001010&amp;lt;/span&amp;gt;&lt;br /&gt;
# Koja je vrednost poruke nakon prve iteracije &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;10101100&amp;lt;/span&amp;gt;&lt;br /&gt;
# Koja je vrednost šifrovane poruke &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;11010001&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Pretpostavlja se da se u stavci pod d mislilo na izlaz &amp;lt;math&amp;gt;f_K&amp;lt;/math&amp;gt; bloka, a u stavci pod e na izlaz &amp;lt;math&amp;gt;SW&amp;lt;/math&amp;gt; bloka.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
Na slici je dat deo PGP šeme na strani slanja za obezbeđivanje &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;tajnosti&amp;lt;/span&amp;gt; poruke.&lt;br /&gt;
&lt;br /&gt;
Z predstavlja operaciju kompresije, a operacije EC i EP su operacije šifrovanja.&lt;br /&gt;
[[Датотека:ZP jul 2021 zadatak 10.svg|center|frame|PGP šema u desetom zadatku.]]&lt;br /&gt;
Ako stranu slanja označimo sa X, a stranu prijema sa Y onda:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;Ks,PUx,PUy,PRx,PRy&amp;quot;&amp;gt;&lt;br /&gt;
# na mestu označenom brojem 1 se koristi ključ &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;Ks&amp;lt;/span&amp;gt;&lt;br /&gt;
# na mestu označenom brojem 2 se koristi ključ &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;PUy&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Ukoliko se šemom obezbeđuje i kompresija tada se poruka propušta kroz ZIP algoritam na poziciji &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 11. zadatak ==&lt;br /&gt;
&lt;br /&gt;
== 12. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Za svaki od sledećih scenarija, odrediti o kom malicioznom softveru je reč.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;logička bomba,zadnja vrata,zombi,keylogger,flooder,downloader,adware,ransomware&amp;quot;&amp;gt;&lt;br /&gt;
# Dati maliciozni kod se propagira na druge mašine korišćenjem crva. Nakon propagacije, cilj datog softvera je da koristi zaraženu mašinu za napade na druge mašine. Maliciozni softver koji je opisan je &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;.&lt;br /&gt;
# Nikoli, studentu Elektrotehničkog fakulteta, poslat je mejl sa linkom ka sajtu preko kojeg može da preuzme desktop verziju eStudent aplikacije. Kada je Nikola preuzeo i pokrenuo aplikaciju, svi podaci sa Nikolinog računara su postali ograničeni samo na napadače, koji poseduju odgovarajući ključ. Maliciozni softver koji je Nikola iskoristio je &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;ransomware&amp;lt;/span&amp;gt;.&lt;br /&gt;
# Marina je preko USBa postavila maliciozni softver na nastavnički računar u sale 309 u toku pauze između časova. Dok je trajao čas, nastavnik se prijavio na Moodle sistem kako bi studentima pokazao rešenja zadataka sa kolokvijuma. Maliciozni softver je zapamtio podatke koje je uneo nastavnik i omogućio Marini da vidi pitanja za popravni kolokvijum. Maliciozni softver koji je Marina iskoristila je &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;keylogger&amp;lt;/span&amp;gt;. Koji tip napadača je Marina? &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;nerešeno&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 13. zadatak ==&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Заштита података]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A0%D0%B0%D1%87%D1%83%D0%BD%D0%B0%D1%80%D1%81%D0%BA%D0%B8_VLSI_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9F%D0%B8%D1%82%D0%B0%D1%9A%D0%B0&amp;diff=5709</id>
		<title>Рачунарски VLSI системи/Питања</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A0%D0%B0%D1%87%D1%83%D0%BD%D0%B0%D1%80%D1%81%D0%BA%D0%B8_VLSI_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9F%D0%B8%D1%82%D0%B0%D1%9A%D0%B0&amp;diff=5709"/>
		<updated>2023-02-13T11:22:07Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* Resen barrel shifter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Питања&#039;&#039;&#039; на теоријском делу испита се, слично као на [[Рачунарске мреже 1/Питања|РМ1]], дохватају из корпуса питања и нису свим студентима иста, али долазе из сличних области. Испод су излистани неки задаци по категоријама питања.&lt;br /&gt;
&lt;br /&gt;
== SystemVerilog ограничења ==&lt;br /&gt;
У оваквим задацима, једноставно, је дат SystemVerilog код са ограничењима на неке променљиве, и пита се нешто у вези са вредностима које та променљива може да има и њиховим вероватноћама појављивања.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Које вредности може имати променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; из приказане класе &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [3:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint c1 { variable &amp;lt;= 4&#039;d9; }&lt;br /&gt;
    constraint c2 { variable inside {[4:14]}; }&lt;br /&gt;
    constraint c3 { ! (variable inside {4&#039;h0, 4&#039;h5}); }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Могуће вредности, сортиране од најмање ка највећој, у децималном бројном систему, раздвојене запетом без пратећег размака, навести као одговор.&lt;br /&gt;
&lt;br /&gt;
Напомена: Приказ очекиваног формата одговора за следеће произвољно одабране вредности 15, 2, 7 и 10 јесте:&lt;br /&gt;
 2,7,10,15&lt;br /&gt;
&#039;&#039;&#039;Одговор:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;4,6,7,8,9&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Дата је класа &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [2:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint distribution { variable dist { 0:/20, 1:/30, [2:6]:/40, 7:/10 }; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Која је вероватноћа да променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; приликом генерисања псеудослучајне вредности добије вредност &#039;&#039;&#039;4&#039;&#039;&#039;? Вероватноћу представити као разломак у којем су бројилац и именилац узајамно прости бројеви.&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;14,10,5,3,11,27,4,12,26,28,1,29,13&amp;quot;&amp;gt;&lt;br /&gt;
* Бројилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
* Именилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
Које вредности може имати променљива &amp;lt;code&amp;gt;v2&amp;lt;/code&amp;gt; из приказане класе &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    randc bit [3:0] v1;&lt;br /&gt;
    randc bit [3:0] v2;&lt;br /&gt;
&lt;br /&gt;
    constraint c1 { v1 &amp;gt; 4&#039;b0100; }&lt;br /&gt;
    constraint c2 { ! (v1 inside {[4&#039;h8:4&#039;hF]}); }&lt;br /&gt;
    constraint c3 { v2 == v1 * 2 + 1; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Могуће вредности, сортиране од најмање ка највећој, у децималном бројном систему, раздвојене запетом без пратећег размака, навести као одговор.&lt;br /&gt;
&lt;br /&gt;
Напомена: Приказ очекиваног формата одговора за следеће произвољно одабране вредности 15, 2, 7 и 10 јесте:&lt;br /&gt;
 2,7,10,15&lt;br /&gt;
&#039;&#039;&#039;Одговор:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;11,13,15&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Дата је класа &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [2:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint distribution { variable dist { 0:/20, 1:/30, [2:6]:/20, 7:/30 }; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Која је вероватноћа да променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; приликом генерисања псеудослучајне вредности добије вредност &#039;&#039;&#039;4&#039;&#039;&#039;? Вероватноћу представити као разломак у којем су бројилац и именилац узајамно прости бројеви.&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;14,10,5,3,11,27,4,12,26,28,1,29,13&amp;quot;&amp;gt;&lt;br /&gt;
* Бројилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
* Именилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Дата је класа &amp;lt;code&amp;gt;Constraints&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Constraints;&lt;br /&gt;
    rand bit [2:0] variable;&lt;br /&gt;
&lt;br /&gt;
    constraint distribution { variable dist { 0:/20, 1:/30, [2:6]:=20, 7:/30 }; }&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Која је вероватноћа да променљива &amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt; приликом генерисања псеудослучајне вредности добије вредност &#039;&#039;&#039;4&#039;&#039;&#039;? Вероватноћу представити као разломак у којем су бројилац и именилац узајамно прости бројеви.&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;14,10,5,3,11,27,4,12,26,28,1,29,13&amp;quot;&amp;gt;&lt;br /&gt;
* Бројилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
* Именилац: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;нерешено&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сабирачи ==&lt;br /&gt;
У оваквим задацима обично је дат Verilog код одређеног сабирача (једног од типова као што су рађени на предавањима) и питају се ствари у вези са функционисањем тог сабирача.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
У наставку је дата имплементација једног осморазредног сабирача. О ком сабирачу се ради, ако се зна да модул &amp;lt;code&amp;gt;ripple_carry_adder_n&amp;lt;/code&amp;gt; представља &#039;&#039;N&#039;&#039;-разредни сабирач са серијским преносом, а да модул &amp;lt;code&amp;gt;multiplexer_2_1&amp;lt;/code&amp;gt; представља двоулазни мултиплексер ширине &#039;&#039;N&#039;&#039; информационих улаза?&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
module adder_8 (&lt;br /&gt;
    input [7:0] a, b,&lt;br /&gt;
    input carry_in,&lt;br /&gt;
    output [7:0] sum,&lt;br /&gt;
    output carry_out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
    wire carry_3_0, carry_3_1, carry_3;&lt;br /&gt;
    wire [3:0] sum_low_0, sum_low_1, sum_low;&lt;br /&gt;
&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_1 (a[3:0], b[3:0], 1&#039;b0, sum_low_0, carry_3_0);&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_2 (a[3:0], b[3:0], 1&#039;b1, sum_low_1, carry_3_1);&lt;br /&gt;
&lt;br /&gt;
    multiplexer_2_1 #(4) mpx_1 (sum_low_0, sum_low_1, carry_in, sum_low);&lt;br /&gt;
&lt;br /&gt;
    assign carry_3 = (carry_in &amp;amp; carry_3_1) | carry_3_0;&lt;br /&gt;
&lt;br /&gt;
    wire carry_7_0, carry_7_1, carry_7;&lt;br /&gt;
    wire [3:0] sum_high_0, sum_high_1, sum_high;&lt;br /&gt;
&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_3 (a[7:4], b[7:4], 1&#039;b0, sum_high_0, carry_7_0);&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_4 (a[7:4], b[7:4], 1&#039;b1, sum_high_1, carry_7_1);&lt;br /&gt;
&lt;br /&gt;
    multiplexer_2_1 #(4) mpx_2 (sum_high_0, sum_high_1, carry_3, sum_high);&lt;br /&gt;
&lt;br /&gt;
    assign carry_7 = carry_7_0 | (carry_3_0 &amp;amp; carry_7_1) | (carry_in &amp;amp; carry_3_1 &amp;amp; carry_7_1);&lt;br /&gt;
&lt;br /&gt;
    assign sum = {sum_high, sum_low};&lt;br /&gt;
    assign carry_out = carry_7;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# Условни сабирач (&#039;&#039;Conditional Sum Adder&#039;&#039;)&lt;br /&gt;
# Сабирач са серијским преносом (&#039;&#039;Ripple Carry Adder&#039;&#039;)&lt;br /&gt;
# Сабирач са чувањем преноса (&#039;&#039;Carry Save Adder&#039;&#039;)&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Сабирач на основу бита преноса (&#039;&#039;Carry Select Adder&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
# Сабирач са паралелним преносом (&#039;&#039;Carry Lookahead Adder&#039;&#039;)&lt;br /&gt;
# Потпуни сабирач (&#039;&#039;Full Adder&#039;&#039;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Објашњење:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;У коду се види карактеристични &amp;quot;осакаћени мултиплексер&amp;quot; код генерисања преноса &amp;lt;code&amp;gt;carry_3&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;carry_7&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
У наставку је дата непотпуна имплементација четвороразредног сабирача на основу бита преноса (&#039;&#039;Carry Select Adder&#039;&#039;). Допунити имплементацију, ако се зна да модул &amp;lt;code&amp;gt;ripple_carry_adder_n&amp;lt;/code&amp;gt; представља &#039;&#039;N&#039;&#039;-разредни сабирач са серијским преносом, а да модул &amp;lt;code&amp;gt;multiplexer_2_1&amp;lt;/code&amp;gt; представља двоулазни мултиплексер ширине &#039;&#039;N&#039;&#039; информационих улаза?&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
module carry_select_adder_4 (&lt;br /&gt;
    input [3:0] a, b,&lt;br /&gt;
    input carry_in,&lt;br /&gt;
    output [3:0] sum,&lt;br /&gt;
    output carry_out&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
    wire carry_3_0, carry_3_1;&lt;br /&gt;
    wire [3:0] sum_0, sum_1;&lt;br /&gt;
&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_1 (a[3:0], b[3:0], БЕЛИНА_1, sum_0, БЕЛИНА_2);&lt;br /&gt;
    ripple_carry_adder_n #(4) rca_2 (a[3:0], b[3:0], БЕЛИНА_3, sum_1, БЕЛИНА_4);&lt;br /&gt;
&lt;br /&gt;
    multiplexer_2_1 #(4) mpx_1 (sum_0, sum_1, carry_in, sum);&lt;br /&gt;
&lt;br /&gt;
    assign carry_out = (carry_in &amp;amp; carry_3_1) | carry_3_0;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;carry_3_1,1&#039;b1,sum,1&#039;b0,carry_out,carry_in,carry_3_0,sum_0,sum_1&amp;quot;&amp;gt;&lt;br /&gt;
# Белина 1: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1&#039;b0&amp;lt;/span&amp;gt;&lt;br /&gt;
# Белина 2: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;carry_3_0&amp;lt;/span&amp;gt;&lt;br /&gt;
# Белина 3: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1&#039;b1&amp;lt;/span&amp;gt;&lt;br /&gt;
# Белина 4: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;carry_3_1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Објашњење:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ово је само друга варијанта задатка изнад. Једном сабирачу се даје да рачуна као да је улазни пренос 0, а другом да је улазни пренос 1, па се њихови резултати смештају у одговарајуће сигнале.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Временски облици ==&lt;br /&gt;
У оваквим задацима дат је Verilog код са кашњењима и временски облици излазних сигнала у &#039;&#039;ModelSim&#039;&#039;, па се студенти питају да препознају одговарајући временски облик.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Који временски облик одговара следећем изворном коду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;verilog&amp;quot;&amp;gt;&lt;br /&gt;
module delay_module_3 (&lt;br /&gt;
    out1, out2, a, b, c, x, y, z&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
    output reg out1, out2;&lt;br /&gt;
    input a, b, c, x, y, z;&lt;br /&gt;
    wire e, f, g;&lt;br /&gt;
&lt;br /&gt;
    always @(posedge a) out1 = #1 b &amp;amp; c;&lt;br /&gt;
    always @(negedge a) out1 = #1 b | ~c;&lt;br /&gt;
&lt;br /&gt;
    always @(posedge x) out2 = #1 y ^ z;&lt;br /&gt;
    always @(negedge x) out2 = #1 ~y;&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&lt;br /&gt;
module top_display;&lt;br /&gt;
&lt;br /&gt;
    reg a, b, c, x, y, z;&lt;br /&gt;
    wire o1, o2;&lt;br /&gt;
    delay_module_3 d3(o1, o2, a, b, c, x, y, z);&lt;br /&gt;
&lt;br /&gt;
    initial begin&lt;br /&gt;
        a = 1&#039;b0; b = 1&#039;b0; c = 1&#039;b0; x = 1&#039;b0; y = 1&#039;b0; z = 1&#039;b0;&lt;br /&gt;
        #1 b = 1&#039;b1;&lt;br /&gt;
        #2 a = 1&#039;b1; y = 1&#039;b1;&lt;br /&gt;
        #0 c = 1&#039;b1;&lt;br /&gt;
        #2 x = 1&#039;b1;&lt;br /&gt;
        #2 a = 1&#039;b0;&lt;br /&gt;
        #1 b = 1&#039;b0;&lt;br /&gt;
        #3 x = 1&#039;b0;&lt;br /&gt;
        #0 y = 1&#039;b0;&lt;br /&gt;
        #0 $finish;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
endmodule&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 9.jpg|link=]]&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 10.jpg|link=]]&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 11.jpg|link=]]&lt;br /&gt;
# [[Датотека:VLSI zadaci vremenski oblik 12.jpg|link=]]&lt;br /&gt;
# Ниједан од понуђених временских облика.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Померачи ==&lt;br /&gt;
У оваквим задацима дат је Фанел или Барел померач са одређеним карактеристикама, и траже се сви његови међурезултати.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Дат је Фанел померач (&#039;&#039;Funnel Shifter&#039;&#039;) са дванаестобитним улазом и петобитним излазом. Допунити вредности добијене у сваком од корака овог померача као и вредност излзаног податка за следеће улазне вредности:&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;29,16,1A,27,7,14,5A,13,D,B,A7,9&amp;quot;&amp;gt;&lt;br /&gt;
* Улазни податак: 5A7&lt;br /&gt;
* Контролни сигнал (број померања удесно): 4&lt;br /&gt;
* Први корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;5A&amp;lt;/span&amp;gt;&lt;br /&gt;
* Други корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1A&amp;lt;/span&amp;gt;&lt;br /&gt;
* Трећи корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1A&amp;lt;/span&amp;gt;&lt;br /&gt;
* Излазни податак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;1A&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Све вредности су написане у хексадецималном бројном систему.&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Дат је Барел померач (&#039;&#039;Barrel Shifter&#039;&#039;) са осмобитним улазом и осмобитним излазом. Допунити вредности добијене у сваком од корака овог померача као и вредност излзаног податка за следеће улазне вредности:&lt;br /&gt;
&amp;lt;div data-solution=&amp;quot;select&amp;quot; data-options=&amp;quot;5E,F2,97,79,CB,E5,2F&amp;quot;&amp;gt;&lt;br /&gt;
* Улазни податак: 79&lt;br /&gt;
* Контролни сигнал (број померања удесно): 7&lt;br /&gt;
* Први корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;97&amp;lt;/span&amp;gt;&lt;br /&gt;
* Други корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;E5&amp;lt;/span&amp;gt;&lt;br /&gt;
* Трећи корак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;F2&amp;lt;/span&amp;gt;&lt;br /&gt;
* Излазни податак: &amp;lt;span class=&amp;quot;spoiler&amp;quot;&amp;gt;F2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Све вредности су написане у хексадецималном бројном систему.&lt;br /&gt;
&lt;br /&gt;
== Верификација без UVM ==&lt;br /&gt;
У оваквим задацима дат је код из примера верификације без коришћења UVM стандарда са вежби и пита се шта се тачно дешава у коду и зашто.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
У наставку је дат део кода &#039;&#039;Driver&#039;&#039;-a.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Driver;&lt;br /&gt;
&lt;br /&gt;
    virtual reg8_if vif;&lt;br /&gt;
    mailbox mbx;&lt;br /&gt;
    event done;&lt;br /&gt;
&lt;br /&gt;
    task run();&lt;br /&gt;
        @(posedge vif.clk);&lt;br /&gt;
        forever begin&lt;br /&gt;
            dut_item item;&lt;br /&gt;
            mbx.get(item);&lt;br /&gt;
            // ...&lt;br /&gt;
            @(posedge vif.clk);&lt;br /&gt;
            -&amp;gt;done;&lt;br /&gt;
        end&lt;br /&gt;
    endtask&lt;br /&gt;
&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Koja класа чека на догађај &amp;lt;code&amp;gt;done&amp;lt;/code&amp;gt; који се овде окида?&lt;br /&gt;
&lt;br /&gt;
Напомена: Сматрати да се процес верификације врши без коришћења UVM стандарда.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &#039;&#039;Driver&#039;&#039;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&#039;&#039;Generator&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;Monitor&#039;&#039;&lt;br /&gt;
# &#039;&#039;Scoreboard&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Објашњење:&#039;&#039;&#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Први пример са вежби. Генератор чека на овај догађај како не би генерисао више предмета него што драјвер може да конзумира.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
У наставку је дат део кода &#039;&#039;Driver&#039;&#039;-a.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;systemverilog&amp;quot;&amp;gt;&lt;br /&gt;
class Driver;&lt;br /&gt;
&lt;br /&gt;
    virtual reg8_if vif;&lt;br /&gt;
    mailbox mbx;&lt;br /&gt;
    event done;&lt;br /&gt;
&lt;br /&gt;
    task run();&lt;br /&gt;
        @(posedge vif.clk);&lt;br /&gt;
        forever begin&lt;br /&gt;
            dut_item item;&lt;br /&gt;
            mbx.get(item);&lt;br /&gt;
            // ...&lt;br /&gt;
            @(posedge vif.clk);&lt;br /&gt;
            -&amp;gt;done;&lt;br /&gt;
        end&lt;br /&gt;
    endtask&lt;br /&gt;
&lt;br /&gt;
endclass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Koja класа поставља &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; у &#039;&#039;mailbox&#039;&#039; који се овде дохвата?&lt;br /&gt;
&lt;br /&gt;
Напомена: Сматрати да се процес верификације врши без коришћења UVM стандарда.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &#039;&#039;Driver&#039;&#039;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&#039;&#039;Generator&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;Monitor&#039;&#039;&lt;br /&gt;
# &#039;&#039;Scoreboard&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UVM ==&lt;br /&gt;
Ова питања се обично односе на било шта из UVM стандарда.&lt;br /&gt;
&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
Које класе наслеђују класу &amp;lt;code&amp;gt;uvm_transaction&amp;lt;/code&amp;gt;?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&amp;lt;code&amp;gt;uvm_sequence_item&amp;lt;/code&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_driver&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_monitor&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_sequencer&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;uvm_test&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;&amp;lt;code&amp;gt;uvm_sequence&amp;lt;/code&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
Које фазе кроз које пролазе UVM компоненте се реализују као &#039;&#039;task&#039;&#039; уместо као функције?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;multiple&amp;quot;&amp;gt;&lt;br /&gt;
# build&lt;br /&gt;
# connect&lt;br /&gt;
# end of elaboration&lt;br /&gt;
# start of simulation&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;run&amp;lt;/span&amp;gt;&lt;br /&gt;
# extract&lt;br /&gt;
# check&lt;br /&gt;
# report&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рачунарски VLSI системи]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%81%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2022&amp;diff=4794</id>
		<title>Системски софтвер/Септембар 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%81%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2022&amp;diff=4794"/>
		<updated>2022-09-27T14:56:32Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: Pogresan addend&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Испит из септембарског рока 2022.&#039;&#039;&#039; одржан је 14.09. &lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
: Исти задатак се нашао на [[Системски софтвер/Јун 2022#1. задатак|јунском року 2022. године]]&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се процес асемблирања датог ивзорног асемблерског кода за &#039;&#039;amd64&#039;&#039; архитектуру. Резултат асемблирања је предметни програм по &#039;&#039;ELF&#039;&#039; формату. Приказати садржај (1) табеле симбола и (2) релокационих записа &amp;lt;u&amp;gt;строго поштујући школски формат и обавезно у складу са задатом нумерацијом симбола&amp;lt;/u&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
.intel_syntax noprefix&lt;br /&gt;
.section .text&lt;br /&gt;
.global min, la1&lt;br /&gt;
min: enter 0, 0          # 0x00&lt;br /&gt;
     mov rbx, la1        # 0x04&lt;br /&gt;
     cmp rbx, [rbp]+0x12 # 0x0c&lt;br /&gt;
     call var[rip]       # 0x10&lt;br /&gt;
     jle la1             # 0x16&lt;br /&gt;
     mov rax, [rbp]+0x12 # 0x18&lt;br /&gt;
     jmp la2             # 0x1c&lt;br /&gt;
la1: mov rax, rbx        # 0x1e&lt;br /&gt;
la2: leave               # 0x21&lt;br /&gt;
     ret                 # 0x22&lt;br /&gt;
&lt;br /&gt;
.data&lt;br /&gt;
.global var&lt;br /&gt;
.type var, @object&lt;br /&gt;
var:&lt;br /&gt;
.quad la1, la2-4&lt;br /&gt;
.end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Напомена: хексадецимални бројеви наведени у коментару изворног асемблерског кода представљају померај до почетка инструкције у том реду гледано од почетка секције којој инструкција припада. Такође, усвојити претпоставку да је величина операционог кода:&lt;br /&gt;
* 2B за инструкцију &amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt; за &#039;&#039;PC&#039;&#039; релативно адресирање,&lt;br /&gt;
* 4B за инструкцију &amp;lt;code&amp;gt;mov&amp;lt;/code&amp;gt; за апсолутно адресирање и&lt;br /&gt;
* 1B за инструкције &amp;lt;code&amp;gt;jle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;jmp&amp;lt;/code&amp;gt; за &#039;&#039;PC&#039;&#039; релативно адресирање.&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Видети [[Системски софтвер/Јун 2022#1. задатак|овде]].&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се макро процесор са угњежденим макро дефиницијама, без угњеждених макро експанзија.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Шта је резултат макро експанзије задатог текста?&lt;br /&gt;
# Приказати операције над стеком параматера према редоследу њиховог извођења користећи нотације &#039;&#039;PUSH(...)&#039;&#039; и &#039;&#039;POP(...)&#039;&#039; при чему уместо три тачкице треба навести листу вредности које се смештају или скидају са стека.&lt;br /&gt;
# Приказати операције над стеком аргумената према редоследу њиховог извођења користећи нотације &#039;&#039;PUSH(...)&#039;&#039; и &#039;&#039;POP(...)&#039;&#039; при чему уместо три тачкице треба навести листу вредности које се смештају или скидају са стека.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 MCDEFN&lt;br /&gt;
 M1 A, B, C D&lt;br /&gt;
 M2 A, B, C&lt;br /&gt;
 MCDEFN&lt;br /&gt;
 M2 C, D, F&lt;br /&gt;
 A, B, C, D, E&lt;br /&gt;
 MCEND&lt;br /&gt;
 M2 C, D, F&lt;br /&gt;
 MCEND&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
 M1 4, 5, 6, 7&lt;br /&gt;
 M1 4, 5, 6, 7&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
=== Решење ===&lt;br /&gt;
a)&lt;br /&gt;
&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
 M2 4, 5, 6&lt;br /&gt;
 M2 6, 7, F&lt;br /&gt;
 M2 4, 5, 6&lt;br /&gt;
 M2 6, 7, F&lt;br /&gt;
 4, 5, 1, 2, E&lt;br /&gt;
&lt;br /&gt;
b)&lt;br /&gt;
&lt;br /&gt;
 PUSH(((1,0),A), ((1,1),B), ((1,2),C), ((1,3),D))&lt;br /&gt;
 PUSH(((2,0),C), ((2,1),D), ((2,2),F))&lt;br /&gt;
 POP(((2,0),C), ((2,1),D), ((2,2),F))&lt;br /&gt;
 POP(((1,0),A), ((1,1),B), ((1,2),C), ((1,3),D))&lt;br /&gt;
&lt;br /&gt;
c)&lt;br /&gt;
&lt;br /&gt;
 PUSH((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 POP((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 PUSH((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 POP((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 PUSH((0,1), (1,2), (2,3))&lt;br /&gt;
 POP((0,1), (1,2), (2,3))&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматрају се два објектна програма &amp;lt;code&amp;gt;levi.o&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;desni.o&amp;lt;/code&amp;gt; добијена помоћу &#039;&#039;GNU&#039;&#039; асемблера.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 0052  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0000  PROGBITS    WA  .data&lt;br /&gt;
   4: 0000000 0012  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    4  .bss&lt;br /&gt;
   4: 0000013 0000  FUNC  GLOB   1  a&lt;br /&gt;
   5: 0000010 0000  NOTYP GLOB   4  d&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB UND  c&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000004 R_X86_64_32S     4 (a)             0&lt;br /&gt;
 000000b R_X86_64_PC32    6 (c)            -4&lt;br /&gt;
|| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 000a  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0008  PROGBITS    WA  .data&lt;br /&gt;
   5: 0000000 0016  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    5  .bss&lt;br /&gt;
   4: 0000004 0000  NOTYP LOC    3  b&lt;br /&gt;
   5: 0000008 0000  OBJCT GLOB   5  c&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB UND  a&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000003 R_X86_64_PC32    6 (a)            -4&lt;br /&gt;
 #.rela.data&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000002 R_X86_64_32      3 (.bss)          0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Приказати излаз линкера &amp;lt;code&amp;gt;izlaz.o&amp;lt;/code&amp;gt; тако да буде испоштовано све што је наведено у наставку:&lt;br /&gt;
* &amp;lt;u&amp;gt;строго поштујући школски формат и обавезно са нумерацијом у табели симбола према следећем редоследу&amp;lt;/u&amp;gt;: &amp;lt;code&amp;gt;UND, .text, .data, .bss, b, c, d, a &amp;lt;/code&amp;gt;&lt;br /&gt;
* повезивање се иницира следећом командом &amp;lt;code&amp;gt;ld --relocatable -o izlaz.o -T script.ld levi.o desni.o&amp;lt;/code&amp;gt;&lt;br /&gt;
* линкерска скрипта &amp;lt;code&amp;gt;script.ld&amp;lt;/code&amp;gt; има следећи садржај: &lt;br /&gt;
 SECTIONS&lt;br /&gt;
 {&lt;br /&gt;
    .text : { *(.text) }&lt;br /&gt;
    .data : { *(.data) }&lt;br /&gt;
    .bss : { *.(bss) }&lt;br /&gt;
 }&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 005c  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0008  PROGBITS    WA  .data&lt;br /&gt;
   4: 0000000 0028  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    4  .bss&lt;br /&gt;
   4: 0000004 0000  NOTYP LOC    3  b&lt;br /&gt;
   5: 000001a 0000  OBJCT GLOB   5  c&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB   4  d&lt;br /&gt;
   7: 0000000 0000  FUNC GLOB    1  a&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000004 R_X86_64_32S     7 (a)             0&lt;br /&gt;
 000000b R_X86_64_PC32    5 (c)            -4&lt;br /&gt;
 0000055 R_X86_64_PC32    7 (a)            -4&lt;br /&gt;
 #.rela.data&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000002 R_X86_64_32      3 (.bss)          0&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
: Исти задатак се нашао на [[Системски софтвер/Јун 2022#4. задатак|јунском року 2022. године]]&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се &#039;&#039;JIT&#039;&#039; емулатор и емулирање следећег програма.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Означити све блокове који ће у току рада емулатора бити преведени. За сваки преведени блок навести јединствену идентификацију у облику &amp;lt;code&amp;gt;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;n&amp;amp;gt;(&amp;amp;lt;x&amp;amp;gt;-&amp;amp;lt;y&amp;amp;gt;)&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;amp;lt;n&amp;amp;gt;&amp;lt;/code&amp;gt; је &amp;lt;u&amp;gt;редни број блока у погледу тренутка његовог превођења при чему нумерација почиње од броја један&amp;lt;/u&amp;gt;, &amp;amp;lt;x&amp;amp;gt; је редни број прве а &amp;amp;lt;y&amp;amp;gt; редни број последње линије изворног кода блока).&lt;br /&gt;
# Навести секвенцу извршавања. У секвенци извршавања могу се нађи само &amp;lt;code&amp;gt;GP&amp;lt;/code&amp;gt; (сваки пут када се емулатор врати у главну петљу), &amp;lt;code&amp;gt;BH&amp;lt;/code&amp;gt; (сваки пут када се позове функција која помаже у разрешавању скокова) и &amp;lt;code&amp;gt;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;n&amp;amp;gt;&amp;lt;/code&amp;gt; (сваки пут када се изврши дати блок у складу са ознакама из претходне тачке).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
      BEG       ; line  1&lt;br /&gt;
      LDI 2     ; line  2   ( PZ) A &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
  L1  SUB B     ; line  3   (CPZ) A &amp;lt;= A - mem[&amp;lt;V&amp;gt;]&lt;br /&gt;
  L2  ADD C     ; line  4   (CPZ) A &amp;lt;= A + mem[&amp;lt;V&amp;gt;]&lt;br /&gt;
      BNG L2    ; line  5         if (!flags[P]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
      BZE L3    ; line  6         if ( flags[Z]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
      SBI 2     ; line  7   (CPZ) A &amp;lt;= A - &amp;lt;V&amp;gt;&lt;br /&gt;
      BNZ L1    ; line  8         if (!flags[Z]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
  L3  HLT       ; line  9         stop execution&lt;br /&gt;
  B   DC 9      ; line 10&lt;br /&gt;
  C   DC 2      ; line 11&lt;br /&gt;
      END       ; line 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Видети [[Системски софтвер/Јун 2022#4. задатак|овде]].&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Системски софтвер]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%81%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2022&amp;diff=4762</id>
		<title>Системски софтвер/Септембар 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%81%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2022&amp;diff=4762"/>
		<updated>2022-09-21T20:53:39Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Испит из септембарског рока 2022.&#039;&#039;&#039; одржан је 14.09. &lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се процес асемблирања датог ивзорног асемблерског кода за &#039;&#039;amd64&#039;&#039; архитектуру. Резултат асемблирања је предметни програм по &#039;&#039;ELF&#039;&#039; формату. Приказати садржај (1) табеле симбола и (2) релокационих записа &amp;lt;u&amp;gt;строго поштујући школски формат и обавезно у складу са задатом нумерацијом симбола&amp;lt;/u&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
.intel_syntax noprefix&lt;br /&gt;
.section .text&lt;br /&gt;
.global min, la1&lt;br /&gt;
min: enter 0, 0          # 0x00&lt;br /&gt;
     mov rbx, la1        # 0x04&lt;br /&gt;
     cmp rbx, [rbp]+0x12 # 0x0c&lt;br /&gt;
     call var[rip]       # 0x10&lt;br /&gt;
     jle la1             # 0x16&lt;br /&gt;
     mov rax, [rbp]+0x12 # 0x18&lt;br /&gt;
     jmp la2             # 0x1c&lt;br /&gt;
la1: mov rax, rbx        # 0x1e&lt;br /&gt;
la2: leave               # 0x21&lt;br /&gt;
     ret                 # 0x22&lt;br /&gt;
&lt;br /&gt;
.data&lt;br /&gt;
.global var&lt;br /&gt;
.type var, @object&lt;br /&gt;
var:&lt;br /&gt;
.quad la1, la2-4&lt;br /&gt;
.end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Напомена: хексадецимални бројеви наведени у коментару изворног асемблерског кода представљају померај до почетка инструкције у том реду гледано од почетка секције којој инструкција припада. Такође, усвојити претпоставку да је величина операционог кода:&lt;br /&gt;
* 2B за инструкцију &amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt; за &#039;&#039;PC&#039;&#039; релативно адресирање,&lt;br /&gt;
* 4B за инструкцију &amp;lt;code&amp;gt;mov&amp;lt;/code&amp;gt; за апсолутно адресирање и&lt;br /&gt;
* 1B за инструкције &amp;lt;code&amp;gt;jle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;jmp&amp;lt;/code&amp;gt; за &#039;&#039;PC&#039;&#039; релативно адресирање.&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Видети [[Системски софтвер/Јун 2022#1. задатак|овде]].&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се макро процесор са угњежденим макро дефиницијама, без угњеждених макро експанзија.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Шта је резултат макро експанзије задатог текста?&lt;br /&gt;
# Приказати операције над стеком параматера према редоследу њиховог извођења користећи нотације &#039;&#039;PUSH(...)&#039;&#039; и &#039;&#039;POP(...)&#039;&#039; при чему уместо три тачкице треба навести листу вредности које се смештају или скидају са стека.&lt;br /&gt;
# Приказати операције над стеком аргумената према редоследу њиховог извођења користећи нотације &#039;&#039;PUSH(...)&#039;&#039; и &#039;&#039;POP(...)&#039;&#039; при чему уместо три тачкице треба навести листу вредности које се смештају или скидају са стека.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 MCDEFN&lt;br /&gt;
 M1 A, B, C D&lt;br /&gt;
 M2 A, B, C&lt;br /&gt;
 MCDEFN&lt;br /&gt;
 M2 C, D, F&lt;br /&gt;
 A, B, C, D, E&lt;br /&gt;
 MCEND&lt;br /&gt;
 M2 C, D, F&lt;br /&gt;
 MCEND&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
 M1 4, 5, 6, 7&lt;br /&gt;
 M1 4, 5, 6, 7&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
a)&lt;br /&gt;
&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
 M2 4, 5, 6&lt;br /&gt;
 M2 6, 7, F&lt;br /&gt;
 M2 4, 5, 6&lt;br /&gt;
 M2 6, 7, F&lt;br /&gt;
 4, 5, 1, 2, E&lt;br /&gt;
&lt;br /&gt;
b)&lt;br /&gt;
&lt;br /&gt;
 PUSH(((1,0),A), ((1,1),B), ((1,2),C), ((1,3),D))&lt;br /&gt;
 PUSH(((2,0),C), ((2,1),D), ((2,2),F))&lt;br /&gt;
 POP(((2,0),C), ((2,1),D), ((2,2),F))&lt;br /&gt;
 POP(((1,0),A), ((1,1),B), ((1,2),C), ((1,3),D))&lt;br /&gt;
&lt;br /&gt;
c)&lt;br /&gt;
&lt;br /&gt;
 PUSH((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 POP((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 PUSH((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 POP((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 PUSH((0,1), (1,2), (2,3))&lt;br /&gt;
 POP((0,1), (1,2), (2,3))&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматрају се два објектна програма &amp;lt;code&amp;gt;levi.o&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;desni.o&amp;lt;/code&amp;gt; добијена помоћу &#039;&#039;GNU&#039;&#039; асемблера.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 0052  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0000  PROGBITS    WA  .data&lt;br /&gt;
   4: 0000000 0012  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    4  .bss&lt;br /&gt;
   4: 0000013 0000  FUNC  GLOB   1  a&lt;br /&gt;
   5: 0000010 0000  NOTYP GLOB   4  d&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB UND  c&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000004 R_X86_64_32S     4 (a)             0&lt;br /&gt;
 000000b R_X86_64_PC32    6 (c)            -4&lt;br /&gt;
|| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 000a  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0008  PROGBITS    WA  .data&lt;br /&gt;
   5: 0000000 0016  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    5  .bss&lt;br /&gt;
   4: 0000004 0000  NOTYP LOC    3  b&lt;br /&gt;
   5: 0000008 0000  OBJCT GLOB   5  c&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB UND  a&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000003 R_X86_64_PC32    6 (a)            -4&lt;br /&gt;
 #.rela.data&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000002 R_X86_64_32      3 (.bss)          0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Приказати излаз линкера &amp;lt;code&amp;gt;izlaz.o&amp;lt;/code&amp;gt; тако да буде испоштовано све што је наведено у наставку:&lt;br /&gt;
* &amp;lt;u&amp;gt;строго поштујући школски формат и обавезно са нумерацијом у табели симбола према следећем редоследу&amp;lt;/u&amp;gt;: &amp;lt;code&amp;gt;UND, .text, .data, .bss, b, c, d, a &amp;lt;/code&amp;gt;&lt;br /&gt;
* повезивање се иницира следећом командом &amp;lt;code&amp;gt;ld --relocatable -o izlaz.o -T script.ld levi.o desni.o&amp;lt;/code&amp;gt;&lt;br /&gt;
* линкерска скрипта &amp;lt;code&amp;gt;script.ld&amp;lt;/code&amp;gt; има следећи садржај: &lt;br /&gt;
 SECTIONS&lt;br /&gt;
 {&lt;br /&gt;
    .text : { *(.text) }&lt;br /&gt;
    .data : { *(.data) }&lt;br /&gt;
    .bss : { *.(bss) }&lt;br /&gt;
 }&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 005c  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0008  PROGBITS    WA  .data&lt;br /&gt;
   4: 0000000 0028  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    4  .bss&lt;br /&gt;
   4: 0000004 0000  NOTYP LOC    3  b&lt;br /&gt;
   5: 000001a 0000  OBJCT GLOB   5  c&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB   4  d&lt;br /&gt;
   7: 0000000 0000  FUNC GLOB   1  a&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000004 R_X86_64_32S     7 (a)            -4&lt;br /&gt;
 000000b R_X86_64_PC32    5 (c)            -4&lt;br /&gt;
 0000055 R_X86_64_PC32    7 (a)            -4&lt;br /&gt;
 #.rela.data&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000002 R_X86_64_32      3 (.bss)          0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
: Исти задатак се нашао на [[Системски софтвер/Јун 2022#4. задатак|јунском року 2022. године]]&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се &#039;&#039;JIT&#039;&#039; емулатор и емулирање следећег програма.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Означити све блокове који ће у току рада емулатора бити преведени. За сваки преведени блок навести јединствену идентификацију у облику &amp;lt;code&amp;gt;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;n&amp;amp;gt;(&amp;amp;lt;x&amp;amp;gt;-&amp;amp;lt;y&amp;amp;gt;)&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;amp;lt;n&amp;amp;gt;&amp;lt;/code&amp;gt; је &amp;lt;u&amp;gt;редни број блока у погледу тренутка његовог превођења при чему нумерација почиње од броја један&amp;lt;/u&amp;gt;, &amp;amp;lt;x&amp;amp;gt; је редни број прве а &amp;amp;lt;y&amp;amp;gt; редни број последње линије изворног кода блока).&lt;br /&gt;
# Навести секвенцу извршавања. У секвенци извршавања могу се нађи само &amp;lt;code&amp;gt;GP&amp;lt;/code&amp;gt; (сваки пут када се емулатор врати у главну петљу), &amp;lt;code&amp;gt;BH&amp;lt;/code&amp;gt; (сваки пут када се позове функција која помаже у разрешавању скокова) и &amp;lt;code&amp;gt;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;n&amp;amp;gt;&amp;lt;/code&amp;gt; (сваки пут када се изврши дати блок у складу са ознакама из претходне тачке).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
      BEG       ; line  1&lt;br /&gt;
      LDI 2     ; line  2   ( PZ) A &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
  L1  SUB B     ; line  3   (CPZ) A &amp;lt;= A - mem[&amp;lt;V&amp;gt;]&lt;br /&gt;
  L2  ADD C     ; line  4   (CPZ) A &amp;lt;= A + mem[&amp;lt;V&amp;gt;]&lt;br /&gt;
      BNG L2    ; line  5         if (!flags[P]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
      BZE L3    ; line  6         if ( flags[Z]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
      SBI 2     ; line  7   (CPZ) A &amp;lt;= A - &amp;lt;V&amp;gt;&lt;br /&gt;
      BNZ L1    ; line  8         if (!flags[Z]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
  L3  HLT       ; line  9         stop execution&lt;br /&gt;
  B   DC 9      ; line 10&lt;br /&gt;
  C   DC 2      ; line 11&lt;br /&gt;
      END       ; line 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Видети [[Системски софтвер/Јун 2022#4. задатак|овде]].&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Системски софтвер]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%81%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2022&amp;diff=4761</id>
		<title>Системски софтвер/Септембар 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%81%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2022&amp;diff=4761"/>
		<updated>2022-09-21T20:52:27Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* Greska u trecem zadatku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Испит из септембарског рока 2022.&#039;&#039;&#039; одржан је 14.09. &lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се процес асемблирања датог ивзорног асемблерског кода за &#039;&#039;amd64&#039;&#039; архитектуру. Резултат асемблирања је предметни програм по &#039;&#039;ELF&#039;&#039; формату. Приказати садржај (1) табеле симбола и (2) релокационих записа &amp;lt;u&amp;gt;строго поштујући школски формат и обавезно у складу са задатом нумерацијом симбола&amp;lt;/u&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
.intel_syntax noprefix&lt;br /&gt;
.section .text&lt;br /&gt;
.global min, la1&lt;br /&gt;
min: enter 0, 0          # 0x00&lt;br /&gt;
     mov rbx, la1        # 0x04&lt;br /&gt;
     cmp rbx, [rbp]+0x12 # 0x0c&lt;br /&gt;
     call var[rip]       # 0x10&lt;br /&gt;
     jle la1             # 0x16&lt;br /&gt;
     mov rax, [rbp]+0x12 # 0x18&lt;br /&gt;
     jmp la2             # 0x1c&lt;br /&gt;
la1: mov rax, rbx        # 0x1e&lt;br /&gt;
la2: leave               # 0x21&lt;br /&gt;
     ret                 # 0x22&lt;br /&gt;
&lt;br /&gt;
.data&lt;br /&gt;
.global var&lt;br /&gt;
.type var, @object&lt;br /&gt;
var:&lt;br /&gt;
.quad la1, la2-4&lt;br /&gt;
.end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Напомена: хексадецимални бројеви наведени у коментару изворног асемблерског кода представљају померај до почетка инструкције у том реду гледано од почетка секције којој инструкција припада. Такође, усвојити претпоставку да је величина операционог кода:&lt;br /&gt;
* 2B за инструкцију &amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt; за &#039;&#039;PC&#039;&#039; релативно адресирање,&lt;br /&gt;
* 4B за инструкцију &amp;lt;code&amp;gt;mov&amp;lt;/code&amp;gt; за апсолутно адресирање и&lt;br /&gt;
* 1B за инструкције &amp;lt;code&amp;gt;jle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;jmp&amp;lt;/code&amp;gt; за &#039;&#039;PC&#039;&#039; релативно адресирање.&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Видети [[Системски софтвер/Јун 2022#1. задатак|овде]].&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се макро процесор са угњежденим макро дефиницијама, без угњеждених макро експанзија.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Шта је резултат макро експанзије задатог текста?&lt;br /&gt;
# Приказати операције над стеком параматера према редоследу њиховог извођења користећи нотације &#039;&#039;PUSH(...)&#039;&#039; и &#039;&#039;POP(...)&#039;&#039; при чему уместо три тачкице треба навести листу вредности које се смештају или скидају са стека.&lt;br /&gt;
# Приказати операције над стеком аргумената према редоследу њиховог извођења користећи нотације &#039;&#039;PUSH(...)&#039;&#039; и &#039;&#039;POP(...)&#039;&#039; при чему уместо три тачкице треба навести листу вредности које се смештају или скидају са стека.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 MCDEFN&lt;br /&gt;
 M1 A, B, C D&lt;br /&gt;
 M2 A, B, C&lt;br /&gt;
 MCDEFN&lt;br /&gt;
 M2 C, D, F&lt;br /&gt;
 A, B, C, D, E&lt;br /&gt;
 MCEND&lt;br /&gt;
 M2 C, D, F&lt;br /&gt;
 MCEND&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
 M1 4, 5, 6, 7&lt;br /&gt;
 M1 4, 5, 6, 7&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
a)&lt;br /&gt;
&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
 M2 4, 5, 6&lt;br /&gt;
 M2 6, 7, F&lt;br /&gt;
 M2 4, 5, 6&lt;br /&gt;
 M2 6, 7, F&lt;br /&gt;
 4, 5, 1, 2, E&lt;br /&gt;
&lt;br /&gt;
b)&lt;br /&gt;
&lt;br /&gt;
 PUSH(((1,0),A), ((1,1),B), ((1,2),C), ((1,3),D))&lt;br /&gt;
 PUSH(((2,0),C), ((2,1),D), ((2,2),F))&lt;br /&gt;
 POP(((2,0),C), ((2,1),D), ((2,2),F))&lt;br /&gt;
 POP(((1,0),A), ((1,1),B), ((1,2),C), ((1,3),D))&lt;br /&gt;
&lt;br /&gt;
c)&lt;br /&gt;
&lt;br /&gt;
 PUSH((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 POP((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 PUSH((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 POP((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 PUSH((0,1), (1,2), (2,3))&lt;br /&gt;
 POP((0,1), (1,2), (2,3))&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматрају се два објектна програма &amp;lt;code&amp;gt;levi.o&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;desni.o&amp;lt;/code&amp;gt; добијена помоћу &#039;&#039;GNU&#039;&#039; асемблера.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 0052  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0000  PROGBITS    WA  .data&lt;br /&gt;
   4: 0000000 0012  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    4  .bss&lt;br /&gt;
   4: 0000013 0000  FUNC  GLOB   1  a&lt;br /&gt;
   5: 0000010 0000  NOTYP GLOB   4  d&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB UND  c&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000004 R_X86_64_32S     4 (a)             0&lt;br /&gt;
 000000b R_X86_64_PC32    6 (c)            -4&lt;br /&gt;
|| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 000a  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0008  PROGBITS    WA  .data&lt;br /&gt;
   5: 0000000 0016  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    5  .bss&lt;br /&gt;
   4: 0000004 0000  NOTYP LOC    3  b&lt;br /&gt;
   5: 0000008 0000  OBJCT GLOB   5  c&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB UND  a&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000003 R_X86_64_PC32    6 (a)            -4&lt;br /&gt;
 #.rela.data&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000002 R_X86_64_32      3 (.bss)          0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Приказати излаз линкера &amp;lt;code&amp;gt;izlaz.o&amp;lt;/code&amp;gt; тако да буде испоштовано све што је наведено у наставку:&lt;br /&gt;
* &amp;lt;u&amp;gt;строго поштујући школски формат и обавезно са нумерацијом у табели симбола према следећем редоследу&amp;lt;/u&amp;gt;: &amp;lt;code&amp;gt;UND, .text, .data, .bss, b, c, d, a &amp;lt;/code&amp;gt;&lt;br /&gt;
* повезивање се иницира следећом командом &amp;lt;code&amp;gt;ld --relocatable -o izlaz.o -T script.ld levi.o desni.o&amp;lt;/code&amp;gt;&lt;br /&gt;
* линкерска скрипта &amp;lt;code&amp;gt;script.ld&amp;lt;/code&amp;gt; има следећи садржај: &lt;br /&gt;
 SECTIONS&lt;br /&gt;
 {&lt;br /&gt;
    .text : { *(.text) }&lt;br /&gt;
    .data : { *(.data) }&lt;br /&gt;
    .bss : { *.(bss) }&lt;br /&gt;
 }&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 005c  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0008  PROGBITS    WA  .data&lt;br /&gt;
   4: 0000000 0028  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    4  .bss&lt;br /&gt;
   4: 0000004 0000  NOTYP LOC    3  b&lt;br /&gt;
   5: 000001a 0000  OBJCT GLOB   5  c&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB   4  d&lt;br /&gt;
   7: 0000000 0000  NOTYP FUNC   1  a&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000004 R_X86_64_32S     7 (a)            -4&lt;br /&gt;
 000000b R_X86_64_PC32    5 (c)            -4&lt;br /&gt;
 0000055 R_X86_64_PC32    7 (a)            -4&lt;br /&gt;
 #.rela.data&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000002 R_X86_64_32      3 (.bss)          0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
: Исти задатак се нашао на [[Системски софтвер/Јун 2022#4. задатак|јунском року 2022. године]]&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се &#039;&#039;JIT&#039;&#039; емулатор и емулирање следећег програма.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Означити све блокове који ће у току рада емулатора бити преведени. За сваки преведени блок навести јединствену идентификацију у облику &amp;lt;code&amp;gt;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;n&amp;amp;gt;(&amp;amp;lt;x&amp;amp;gt;-&amp;amp;lt;y&amp;amp;gt;)&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;amp;lt;n&amp;amp;gt;&amp;lt;/code&amp;gt; је &amp;lt;u&amp;gt;редни број блока у погледу тренутка његовог превођења при чему нумерација почиње од броја један&amp;lt;/u&amp;gt;, &amp;amp;lt;x&amp;amp;gt; је редни број прве а &amp;amp;lt;y&amp;amp;gt; редни број последње линије изворног кода блока).&lt;br /&gt;
# Навести секвенцу извршавања. У секвенци извршавања могу се нађи само &amp;lt;code&amp;gt;GP&amp;lt;/code&amp;gt; (сваки пут када се емулатор врати у главну петљу), &amp;lt;code&amp;gt;BH&amp;lt;/code&amp;gt; (сваки пут када се позове функција која помаже у разрешавању скокова) и &amp;lt;code&amp;gt;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;n&amp;amp;gt;&amp;lt;/code&amp;gt; (сваки пут када се изврши дати блок у складу са ознакама из претходне тачке).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
      BEG       ; line  1&lt;br /&gt;
      LDI 2     ; line  2   ( PZ) A &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
  L1  SUB B     ; line  3   (CPZ) A &amp;lt;= A - mem[&amp;lt;V&amp;gt;]&lt;br /&gt;
  L2  ADD C     ; line  4   (CPZ) A &amp;lt;= A + mem[&amp;lt;V&amp;gt;]&lt;br /&gt;
      BNG L2    ; line  5         if (!flags[P]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
      BZE L3    ; line  6         if ( flags[Z]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
      SBI 2     ; line  7   (CPZ) A &amp;lt;= A - &amp;lt;V&amp;gt;&lt;br /&gt;
      BNZ L1    ; line  8         if (!flags[Z]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
  L3  HLT       ; line  9         stop execution&lt;br /&gt;
  B   DC 9      ; line 10&lt;br /&gt;
  C   DC 2      ; line 11&lt;br /&gt;
      END       ; line 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Видети [[Системски софтвер/Јун 2022#4. задатак|овде]].&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Системски софтвер]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%81%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2022&amp;diff=4760</id>
		<title>Системски софтвер/Септембар 2022</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%81%D0%BA%D0%B8_%D1%81%D0%BE%D1%84%D1%82%D0%B2%D0%B5%D1%80/%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2022&amp;diff=4760"/>
		<updated>2022-09-21T19:33:26Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: Resen septembarski rok&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Испит из септембарског рока 2022.&#039;&#039;&#039; одржан је 14.09. &lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се процес асемблирања датог ивзорног асемблерског кода за &#039;&#039;amd64&#039;&#039; архитектуру. Резултат асемблирања је предметни програм по &#039;&#039;ELF&#039;&#039; формату. Приказати садржај (1) табеле симбола и (2) релокационих записа &amp;lt;u&amp;gt;строго поштујући школски формат и обавезно у складу са задатом нумерацијом симбола&amp;lt;/u&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
.intel_syntax noprefix&lt;br /&gt;
.section .text&lt;br /&gt;
.global min, la1&lt;br /&gt;
min: enter 0, 0          # 0x00&lt;br /&gt;
     mov rbx, la1        # 0x04&lt;br /&gt;
     cmp rbx, [rbp]+0x12 # 0x0c&lt;br /&gt;
     call var[rip]       # 0x10&lt;br /&gt;
     jle la1             # 0x16&lt;br /&gt;
     mov rax, [rbp]+0x12 # 0x18&lt;br /&gt;
     jmp la2             # 0x1c&lt;br /&gt;
la1: mov rax, rbx        # 0x1e&lt;br /&gt;
la2: leave               # 0x21&lt;br /&gt;
     ret                 # 0x22&lt;br /&gt;
&lt;br /&gt;
.data&lt;br /&gt;
.global var&lt;br /&gt;
.type var, @object&lt;br /&gt;
var:&lt;br /&gt;
.quad la1, la2-4&lt;br /&gt;
.end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Напомена: хексадецимални бројеви наведени у коментару изворног асемблерског кода представљају померај до почетка инструкције у том реду гледано од почетка секције којој инструкција припада. Такође, усвојити претпоставку да је величина операционог кода:&lt;br /&gt;
* 2B за инструкцију &amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt; за &#039;&#039;PC&#039;&#039; релативно адресирање,&lt;br /&gt;
* 4B за инструкцију &amp;lt;code&amp;gt;mov&amp;lt;/code&amp;gt; за апсолутно адресирање и&lt;br /&gt;
* 1B за инструкције &amp;lt;code&amp;gt;jle&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;jmp&amp;lt;/code&amp;gt; за &#039;&#039;PC&#039;&#039; релативно адресирање.&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Видети [[Системски софтвер/Јун 2022#1. задатак|овде]].&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се макро процесор са угњежденим макро дефиницијама, без угњеждених макро експанзија.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Шта је резултат макро експанзије задатог текста?&lt;br /&gt;
# Приказати операције над стеком параматера према редоследу њиховог извођења користећи нотације &#039;&#039;PUSH(...)&#039;&#039; и &#039;&#039;POP(...)&#039;&#039; при чему уместо три тачкице треба навести листу вредности које се смештају или скидају са стека.&lt;br /&gt;
# Приказати операције над стеком аргумената према редоследу њиховог извођења користећи нотације &#039;&#039;PUSH(...)&#039;&#039; и &#039;&#039;POP(...)&#039;&#039; при чему уместо три тачкице треба навести листу вредности које се смештају или скидају са стека.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 MCDEFN&lt;br /&gt;
 M1 A, B, C D&lt;br /&gt;
 M2 A, B, C&lt;br /&gt;
 MCDEFN&lt;br /&gt;
 M2 C, D, F&lt;br /&gt;
 A, B, C, D, E&lt;br /&gt;
 MCEND&lt;br /&gt;
 M2 C, D, F&lt;br /&gt;
 MCEND&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
 M1 4, 5, 6, 7&lt;br /&gt;
 M1 4, 5, 6, 7&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
a)&lt;br /&gt;
&lt;br /&gt;
 M2 1, 2, 3&lt;br /&gt;
 M2 4, 5, 6&lt;br /&gt;
 M2 6, 7, F&lt;br /&gt;
 M2 4, 5, 6&lt;br /&gt;
 M2 6, 7, F&lt;br /&gt;
 4, 5, 1, 2, E&lt;br /&gt;
&lt;br /&gt;
b)&lt;br /&gt;
&lt;br /&gt;
 PUSH(((1,0),A), ((1,1),B), ((1,2),C), ((1,3),D))&lt;br /&gt;
 PUSH(((2,0),C), ((2,1),D), ((2,2),F))&lt;br /&gt;
 POP(((2,0),C), ((2,1),D), ((2,2),F))&lt;br /&gt;
 POP(((1,0),A), ((1,1),B), ((1,2),C), ((1,3),D))&lt;br /&gt;
&lt;br /&gt;
c)&lt;br /&gt;
&lt;br /&gt;
 PUSH((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 POP((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 PUSH((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 POP((0,4), (1,5), (2,6), (3,7))&lt;br /&gt;
 PUSH((0,1), (1,2), (2,3))&lt;br /&gt;
 POP((0,1), (1,2), (2,3))&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматрају се два објектна програма &amp;lt;code&amp;gt;levi.o&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;desni.o&amp;lt;/code&amp;gt; добијена помоћу &#039;&#039;GNU&#039;&#039; асемблера.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 0052  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0000  PROGBITS    WA  .data&lt;br /&gt;
   4: 0000000 0012  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    4  .bss&lt;br /&gt;
   4: 0000013 0000  FUNC  GLOB   1  a&lt;br /&gt;
   5: 0000010 0000  NOTYP GLOB   4  d&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB UND  c&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000004 R_X86_64_32S     4 (a)             0&lt;br /&gt;
 000000b R_X86_64_PC32    6 (c)            -4&lt;br /&gt;
|| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 000a  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0008  PROGBITS    WA  .data&lt;br /&gt;
   5: 0000000 0016  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    5  .bss&lt;br /&gt;
   4: 0000004 0000  NOTYP LOC    3  b&lt;br /&gt;
   5: 0000008 0000  OBJCT GLOB   5  c&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB UND  a&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000003 R_X86_64_PC32    6 (a)            -4&lt;br /&gt;
 #.rela.data&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000002 R_X86_64_32      3 (.bss)          0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Приказати излаз линкера &amp;lt;code&amp;gt;izlaz.o&amp;lt;/code&amp;gt; тако да буде испоштовано све што је наведено у наставку:&lt;br /&gt;
* &amp;lt;u&amp;gt;строго поштујући школски формат и обавезно са нумерацијом у табели симбола према следећем редоследу&amp;lt;/u&amp;gt;: &amp;lt;code&amp;gt;UND, .text, .data, .bss, b, c, d, a &amp;lt;/code&amp;gt;&lt;br /&gt;
* повезивање се иницира следећом командом &amp;lt;code&amp;gt;ld --relocatable -o izlaz.o -T script.ld levi.o desni.o&amp;lt;/code&amp;gt;&lt;br /&gt;
* линкерска скрипта &amp;lt;code&amp;gt;script.ld&amp;lt;/code&amp;gt; има следећи садржај: &lt;br /&gt;
 SECTIONS&lt;br /&gt;
 {&lt;br /&gt;
    .text : { *(.text) }&lt;br /&gt;
    .data : { *(.data) }&lt;br /&gt;
    .bss : { *.(bss) }&lt;br /&gt;
 }&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
 #shdr&lt;br /&gt;
 Num  Address Size  Type     Flags  Name&lt;br /&gt;
   1: 0000000 005c  PROGBITS    AX  .text&lt;br /&gt;
   3: 0000000 0008  PROGBITS    WA  .data&lt;br /&gt;
   4: 0000000 0028  NOBITS      WA  .bss&lt;br /&gt;
 #.symtab&lt;br /&gt;
 Num  Value   Size  Type  Bind Ndx  Name&lt;br /&gt;
   0: 0000000 0000  NOTYP LOC  UND&lt;br /&gt;
   1: 0000000 0000  SCTN  LOC    1  .text&lt;br /&gt;
   2: 0000000 0000  SCTN  LOC    3  .data&lt;br /&gt;
   3: 0000000 0000  SCTN  LOC    4  .bss&lt;br /&gt;
   4: 0000004 0000  NOTYP LOC    3  b&lt;br /&gt;
   5: 000001a 0000  OBJCT GLOB   5  c&lt;br /&gt;
   6: 0000000 0000  NOTYP GLOB   4  d&lt;br /&gt;
   7: 0000000 0000  NOTYP GLOB   1  a&lt;br /&gt;
 #.rela.text&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000004 R_X86_64_32S     7 (a)            -4&lt;br /&gt;
 000000b R_X86_64_PC32    5 (c)            -4&lt;br /&gt;
 0000055 R_X86_64_PC32    7 (a)            -4&lt;br /&gt;
 #.rela.data&lt;br /&gt;
 Offset  Type             Symbol       Addend&lt;br /&gt;
 0000002 R_X86_64_32      3 (.bss)          0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
: Исти задатак се нашао на [[Системски софтвер/Јун 2022#4. задатак|јунском року 2022. године]]&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се &#039;&#039;JIT&#039;&#039; емулатор и емулирање следећег програма.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Означити све блокове који ће у току рада емулатора бити преведени. За сваки преведени блок навести јединствену идентификацију у облику &amp;lt;code&amp;gt;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;n&amp;amp;gt;(&amp;amp;lt;x&amp;amp;gt;-&amp;amp;lt;y&amp;amp;gt;)&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;amp;lt;n&amp;amp;gt;&amp;lt;/code&amp;gt; је &amp;lt;u&amp;gt;редни број блока у погледу тренутка његовог превођења при чему нумерација почиње од броја један&amp;lt;/u&amp;gt;, &amp;amp;lt;x&amp;amp;gt; је редни број прве а &amp;amp;lt;y&amp;amp;gt; редни број последње линије изворног кода блока).&lt;br /&gt;
# Навести секвенцу извршавања. У секвенци извршавања могу се нађи само &amp;lt;code&amp;gt;GP&amp;lt;/code&amp;gt; (сваки пут када се емулатор врати у главну петљу), &amp;lt;code&amp;gt;BH&amp;lt;/code&amp;gt; (сваки пут када се позове функција која помаже у разрешавању скокова) и &amp;lt;code&amp;gt;&#039;&#039;&#039;B&#039;&#039;&#039;&#039;&#039;&amp;amp;lt;n&amp;amp;gt;&amp;lt;/code&amp;gt; (сваки пут када се изврши дати блок у складу са ознакама из претходне тачке).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
      BEG       ; line  1&lt;br /&gt;
      LDI 2     ; line  2   ( PZ) A &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
  L1  SUB B     ; line  3   (CPZ) A &amp;lt;= A - mem[&amp;lt;V&amp;gt;]&lt;br /&gt;
  L2  ADD C     ; line  4   (CPZ) A &amp;lt;= A + mem[&amp;lt;V&amp;gt;]&lt;br /&gt;
      BNG L2    ; line  5         if (!flags[P]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
      BZE L3    ; line  6         if ( flags[Z]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
      SBI 2     ; line  7   (CPZ) A &amp;lt;= A - &amp;lt;V&amp;gt;&lt;br /&gt;
      BNZ L1    ; line  8         if (!flags[Z]) PC &amp;lt;= &amp;lt;V&amp;gt;&lt;br /&gt;
  L3  HLT       ; line  9         stop execution&lt;br /&gt;
  B   DC 9      ; line 10&lt;br /&gt;
  C   DC 2      ; line 11&lt;br /&gt;
      END       ; line 12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Видети [[Системски софтвер/Јун 2022#4. задатак|овде]].&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Системски софтвер]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2020&amp;diff=4596</id>
		<title>КДП/Јун 2020</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2020&amp;diff=4596"/>
		<updated>2022-07-16T16:56:38Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: Skidanje taga delimicno reseno&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp20.zip странице предмета] (зипована).&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Андерсенов алгоритам за N процеса реализован помоћу &#039;&#039;addAndGet&#039;&#039; операције. Уколико би &#039;&#039;addAndGet&#039;&#039; операција имала следећи ефекат: &amp;lt;code&amp;gt;addAndGet(var, incr) : &amp;amp;lt; var = var + incr; return(var); &amp;gt;&amp;lt;/code&amp;gt;, да ли је могуће направити &#039;&#039;Fine grain&#039;&#039; решење, полазећи од &#039;&#039;Coarse grain&#039;&#039; решења (написати га), и ако је могуће – направите га.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&#039;&#039;Coarse-grain&#039;&#039; решење:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = 100;&lt;br /&gt;
bool flag[N];&lt;br /&gt;
int tail = 0;&lt;br /&gt;
&lt;br /&gt;
void worker() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        &amp;lt; int index = tail; tail = (tail + 1) % N; &amp;gt;&lt;br /&gt;
        &amp;lt; await(flag[index]); &amp;gt;&lt;br /&gt;
        /* критична секција */&lt;br /&gt;
        flag[index] = false;&lt;br /&gt;
        flag[(index + 1) % N] = true;&lt;br /&gt;
        /* некритична секција */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Fine-grain&#039;&#039; решење:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = 100;&lt;br /&gt;
bool flag[N];&lt;br /&gt;
int tail = 0;&lt;br /&gt;
&lt;br /&gt;
void worker() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        int index = (addAndGet(tail, 1) - 1) % N;&lt;br /&gt;
        while (!flag[index]) skip();&lt;br /&gt;
        /* критична секција */&lt;br /&gt;
        flag[index] = false;&lt;br /&gt;
        flag[(index + 1) % N] = true;&lt;br /&gt;
        /* некритична секција */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се острво на коме људи могу да разгледају музеј о диносаурусима и парк за живим примерцима (&#039;&#039;The Jurassic Park Problem&#039;&#039;). У парку постоји N безбедних возила која могу да приме по једног путника. У парк може долазити произвољан број посетилаца. На почетку посетилац слободно разгледа музеј са експонатима. Када заврши разгледање, прелази на део са живим диносаурусима, тако што сачека да се појави прво сигурно возило које ће га провести кроз парк. Када наиђе слободно возило, посетилац прелази на вожњу по парку која траје неко време. На крају вожње посетилац напушта парк (може некад да се врати), а возило се враћа да прими следећег посетиоца. Уколико су сва возила заузета, посетилац који жели да иде у обилазак чека слободно возило. Уколико постоји слободно возило, али не и посетилац који тренутно чека да уђе, онда возило чека. Користећи семафоре написати програме за посетиоце и возила, као и код за иницијализацију.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = 100;&lt;br /&gt;
&lt;br /&gt;
sem carCount = N;&lt;br /&gt;
list&amp;lt;pair&amp;lt;sem*, sem*&amp;gt;&amp;gt; freeCars;&lt;br /&gt;
sem carMutex = 1;&lt;br /&gt;
&lt;br /&gt;
void car() {&lt;br /&gt;
    sem carSem = 0;&lt;br /&gt;
    sem visitorSem = 0;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Враћамо се назад на место (први пут, ово служи за иницијализацију)&lt;br /&gt;
        carMutex.wait();&lt;br /&gt;
        freeCars.push_back({&amp;amp;carSem, &amp;amp;visitorSem});&lt;br /&gt;
        carMutex.signal();&lt;br /&gt;
        carCount.signal();&lt;br /&gt;
        carSem.wait();&lt;br /&gt;
        // Посетилац се вози по парку&lt;br /&gt;
        visitorSem.signal();&lt;br /&gt;
        // Готова вожња по парку&lt;br /&gt;
        carSem.wait();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void visitor() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Обилазак музеја&lt;br /&gt;
        carCount.wait();&lt;br /&gt;
        carMutex.wait();&lt;br /&gt;
        sem* carSem = freeCars.front().first;&lt;br /&gt;
        sem* visitorSem = freeCars.front().second;&lt;br /&gt;
        freeCars.pop_front();&lt;br /&gt;
        carSem-&amp;gt;signal();&lt;br /&gt;
        carMutex.signal();&lt;br /&gt;
        // Вожња по парку&lt;br /&gt;
        visitorSem-&amp;gt;wait();&lt;br /&gt;
        // Готова вожња по парку&lt;br /&gt;
        carSem-&amp;gt;signal();&lt;br /&gt;
        // Посетилац је напустио парк и можда се некад врати&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Објасните како се реализује монитор са &#039;&#039;Signal and Continue&#039;&#039; дисциплином, код кога је дозвољено да се из једне мониторске методе позива друга мониторска метода користећи семафоре. За сваку каракеристичну&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; ситуацију (5 ситуацијa) дати основне компоненте кôда (као са предавања) и објасните функцију делова тог кôда. За сваку ситуацију посебно навести који семафори се користе, и од чега зависи број тих семафора.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
У неком обданишту постоји правило које каже да се на свака три детета мора наћи барем једна васпитачица (&#039;&#039;The Child Care Problem&#039;&#039;). Родитељ доводи једно или више деце у обданиште и чека све док се не појави место, како би оставио сву децу одједном и отишао. Родитељ такође може да одведе једно или више деце, такође одједном. Васпитачица долази на посао и сме да напусти обданиште само уколико то не нарушава правило. Мора се поштовати редослед доласка родитеља који остављају децу и васпитачица које одлазе са посла. Користећи условне критичне регионе, написати процедуре за родитеље који доводе децу, родитеље који одводе децу, васпитачице које долазе на посао и васпитачице које одлазе са посла. Иницијализовати почетне услове.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 5. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Реализовати прстен од n процеса, који комуницирају асинхроним прослеђивањем порука коришћењем комуникационих канала и &#039;&#039;send&#039;&#039; и &#039;&#039;receive&#039;&#039; исказа, а код кога процес 0 генерише случајан низ од m природних бројева у интервалу од 1 до 20.000 завршен са &#039;&#039;sentinel&#039;&#039; вредношћу &#039;&#039;EONAT&#039;&#039; (нпр 20.001). Преосталих n-1 процеса одстрањују из низа све појаве првих n-1 простих бројева. Сваки процес има по један различит прост број за који је задужен. Након одстрањивања простих бројева, модификован низ се дистрибуира свим процесима. Обезбедити максималну конкурентност.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = ...;&lt;br /&gt;
const int m = ...;&lt;br /&gt;
const int EONAT = 20001;&lt;br /&gt;
chan values[N](int);&lt;br /&gt;
&lt;br /&gt;
void proccess0(){&lt;br /&gt;
	int array[m];&lt;br /&gt;
	&lt;br /&gt;
	for(int i=0; i&amp;lt;m; i++) array[i] = rand(1,20000);&lt;br /&gt;
	&lt;br /&gt;
	for(int i=0; i&amp;lt;m; i++) send values[1](array[i]);&lt;br /&gt;
	send values[1](EONAT);&lt;br /&gt;
	&lt;br /&gt;
	bool end = false;&lt;br /&gt;
	int temp,index = 0;&lt;br /&gt;
	while(!end){&lt;br /&gt;
		receive values[0](temp);&lt;br /&gt;
		if(temp == EONAT) end = true;&lt;br /&gt;
		else array[index++] = temp;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	for(int i=0; i&amp;lt;index; i++) send values[1](array[i]);&lt;br /&gt;
	send values[1](EONAT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void proccess(int id, int myNumber){&lt;br /&gt;
	int array[m];&lt;br /&gt;
	&lt;br /&gt;
	bool end = false;&lt;br /&gt;
	int temp;&lt;br /&gt;
	while(!end){&lt;br /&gt;
		receive values[id](temp);&lt;br /&gt;
		if(temp == EONAT) end = true;&lt;br /&gt;
		else if(temp != myNumber) send values[(id+1)%N](temp);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	end = false;&lt;br /&gt;
	int index = 0;&lt;br /&gt;
	while(!end){&lt;br /&gt;
		receive values[id](temp);&lt;br /&gt;
		if(temp == EONAT) end = true;&lt;br /&gt;
		else{&lt;br /&gt;
			array[index++] = temp;&lt;br /&gt;
			if(id != N-1) send values[(id+1)%N](temp);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се скуп чворова у графу који могу да комуницирају само са својим суседима (&#039;&#039;Distributed Pairing Problem&#039;&#039;). Сваки чвор треба да нађе чвор са којим ће се упарити. На крају поступка упаривања сваки чвор ће или имати свог пара, или остати неупарен, али тако да ни једна два суседна чвора не остану неупарена. Написати програм за чвор користећи библиотеку C-Linda.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2020&amp;diff=4595</id>
		<title>КДП/Јун 2020</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BD_2020&amp;diff=4595"/>
		<updated>2022-07-16T16:56:23Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 5. задатак */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp20.zip странице предмета] (зипована).&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Андерсенов алгоритам за N процеса реализован помоћу &#039;&#039;addAndGet&#039;&#039; операције. Уколико би &#039;&#039;addAndGet&#039;&#039; операција имала следећи ефекат: &amp;lt;code&amp;gt;addAndGet(var, incr) : &amp;amp;lt; var = var + incr; return(var); &amp;gt;&amp;lt;/code&amp;gt;, да ли је могуће направити &#039;&#039;Fine grain&#039;&#039; решење, полазећи од &#039;&#039;Coarse grain&#039;&#039; решења (написати га), и ако је могуће – направите га.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&#039;&#039;Coarse-grain&#039;&#039; решење:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = 100;&lt;br /&gt;
bool flag[N];&lt;br /&gt;
int tail = 0;&lt;br /&gt;
&lt;br /&gt;
void worker() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        &amp;lt; int index = tail; tail = (tail + 1) % N; &amp;gt;&lt;br /&gt;
        &amp;lt; await(flag[index]); &amp;gt;&lt;br /&gt;
        /* критична секција */&lt;br /&gt;
        flag[index] = false;&lt;br /&gt;
        flag[(index + 1) % N] = true;&lt;br /&gt;
        /* некритична секција */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;Fine-grain&#039;&#039; решење:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = 100;&lt;br /&gt;
bool flag[N];&lt;br /&gt;
int tail = 0;&lt;br /&gt;
&lt;br /&gt;
void worker() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        int index = (addAndGet(tail, 1) - 1) % N;&lt;br /&gt;
        while (!flag[index]) skip();&lt;br /&gt;
        /* критична секција */&lt;br /&gt;
        flag[index] = false;&lt;br /&gt;
        flag[(index + 1) % N] = true;&lt;br /&gt;
        /* некритична секција */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се острво на коме људи могу да разгледају музеј о диносаурусима и парк за живим примерцима (&#039;&#039;The Jurassic Park Problem&#039;&#039;). У парку постоји N безбедних возила која могу да приме по једног путника. У парк може долазити произвољан број посетилаца. На почетку посетилац слободно разгледа музеј са експонатима. Када заврши разгледање, прелази на део са живим диносаурусима, тако што сачека да се појави прво сигурно возило које ће га провести кроз парк. Када наиђе слободно возило, посетилац прелази на вожњу по парку која траје неко време. На крају вожње посетилац напушта парк (може некад да се врати), а возило се враћа да прими следећег посетиоца. Уколико су сва возила заузета, посетилац који жели да иде у обилазак чека слободно возило. Уколико постоји слободно возило, али не и посетилац који тренутно чека да уђе, онда возило чека. Користећи семафоре написати програме за посетиоце и возила, као и код за иницијализацију.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = 100;&lt;br /&gt;
&lt;br /&gt;
sem carCount = N;&lt;br /&gt;
list&amp;lt;pair&amp;lt;sem*, sem*&amp;gt;&amp;gt; freeCars;&lt;br /&gt;
sem carMutex = 1;&lt;br /&gt;
&lt;br /&gt;
void car() {&lt;br /&gt;
    sem carSem = 0;&lt;br /&gt;
    sem visitorSem = 0;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Враћамо се назад на место (први пут, ово служи за иницијализацију)&lt;br /&gt;
        carMutex.wait();&lt;br /&gt;
        freeCars.push_back({&amp;amp;carSem, &amp;amp;visitorSem});&lt;br /&gt;
        carMutex.signal();&lt;br /&gt;
        carCount.signal();&lt;br /&gt;
        carSem.wait();&lt;br /&gt;
        // Посетилац се вози по парку&lt;br /&gt;
        visitorSem.signal();&lt;br /&gt;
        // Готова вожња по парку&lt;br /&gt;
        carSem.wait();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void visitor() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Обилазак музеја&lt;br /&gt;
        carCount.wait();&lt;br /&gt;
        carMutex.wait();&lt;br /&gt;
        sem* carSem = freeCars.front().first;&lt;br /&gt;
        sem* visitorSem = freeCars.front().second;&lt;br /&gt;
        freeCars.pop_front();&lt;br /&gt;
        carSem-&amp;gt;signal();&lt;br /&gt;
        carMutex.signal();&lt;br /&gt;
        // Вожња по парку&lt;br /&gt;
        visitorSem-&amp;gt;wait();&lt;br /&gt;
        // Готова вожња по парку&lt;br /&gt;
        carSem-&amp;gt;signal();&lt;br /&gt;
        // Посетилац је напустио парк и можда се некад врати&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Објасните како се реализује монитор са &#039;&#039;Signal and Continue&#039;&#039; дисциплином, код кога је дозвољено да се из једне мониторске методе позива друга мониторска метода користећи семафоре. За сваку каракеристичну&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; ситуацију (5 ситуацијa) дати основне компоненте кôда (као са предавања) и објасните функцију делова тог кôда. За сваку ситуацију посебно навести који семафори се користе, и од чега зависи број тих семафора.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
У неком обданишту постоји правило које каже да се на свака три детета мора наћи барем једна васпитачица (&#039;&#039;The Child Care Problem&#039;&#039;). Родитељ доводи једно или више деце у обданиште и чека све док се не појави место, како би оставио сву децу одједном и отишао. Родитељ такође може да одведе једно или више деце, такође одједном. Васпитачица долази на посао и сме да напусти обданиште само уколико то не нарушава правило. Мора се поштовати редослед доласка родитеља који остављају децу и васпитачица које одлазе са посла. Користећи условне критичне регионе, написати процедуре за родитеље који доводе децу, родитеље који одводе децу, васпитачице које долазе на посао и васпитачице које одлазе са посла. Иницијализовати почетне услове.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 5. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Реализовати прстен од n процеса, који комуницирају асинхроним прослеђивањем порука коришћењем комуникационих канала и &#039;&#039;send&#039;&#039; и &#039;&#039;receive&#039;&#039; исказа, а код кога процес 0 генерише случајан низ од m природних бројева у интервалу од 1 до 20.000 завршен са &#039;&#039;sentinel&#039;&#039; вредношћу &#039;&#039;EONAT&#039;&#039; (нпр 20.001). Преосталих n-1 процеса одстрањују из низа све појаве првих n-1 простих бројева. Сваки процес има по један различит прост број за који је задужен. Након одстрањивања простих бројева, модификован низ се дистрибуира свим процесима. Обезбедити максималну конкурентност.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = ...;&lt;br /&gt;
const int m = ...;&lt;br /&gt;
const int EONAT = 20001;&lt;br /&gt;
chan values[N](int);&lt;br /&gt;
&lt;br /&gt;
void proccess0(){&lt;br /&gt;
	int array[m];&lt;br /&gt;
	&lt;br /&gt;
	for(int i=0; i&amp;lt;m; i++) array[i] = rand(1,20000);&lt;br /&gt;
	&lt;br /&gt;
	for(int i=0; i&amp;lt;m; i++) send values[1](array[i]);&lt;br /&gt;
	send values[1](EONAT);&lt;br /&gt;
	&lt;br /&gt;
	bool end = false;&lt;br /&gt;
	int temp,index = 0;&lt;br /&gt;
	while(!end){&lt;br /&gt;
		receive values[0](temp);&lt;br /&gt;
		if(temp == EONAT) end = true;&lt;br /&gt;
		else array[index++] = temp;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	for(int i=0; i&amp;lt;index; i++) send values[1](array[i]);&lt;br /&gt;
	send values[1](EONAT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void proccess(int id, int myNumber){&lt;br /&gt;
	int array[m];&lt;br /&gt;
	&lt;br /&gt;
	bool end = false;&lt;br /&gt;
	int temp;&lt;br /&gt;
	while(!end){&lt;br /&gt;
		receive values[id](temp);&lt;br /&gt;
		if(temp == EONAT) end = true;&lt;br /&gt;
		else if(temp != myNumber) send values[(id+1)%N](temp);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	end = false;&lt;br /&gt;
	int index = 0;&lt;br /&gt;
	while(!end){&lt;br /&gt;
		receive values[id](temp);&lt;br /&gt;
		if(temp == EONAT) end = true;&lt;br /&gt;
		else{&lt;br /&gt;
			array[index++] = temp;&lt;br /&gt;
			if(id != N-1) send values[(id+1)%N](temp);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се скуп чворова у графу који могу да комуницирају само са својим суседима (&#039;&#039;Distributed Pairing Problem&#039;&#039;). Сваки чвор треба да нађе чвор са којим ће се упарити. На крају поступка упаривања сваки чвор ће или имати свог пара, или остати неупарен, али тако да ни једна два суседна чвора не остану неупарена. Написати програм за чвор користећи библиотеку C-Linda.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BB_2020&amp;diff=4594</id>
		<title>КДП/Јул 2020</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BB_2020&amp;diff=4594"/>
		<updated>2022-07-16T16:33:32Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 3. задатак */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/2122/KDP_2022_feb.pdf странице предмета.]&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи расподељене бинарне семафоре и технику предаје штафетне палице решити проблем читалаца и писаца (&#039;&#039;Readers - Writers Problem&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Проблем изградње молекула воде (&#039;&#039;The H2O Problem&#039;&#039;). Написати монитор са &#039;&#039;signal and continue&#039;&#039; дисциплином за решавање овог проблема, под следећим условима. Атоми водоника, када желе да направе молекул воде, позивају мониторску процедуру &amp;lt;code&amp;gt;hReady()&amp;lt;/code&amp;gt;, атоми кисеоника позивају мониторску процедуру &amp;lt;code&amp;gt;oReady()&amp;lt;/code&amp;gt;. Последњи пристигли атом треба да позове мониторску процедуру &amp;lt;code&amp;gt;makeWater()&amp;lt;/code&amp;gt;, након чијег завршетка сва три атома треба да заврше своје одговарајуће &amp;lt;code&amp;gt;hReady()&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;oReady()&amp;lt;/code&amp;gt; процедуре. Не сме бити изгладњивања.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class TheH2OProblem {&lt;br /&gt;
    private Condition hQueue = new Condition();&lt;br /&gt;
    private Condition oQueue = new Condition();&lt;br /&gt;
    private int hCount = 0;&lt;br /&gt;
    private int oCount = 0;&lt;br /&gt;
    private int hTicket = 1;&lt;br /&gt;
    private int oTicket = 1;&lt;br /&gt;
    public synchronized void hReady() {&lt;br /&gt;
        ++hCount;&lt;br /&gt;
        if (hCount &amp;gt;= 2 &amp;amp;&amp;amp; oCount &amp;gt;= 1) {&lt;br /&gt;
            makeWater();&lt;br /&gt;
            hCount -= 2;&lt;br /&gt;
            oCount -= 1;&lt;br /&gt;
            hQueue.signal();&lt;br /&gt;
            oQueue.signal();&lt;br /&gt;
        } else {&lt;br /&gt;
            hQueue.wait(hTicket++);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void oReady() {&lt;br /&gt;
        ++oCount;&lt;br /&gt;
        if (hCount &amp;gt;= 2 &amp;amp;&amp;amp; oCount &amp;gt;= 1) {&lt;br /&gt;
            makeWater();&lt;br /&gt;
            hCount -= 2;&lt;br /&gt;
            oCount -= 1;&lt;br /&gt;
            hQueue.signal();&lt;br /&gt;
            hQueue.signal();&lt;br /&gt;
        } else {&lt;br /&gt;
            oQueue.wait(oTicket++);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    private void makeWater() {&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи активне мониторе решити проблем филозофа који ручавају (&#039;&#039;The Dining Philosophers&#039;&#039;). Филозофи могу да комуницирају искључиво са процесом координатором (централизовано решење). Обезбедити да филозоф који је пре затражио да једе пре и започиње са јелом. Написати код за филозофе и за процес координатор&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Напомена: Због захтева да филозоф који је пре затражио да једе пре и започне са јелом  иде се по строго ФИФО редоследу, и филозофи који су се заблокирали на чекању виљушке неће је добити све док сви филозофи који су затражили виљушку пре њих не добију своју, и из тог разлога је потребна while петља код отпуштања виљушке.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = ...;&lt;br /&gt;
enum op_kind{REQUEST,RELEASE};&lt;br /&gt;
chan request(int, op_kind kind, bool); //Poslednji parametar ukazuje na to da li filozof trazi levu ili desnu viljusku&lt;br /&gt;
chan reply[N](bool);&lt;br /&gt;
&lt;br /&gt;
class Coordinator{&lt;br /&gt;
   public:&lt;br /&gt;
      &lt;br /&gt;
      void run(){&lt;br /&gt;
         int philosopher;&lt;br /&gt;
         op_kind kind;&lt;br /&gt;
         bool left;&lt;br /&gt;
         queue&amp;lt;pair&amp;lt;int,int&amp;gt;&amp;gt; waiting;&lt;br /&gt;
		 int forks[N] = {};&lt;br /&gt;
		 while(true){&lt;br /&gt;
			receive request(philosopher, kind, left);&lt;br /&gt;
			int fork = left ? philosopher : (philosopher+1)%N;&lt;br /&gt;
			if(kind == REQUEST){&lt;br /&gt;
				if(forks[fork] == 0){&lt;br /&gt;
					forks[fork] = 1;&lt;br /&gt;
					send reply[philosopher](true);&lt;br /&gt;
				}&lt;br /&gt;
				else{&lt;br /&gt;
					waiting.push(make_pair(philosopher, fork));&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if(kind == RELEASE){&lt;br /&gt;
				forks[fork] = 0;&lt;br /&gt;
				while(!waiting.empty() &amp;amp;&amp;amp; forks[waiting.front().second] == 0){&lt;br /&gt;
					send reply[waiting.front().first](true);&lt;br /&gt;
					waiting.pop();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		 }&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void philosopher(int id){&lt;br /&gt;
	bool status;&lt;br /&gt;
	&lt;br /&gt;
	while(true){&lt;br /&gt;
		&lt;br /&gt;
		//Think&lt;br /&gt;
		&lt;br /&gt;
		send request(id, REQUEST, id!=0);&lt;br /&gt;
		receive reply[id](status);&lt;br /&gt;
		send request(id, REQUEST, id==0);&lt;br /&gt;
		receive reply[id](status);&lt;br /&gt;
		&lt;br /&gt;
		//Eat&lt;br /&gt;
		&lt;br /&gt;
		send request(id, RELEASE, id!=0);&lt;br /&gt;
		send request(id, RELEASE, id==0);&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се семафор за регулацију саобраћаја на улици са једним пешачким прелазом. Када пешак стигне до пешачког прелаза, уколико је светло за пешаке зелено, он прелази улицу. Уколико је у моменту његовог доласка светло за пешаке црвено, он чека да се укључи зелено светло. Зелено светло за пешаке се укључује или након К секунди од појаве првог пешака који је затекао црвено светло, или након проласка C аутомобила од последњег активног зеленог светла за пешаке. Зелено светло за пешаке трајања G секунди се пали само уколико је испуњен неки од наведених услова и барем један пешак чека. Потребно је у језику CSP написати процесе пешака, аутомобила и семафора, уколико је познато да у систему постоји N аутомобила и T пешака. Доступна је функција &amp;lt;code&amp;gt;system_current_time&amp;lt;/code&amp;gt; која враћа тренутно време система.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2020&amp;diff=4593</id>
		<title>КДП/Јануар 2020</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2020&amp;diff=4593"/>
		<updated>2022-07-16T16:09:57Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* Ne treba da stoje imena argumenata kod kanala */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Јануарски испит 2020. године&#039;&#039;&#039; одржан је 18. јануара. Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp20.zip странице предмета] (зипована).&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
: &#039;&#039;Сличан задатак дошао је у [[КДП/Август 2021#1. zadatak|августу 2021. године]] са &#039;&#039;Signal and Continue&#039;&#039; дисциплином.&#039;&#039;&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Потребно је реализовати семафор који поред стандардних атомских операција &#039;&#039;signal()&#039;&#039; и &#039;&#039;wait()&#039;&#039; има и атомске операције &#039;&#039;signal(n)&#039;&#039; и &#039;&#039;wait(n)&#039;&#039; која интерну семафорску променљиву атомски увећава односно умањује за &#039;&#039;n&#039;&#039; уколико је то могуће, уколико није чека док не буде били могуће. Потребно је решити проблем користећи мониторе који имају &#039;&#039;Signal and Wait&#039;&#039; дисциплину. Процес који је раније упутио захтев треба раније да обави своју операцију. Број процеса и максимална вредност &#039;&#039;n&#039;&#039; нису унапред познати. Условне променљиве су &#039;&#039;FIFO&#039;&#039; према тренутку доласка и немају приоритетну методу &#039;&#039;wait&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class Semaphore {&lt;br /&gt;
    private int value;&lt;br /&gt;
    private Queue&amp;lt;Integer&amp;gt; requests = new Queue&amp;lt;&amp;gt;();&lt;br /&gt;
    private Condition queue = new Condition();&lt;br /&gt;
    public Semaphore(int value) {&lt;br /&gt;
        this.value = value;&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void wait(int num) {&lt;br /&gt;
        if (value &amp;gt;= num) {&lt;br /&gt;
            value -= num;&lt;br /&gt;
        } else {&lt;br /&gt;
            requests.insert(num);&lt;br /&gt;
            queue.wait();&lt;br /&gt;
            internalSignal();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void signal(int num) {&lt;br /&gt;
        value += num;&lt;br /&gt;
        internalSignal();&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void wait() {&lt;br /&gt;
        wait(1);&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void signal() {&lt;br /&gt;
        signal(1);&lt;br /&gt;
    }&lt;br /&gt;
    private void internalSignal() {&lt;br /&gt;
        if (requests.size() &amp;gt; 0 &amp;amp;&amp;amp; value &amp;gt;= requests.top()) {&lt;br /&gt;
            value -= requests.pop();&lt;br /&gt;
            queue.signal();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи семафоре написати програм који решава проблем путовања лифтом. Путник позива лифт са произвољног спрата. Када лифт стигне на неки спрат сви путници који су изразили жељу да сиђу на том спрату обавезно изађу. Након изласка путника сви путници који су чекали на улазак уђу у лифт и кажу на који спрат желе да пређу. Тек када се сви изјасне лифт прелази даље. Лифт редом обилази спратове и стаје само на оне где има путника који улазе или излазе. Може се претпоставити да постоји N спратова.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Floor {&lt;br /&gt;
    list&amp;lt;sem*&amp;gt; peopleEntering;&lt;br /&gt;
    sem mutexEntering = 1;&lt;br /&gt;
    list&amp;lt;sem*&amp;gt; peopleExiting;&lt;br /&gt;
    sem mutexExiting = 1;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const int N = 10;&lt;br /&gt;
Floor floors[N];&lt;br /&gt;
sem liftSem = 0;&lt;br /&gt;
&lt;br /&gt;
void person() {&lt;br /&gt;
    sem personSem = 0;&lt;br /&gt;
    int currentFloorIndex = rand() % N;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Особа може да каже да хоће да изађе на истом спрату као тренутном&lt;br /&gt;
        // Претпоставка: особа није глупа&lt;br /&gt;
        int nextFloorIndex = rand() % N;&lt;br /&gt;
        Floor&amp;amp; currentFloor = floors[currentFloorIndex];&lt;br /&gt;
        Floor&amp;amp; nextFloor = floors[nextFloorIndex];&lt;br /&gt;
        currentFloor.mutexEntering.wait();&lt;br /&gt;
        currentFloor.peopleEntering.push_back(&amp;amp;personSem);&lt;br /&gt;
        currentFloor.mutexEntering.signal();&lt;br /&gt;
        // Чекамо да дође лифт&lt;br /&gt;
        personSem.wait();&lt;br /&gt;
        // Улазимо у лифт и бирамо на којем спрату стајемо&lt;br /&gt;
        nextFloor.mutexExiting.wait();&lt;br /&gt;
        nextFloor.peopleExiting.push_back(&amp;amp;personSem);&lt;br /&gt;
        nextFloor.mutexExiting.signal();&lt;br /&gt;
        liftSem.signal();&lt;br /&gt;
        // Чекамо да лифт стигне на наш спрат&lt;br /&gt;
        personSem.wait();&lt;br /&gt;
        // Излазимо из лифта&lt;br /&gt;
        liftSem.signal();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void lift() {&lt;br /&gt;
    int currentFloorIndex = 0;&lt;br /&gt;
    bool goingUp = true;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Одређивање следећег спрата&lt;br /&gt;
        // Претпоставка: лифт све време иде горе-доле, без обзира да ли га је неко звао&lt;br /&gt;
        if (goingUp) {&lt;br /&gt;
            if (++currentFloorIndex == N-1) {&lt;br /&gt;
                goingUp = false;&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            if (--currentFloorIndex == 0) {&lt;br /&gt;
                goingUp = true;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        Floor&amp;amp; floor = floors[currentFloorIndex];&lt;br /&gt;
        // Не морамо да чекамо на mutexExiting, јер се он заузима само када путници улазе&lt;br /&gt;
        // што тренутно није случај&lt;br /&gt;
        int countPeopleExiting = floor.peopleExiting.size();&lt;br /&gt;
        // Задржавамо mutexEntering док не испразнимо листу, како нам не би ушао неочекивани путник&lt;br /&gt;
        floor.mutexEntering.wait();&lt;br /&gt;
        int countPeopleEntering = floor.peopleEntering.size();&lt;br /&gt;
        if (countPeopleExiting == 0 &amp;amp;&amp;amp; countPeopleEntering == 0) {&lt;br /&gt;
            // Не стајемо на овом спрату&lt;br /&gt;
            floor.mutexEntering.signal();&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
        // Стајемо на овом спрату&lt;br /&gt;
        // Пуштамо људе да изађу&lt;br /&gt;
        for (int i = 0; i &amp;lt; countPeopleExiting; ++i) {&lt;br /&gt;
            sem* personSem = floor.peopleExiting.front();&lt;br /&gt;
            personSem-&amp;gt;signal();&lt;br /&gt;
            floor.peopleExiting.pop_front();&lt;br /&gt;
        }&lt;br /&gt;
        for (int i = 0; i &amp;lt; countPeopleExiting; ++i) {&lt;br /&gt;
            liftSem.wait();&lt;br /&gt;
        }&lt;br /&gt;
        // Пуштамо људе да уђу&lt;br /&gt;
        for (int i = 0; i &amp;lt; countPeopleEntering; ++i) {&lt;br /&gt;
            sem* personSem = floor.peopleEntering.front();&lt;br /&gt;
            personSem-&amp;gt;signal();&lt;br /&gt;
            floor.peopleEntering.pop_front();&lt;br /&gt;
        }&lt;br /&gt;
        for (int i = 0; i &amp;lt; countPeopleEntering; ++i) {&lt;br /&gt;
            liftSem.wait();&lt;br /&gt;
        }&lt;br /&gt;
        floor.mutexEntering.signal();&lt;br /&gt;
        // Настављамо на следећи спрат&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи технику активних монитора потребно је реализовати семафор који поред стандардних атомских операција &#039;&#039;signal()&#039;&#039; и &#039;&#039;wait()&#039;&#039; има и атомске операције &#039;&#039;signal(n)&#039;&#039; и &#039;&#039;wait(n)&#039;&#039; која интерну семафорску променљиву атомски увећава односно умањује за &#039;&#039;n&#039;&#039; уколико је то могуће, уколико није чека док не буде били могуће. Процес који је раније упутио захтев треба раније да обави своју операцију.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
enum op_kind{WAIT,SIGNAL,WAITN,SIGNALN};&lt;br /&gt;
chan request(int, op_kind, int);&lt;br /&gt;
chan reply[n](bool);&lt;br /&gt;
&lt;br /&gt;
class Semaphore{&lt;br /&gt;
   public:&lt;br /&gt;
      &lt;br /&gt;
      void run(){&lt;br /&gt;
         int clientID;&lt;br /&gt;
         op_kind kind;&lt;br /&gt;
         int n;&lt;br /&gt;
         int tokens = 0;&lt;br /&gt;
         queue&amp;lt;pair&amp;lt;int,int&amp;gt;&amp;gt; pending;&lt;br /&gt;
         while(true){&lt;br /&gt;
            receive request(clientID, kind, n);&lt;br /&gt;
            if(kind == WAIT){&lt;br /&gt;
               if(tokens&amp;lt;=0){&lt;br /&gt;
                  pending.push(make_pair(clientID, 1));&lt;br /&gt;
               }&lt;br /&gt;
               else{&lt;br /&gt;
                  tokens--;&lt;br /&gt;
                  send reply[clientID](true);&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
            else if(kind == WAITN){&lt;br /&gt;
               if(tokens&amp;lt;=n-1){&lt;br /&gt;
                  pending.push(make_pair(clientID, n));&lt;br /&gt;
               }&lt;br /&gt;
               else{&lt;br /&gt;
                  tokens = tokens-n;&lt;br /&gt;
                  send reply[clientID](true);&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
            else if(kind == SIGNAL){&lt;br /&gt;
               tokens++;&lt;br /&gt;
               if(!pending.empty() &amp;amp;&amp;amp; pending.front().second == tokens){&lt;br /&gt;
                  tokens = 0;&lt;br /&gt;
                  send reply[pending.front().first](true);&lt;br /&gt;
                  pending.pop();&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
            else if(kind == SIGNALN){&lt;br /&gt;
               tokens += n;&lt;br /&gt;
               while(!pending.empty() &amp;amp;&amp;amp; pending.front().second &amp;lt;= tokens){&lt;br /&gt;
                  tokens -= pending.front().second;&lt;br /&gt;
                  send reply[pending.front().first](true);&lt;br /&gt;
                  pending.pop();&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
У свемиру постоји N небеских тела која међусобно интерагују (&#039;&#039;N Body Gravitational Problem&#039;&#039;), по Њутновом закону гравитације. Свако тело интерагује са сваким, при чему размењују информације о позицији, брзини и вектору силе. Користећи CSP потребно је решити овај проблем користећи торбу послова за дохватање посла и синхронизацију на баријери у свакој итерацији. Потребно је реализовати следеће процесе: &#039;&#039;Worker&#039;&#039; (обавља израчунавање), &#039;&#039;Bag&#039;&#039; (обавља поделу посла) и &#039;&#039;Collector&#039;&#039; (обавља прикупљање резултата). Број процеса &#039;&#039;Worker&#039;&#039; није познат, али је познато да их има мање од N. Постоји тачно један процес &#039;&#039;Bag&#039;&#039; и тачно један процес &#039;&#039;Collector&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2020&amp;diff=4591</id>
		<title>КДП/Јануар 2020</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2020&amp;diff=4591"/>
		<updated>2022-07-16T16:06:41Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* Решење */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Јануарски испит 2020. године&#039;&#039;&#039; одржан је 18. јануара. Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp20.zip странице предмета] (зипована).&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
: &#039;&#039;Сличан задатак дошао је у [[КДП/Август 2021#1. zadatak|августу 2021. године]] са &#039;&#039;Signal and Continue&#039;&#039; дисциплином.&#039;&#039;&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Потребно је реализовати семафор који поред стандардних атомских операција &#039;&#039;signal()&#039;&#039; и &#039;&#039;wait()&#039;&#039; има и атомске операције &#039;&#039;signal(n)&#039;&#039; и &#039;&#039;wait(n)&#039;&#039; која интерну семафорску променљиву атомски увећава односно умањује за &#039;&#039;n&#039;&#039; уколико је то могуће, уколико није чека док не буде били могуће. Потребно је решити проблем користећи мониторе који имају &#039;&#039;Signal and Wait&#039;&#039; дисциплину. Процес који је раније упутио захтев треба раније да обави своју операцију. Број процеса и максимална вредност &#039;&#039;n&#039;&#039; нису унапред познати. Условне променљиве су &#039;&#039;FIFO&#039;&#039; према тренутку доласка и немају приоритетну методу &#039;&#039;wait&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class Semaphore {&lt;br /&gt;
    private int value;&lt;br /&gt;
    private Queue&amp;lt;Integer&amp;gt; requests = new Queue&amp;lt;&amp;gt;();&lt;br /&gt;
    private Condition queue = new Condition();&lt;br /&gt;
    public Semaphore(int value) {&lt;br /&gt;
        this.value = value;&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void wait(int num) {&lt;br /&gt;
        if (value &amp;gt;= num) {&lt;br /&gt;
            value -= num;&lt;br /&gt;
        } else {&lt;br /&gt;
            requests.insert(num);&lt;br /&gt;
            queue.wait();&lt;br /&gt;
            internalSignal();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void signal(int num) {&lt;br /&gt;
        value += num;&lt;br /&gt;
        internalSignal();&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void wait() {&lt;br /&gt;
        wait(1);&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void signal() {&lt;br /&gt;
        signal(1);&lt;br /&gt;
    }&lt;br /&gt;
    private void internalSignal() {&lt;br /&gt;
        if (requests.size() &amp;gt; 0 &amp;amp;&amp;amp; value &amp;gt;= requests.top()) {&lt;br /&gt;
            value -= requests.pop();&lt;br /&gt;
            queue.signal();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи семафоре написати програм који решава проблем путовања лифтом. Путник позива лифт са произвољног спрата. Када лифт стигне на неки спрат сви путници који су изразили жељу да сиђу на том спрату обавезно изађу. Након изласка путника сви путници који су чекали на улазак уђу у лифт и кажу на који спрат желе да пређу. Тек када се сви изјасне лифт прелази даље. Лифт редом обилази спратове и стаје само на оне где има путника који улазе или излазе. Може се претпоставити да постоји N спратова.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Floor {&lt;br /&gt;
    list&amp;lt;sem*&amp;gt; peopleEntering;&lt;br /&gt;
    sem mutexEntering = 1;&lt;br /&gt;
    list&amp;lt;sem*&amp;gt; peopleExiting;&lt;br /&gt;
    sem mutexExiting = 1;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const int N = 10;&lt;br /&gt;
Floor floors[N];&lt;br /&gt;
sem liftSem = 0;&lt;br /&gt;
&lt;br /&gt;
void person() {&lt;br /&gt;
    sem personSem = 0;&lt;br /&gt;
    int currentFloorIndex = rand() % N;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Особа може да каже да хоће да изађе на истом спрату као тренутном&lt;br /&gt;
        // Претпоставка: особа није глупа&lt;br /&gt;
        int nextFloorIndex = rand() % N;&lt;br /&gt;
        Floor&amp;amp; currentFloor = floors[currentFloorIndex];&lt;br /&gt;
        Floor&amp;amp; nextFloor = floors[nextFloorIndex];&lt;br /&gt;
        currentFloor.mutexEntering.wait();&lt;br /&gt;
        currentFloor.peopleEntering.push_back(&amp;amp;personSem);&lt;br /&gt;
        currentFloor.mutexEntering.signal();&lt;br /&gt;
        // Чекамо да дође лифт&lt;br /&gt;
        personSem.wait();&lt;br /&gt;
        // Улазимо у лифт и бирамо на којем спрату стајемо&lt;br /&gt;
        nextFloor.mutexExiting.wait();&lt;br /&gt;
        nextFloor.peopleExiting.push_back(&amp;amp;personSem);&lt;br /&gt;
        nextFloor.mutexExiting.signal();&lt;br /&gt;
        liftSem.signal();&lt;br /&gt;
        // Чекамо да лифт стигне на наш спрат&lt;br /&gt;
        personSem.wait();&lt;br /&gt;
        // Излазимо из лифта&lt;br /&gt;
        liftSem.signal();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void lift() {&lt;br /&gt;
    int currentFloorIndex = 0;&lt;br /&gt;
    bool goingUp = true;&lt;br /&gt;
    while (true) {&lt;br /&gt;
        // Одређивање следећег спрата&lt;br /&gt;
        // Претпоставка: лифт све време иде горе-доле, без обзира да ли га је неко звао&lt;br /&gt;
        if (goingUp) {&lt;br /&gt;
            if (++currentFloorIndex == N-1) {&lt;br /&gt;
                goingUp = false;&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            if (--currentFloorIndex == 0) {&lt;br /&gt;
                goingUp = true;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        Floor&amp;amp; floor = floors[currentFloorIndex];&lt;br /&gt;
        // Не морамо да чекамо на mutexExiting, јер се он заузима само када путници улазе&lt;br /&gt;
        // што тренутно није случај&lt;br /&gt;
        int countPeopleExiting = floor.peopleExiting.size();&lt;br /&gt;
        // Задржавамо mutexEntering док не испразнимо листу, како нам не би ушао неочекивани путник&lt;br /&gt;
        floor.mutexEntering.wait();&lt;br /&gt;
        int countPeopleEntering = floor.peopleEntering.size();&lt;br /&gt;
        if (countPeopleExiting == 0 &amp;amp;&amp;amp; countPeopleEntering == 0) {&lt;br /&gt;
            // Не стајемо на овом спрату&lt;br /&gt;
            floor.mutexEntering.signal();&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
        // Стајемо на овом спрату&lt;br /&gt;
        // Пуштамо људе да изађу&lt;br /&gt;
        for (int i = 0; i &amp;lt; countPeopleExiting; ++i) {&lt;br /&gt;
            sem* personSem = floor.peopleExiting.front();&lt;br /&gt;
            personSem-&amp;gt;signal();&lt;br /&gt;
            floor.peopleExiting.pop_front();&lt;br /&gt;
        }&lt;br /&gt;
        for (int i = 0; i &amp;lt; countPeopleExiting; ++i) {&lt;br /&gt;
            liftSem.wait();&lt;br /&gt;
        }&lt;br /&gt;
        // Пуштамо људе да уђу&lt;br /&gt;
        for (int i = 0; i &amp;lt; countPeopleEntering; ++i) {&lt;br /&gt;
            sem* personSem = floor.peopleEntering.front();&lt;br /&gt;
            personSem-&amp;gt;signal();&lt;br /&gt;
            floor.peopleEntering.pop_front();&lt;br /&gt;
        }&lt;br /&gt;
        for (int i = 0; i &amp;lt; countPeopleEntering; ++i) {&lt;br /&gt;
            liftSem.wait();&lt;br /&gt;
        }&lt;br /&gt;
        floor.mutexEntering.signal();&lt;br /&gt;
        // Настављамо на следећи спрат&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Користећи технику активних монитора потребно је реализовати семафор који поред стандардних атомских операција &#039;&#039;signal()&#039;&#039; и &#039;&#039;wait()&#039;&#039; има и атомске операције &#039;&#039;signal(n)&#039;&#039; и &#039;&#039;wait(n)&#039;&#039; која интерну семафорску променљиву атомски увећава односно умањује за &#039;&#039;n&#039;&#039; уколико је то могуће, уколико није чека док не буде били могуће. Процес који је раније упутио захтев треба раније да обави своју операцију.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
enum op_kind{WAIT,SIGNAL,WAITN,SIGNALN};&lt;br /&gt;
chan request(int clientID, op_kind kind, int n);&lt;br /&gt;
chan reply[n](bool);&lt;br /&gt;
&lt;br /&gt;
class Semaphore{&lt;br /&gt;
   public:&lt;br /&gt;
      &lt;br /&gt;
      void run(){&lt;br /&gt;
         int clientID;&lt;br /&gt;
         op_kind kind;&lt;br /&gt;
         int n;&lt;br /&gt;
         int tokens = 0;&lt;br /&gt;
         queue&amp;lt;pair&amp;lt;int,int&amp;gt;&amp;gt; pending;&lt;br /&gt;
         while(true){&lt;br /&gt;
            receive request(clientID, kind, n);&lt;br /&gt;
            if(kind == WAIT){&lt;br /&gt;
               if(tokens&amp;lt;=0){&lt;br /&gt;
                  pending.push(make_pair(clientID, 1));&lt;br /&gt;
               }&lt;br /&gt;
               else{&lt;br /&gt;
                  tokens--;&lt;br /&gt;
                  send reply[clientID](true);&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
            else if(kind == WAITN){&lt;br /&gt;
               if(tokens&amp;lt;=n-1){&lt;br /&gt;
                  pending.push(make_pair(clientID, n));&lt;br /&gt;
               }&lt;br /&gt;
               else{&lt;br /&gt;
                  tokens = tokens-n;&lt;br /&gt;
                  send reply[clientID](true);&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
            else if(kind == SIGNAL){&lt;br /&gt;
               tokens++;&lt;br /&gt;
               if(!pending.empty() &amp;amp;&amp;amp; pending.front().second == tokens){&lt;br /&gt;
                  tokens = 0;&lt;br /&gt;
                  send reply[pending.front().first](true);&lt;br /&gt;
                  pending.pop();&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
            else if(kind == SIGNALN){&lt;br /&gt;
               tokens += n;&lt;br /&gt;
               while(!pending.empty() &amp;amp;&amp;amp; pending.front().second &amp;lt;= tokens){&lt;br /&gt;
                  tokens -= pending.front().second;&lt;br /&gt;
                  send reply[pending.front().first](true);&lt;br /&gt;
                  pending.pop();&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
У свемиру постоји N небеских тела која међусобно интерагују (&#039;&#039;N Body Gravitational Problem&#039;&#039;), по Њутновом закону гравитације. Свако тело интерагује са сваким, при чему размењују информације о позицији, брзини и вектору силе. Користећи CSP потребно је решити овај проблем користећи торбу послова за дохватање посла и синхронизацију на баријери у свакој итерацији. Потребно је реализовати следеће процесе: &#039;&#039;Worker&#039;&#039; (обавља израчунавање), &#039;&#039;Bag&#039;&#039; (обавља поделу посла) и &#039;&#039;Collector&#039;&#039; (обавља прикупљање резултата). Број процеса &#039;&#039;Worker&#039;&#039; није познат, али је познато да их има мање од N. Постоји тачно један процес &#039;&#039;Bag&#039;&#039; и тачно један процес &#039;&#039;Collector&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A1_2018&amp;diff=4237</id>
		<title>КДП/К1 2018</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A1_2018&amp;diff=4237"/>
		<updated>2022-04-01T15:14:12Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* Komentari */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp18.zip странице предмета] (зипована).&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Потребно је урадити синхронизацију на баријери која функционише на следећи начин: постоје два процеса координатора за по половину радних процеса (претпоставити паран број радних процеса) који треба да се синхронизују на баријери. Притом, та два процеса координатора прво закључују када су сви њихови процеси стигли до њихових интерних подбаријера и кроз поступак међусобне комуникације координатора утврђују када су сви радни процеси стигли до еквивалентне јединствене баријере. Након тога оба процеса координатора треба да дозволе радним процесима да прођу баријеру. Написати кôд радних процеса и оба процеса координатора.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N=...;&lt;br /&gt;
sem arrive[N]={0};&lt;br /&gt;
sem pass[N]={0};&lt;br /&gt;
bool coordinator=false;&lt;br /&gt;
sem coordinatorSem=0;&lt;br /&gt;
sem mutex=0;&lt;br /&gt;
&lt;br /&gt;
void coordinator1(){&lt;br /&gt;
    for(int i=0; i&amp;lt;N/2; i++) arrive[i].wait();&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    if(coordinator){&lt;br /&gt;
        coordinator=false;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        coordinatorSem.signal();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        coordinator=true;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        coordinatorSem.wait();&lt;br /&gt;
    }&lt;br /&gt;
    for(int i=0; i&amp;lt;N/2; i++) pass[i].signal();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void coordinator2(){&lt;br /&gt;
    for(int i=N/2; i&amp;lt;N; i++) arrive[i].wait();&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    if(coordinator){&lt;br /&gt;
        coordinator=false;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        coordinatorSem.signal();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        coordinator=true;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        coordinatorSem.wait();&lt;br /&gt;
    }&lt;br /&gt;
    for(int i=N/2; i&amp;lt;N; i++) pass[i].signal();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void process(int i){&lt;br /&gt;
    while(true){&lt;br /&gt;
        work();&lt;br /&gt;
        arrive[i].signal();&lt;br /&gt;
        pass[i].wait();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Негде у Африци постоји дубок кањон на чијим литицама живе бабуни (&amp;lt;i&amp;gt;The Baboons Crossing Problem&amp;lt;/i&amp;gt;). Између две литице кањона постоји лијана преко које бабуни прелазе реку. Да би се избегао сукоб између бабуна у једном тренутку на лијани смеју да се нађу само бабуни који припадају једној страни кањона. Такође, лијана може да издржи највише 5 бабуна, иначе пуца. Користећи семафоре написати програм за бабуне са обе стране кањона.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N=5;&lt;br /&gt;
int baboons=0;&lt;br /&gt;
int currentSide=0;&lt;br /&gt;
sem waiting[2]={0};&lt;br /&gt;
List&amp;lt;int&amp;gt; list;&lt;br /&gt;
sem mutex=0;&lt;br /&gt;
&lt;br /&gt;
//side je 0 ili 1, u zavisnosti sa koje strane kanjona se nalazi&lt;br /&gt;
void baboon(int side){&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    if(baboons==0 || (currentSide==side &amp;amp;&amp;amp; baboons&amp;lt;N &amp;amp;&amp;amp; list.size()==0)){ //Uslov list.size()==0 da ne bi doslo do izgladnjivanja&lt;br /&gt;
        currentSide=side;&lt;br /&gt;
        baboons++;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        list.add(side);&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        waiting[side].wait();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    cross();&lt;br /&gt;
&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    baboons--;&lt;br /&gt;
    if(list.size()&amp;gt;0){&lt;br /&gt;
        if(list.get(0)==side){ //Ako je sledeci zablokiran kretao sa iste strane, moze da krene kada jedan babun predje na drugu stranu&lt;br /&gt;
            list.pop(0);&lt;br /&gt;
            baboons++;&lt;br /&gt;
            waiting[side].signal();&lt;br /&gt;
        }&lt;br /&gt;
        else if(baboons==0){ //Ako je sledeci zablokiran kretao sa suprotne strane, moze da krene samo kada svi babuni sa prvobitne strane predju lijanu, i sa njim mozemo pustiti jos   &lt;br /&gt;
            currentSide=!side;    // maksimalno 4(N-1) babuna sa iste strane ako su se svi zablokirali za redom&lt;br /&gt;
            while(list.get(0)==(!side) &amp;amp;&amp;amp; baboons&amp;lt;N){&lt;br /&gt;
                list.pop(0);&lt;br /&gt;
                baboons++;&lt;br /&gt;
                waiting[!side].signal();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    mutex.signal();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A1_2018&amp;diff=4236</id>
		<title>КДП/К1 2018</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A1_2018&amp;diff=4236"/>
		<updated>2022-04-01T15:04:11Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: Dodata oba zadatka sa K1 2018&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp18.zip странице предмета] (зипована).&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Потребно је урадити синхронизацију на баријери која функционише на следећи начин: постоје два процеса координатора за по половину радних процеса (претпоставити паран број радних процеса) који треба да се синхронизују на баријери. Притом, та два процеса координатора прво закључују када су сви њихови процеси стигли до њихових интерних подбаријера и кроз поступак међусобне комуникације координатора утврђују када су сви радни процеси стигли до еквивалентне јединствене баријере. Након тога оба процеса координатора треба да дозволе радним процесима да прођу баријеру. Написати кôд радних процеса и оба процеса координатора.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N=...;&lt;br /&gt;
sem arrive[N]={0};&lt;br /&gt;
sem pass[N]={0};&lt;br /&gt;
bool coordinator=false;&lt;br /&gt;
sem coordinatorSem=0;&lt;br /&gt;
sem mutex=0;&lt;br /&gt;
&lt;br /&gt;
void coordinator1(){&lt;br /&gt;
    for(int i=0; i&amp;lt;N/2; i++) arrive[i].wait();&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    if(coordinator){&lt;br /&gt;
        coordinator=false;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        coordinatorSem.signal();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        coordinator=true;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        coordinatorSem.wait();&lt;br /&gt;
    }&lt;br /&gt;
    for(int i=0; i&amp;lt;N/2; i++) pass[i].signal();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void coordinator2(){&lt;br /&gt;
    for(int i=N/2; i&amp;lt;N; i++) arrive[i].wait();&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    if(coordinator){&lt;br /&gt;
        coordinator=false;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        coordinatorSem.signal();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        coordinator=true;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        coordinatorSem.wait();&lt;br /&gt;
    }&lt;br /&gt;
    for(int i=N/2; i&amp;lt;N; i++) pass[i].signal();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void process(int i){&lt;br /&gt;
    while(true){&lt;br /&gt;
        work();&lt;br /&gt;
        arrive[i].signal();&lt;br /&gt;
        pass[i].wait();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Негде у Африци постоји дубок кањон на чијим литицама живе бабуни (&amp;lt;i&amp;gt;The Baboons Crossing Problem&amp;lt;/i&amp;gt;). Између две литице кањона постоји лијана преко које бабуни прелазе реку. Да би се избегао сукоб између бабуна у једном тренутку на лијани смеју да се нађу само бабуни који припадају једној страни кањона. Такође, лијана може да издржи највише 5 бабуна, иначе пуца. Користећи семафоре написати програм за бабуне са обе стране кањона.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N=5;&lt;br /&gt;
int baboons=0;&lt;br /&gt;
int currentSide=0;&lt;br /&gt;
sem waiting[2]={0};&lt;br /&gt;
List&amp;lt;int&amp;gt; list;&lt;br /&gt;
sem mutex=0;&lt;br /&gt;
&lt;br /&gt;
//side je 0 ili 1, u zavisnosti sa koje strane kanjona se nalazi&lt;br /&gt;
void baboon(int side){&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    if(baboons==0 || (currentSide==side &amp;amp;&amp;amp; baboons&amp;lt;N &amp;amp;&amp;amp; list.size()==0)){&lt;br /&gt;
        currentSide=side;&lt;br /&gt;
        baboons++;&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        list.add(side);&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        waiting[side].wait();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    cross();&lt;br /&gt;
&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    baboons--;&lt;br /&gt;
    if(list.size()&amp;gt;0){&lt;br /&gt;
        if(list.get(0)==side){&lt;br /&gt;
            list.pop(0);&lt;br /&gt;
            baboons++;&lt;br /&gt;
            waiting[side].signal();&lt;br /&gt;
        }&lt;br /&gt;
        else if(baboons==0){&lt;br /&gt;
            currentSide=!side;&lt;br /&gt;
            while(list.get(0)==(!side) &amp;amp;&amp;amp; baboons&amp;lt;N){&lt;br /&gt;
                list.pop(0);&lt;br /&gt;
                baboons++;&lt;br /&gt;
                waiting[!side].signal();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    mutex.signal();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A1_2020&amp;diff=4234</id>
		<title>КДП/К1 2020</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A1_2020&amp;diff=4234"/>
		<updated>2022-04-01T11:54:38Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* Prepravka indeksa semafora u signal() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp20.zip странице предмета] (зипована).&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Написати и објасните&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; &#039;&#039;CLH&#039;&#039; алгоритам за критичну секцију (&#039;&#039;coarse grain&#039;&#039;). Реализовати (&#039;&#039;fine grain&#039;&#039;) верзију алгоритма уколико би на датом процесору постојала операција SWAP која би недељиво обављала замену вредности два операнда (&amp;lt;code&amp;gt;SWAP(var1, var2): &amp;amp;lt; temp = var1; var1 = var2; var2 = temp; &amp;gt;&amp;lt;/code&amp;gt;). Објаснити зашто је то правична (&#039;&#039;fair&#039;&#039;) критична секција.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&#039;&#039;CLH&#039;&#039; алгоритам уланчава процесе који желе да уђу у критичну секцију у неку врсту уланчане листе, тако да сваки проверава да ли је онај пре њега и даље закључан и у тренутку када више не буде закључан улази у критичну секцију.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Node* tail = nullptr;&lt;br /&gt;
&lt;br /&gt;
void worker() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        Node* node = new Node();&lt;br /&gt;
        node-&amp;gt;locked = true;&lt;br /&gt;
        &amp;lt; prev = tail; tail = node; &amp;gt;&lt;br /&gt;
        &amp;lt; await (prev == nullptr || !prev-&amp;gt;locked); &amp;gt;&lt;br /&gt;
        // Критична секција&lt;br /&gt;
        node-&amp;gt;locked = false;&lt;br /&gt;
        // Некритична секција&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Пошто је &amp;lt;code&amp;gt;prev&amp;lt;/code&amp;gt; овде локална променљива и ту нема критичне референце, &amp;lt;code&amp;gt;await&amp;lt;/code&amp;gt; се може заменити обичном петљом. Са друге стране, за атомску акцију &amp;lt;code&amp;gt;prev = tail; tail = node;&amp;lt;/code&amp;gt; потребна нам је поменута SWAP инструкција:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Node* tail = nullptr;&lt;br /&gt;
&lt;br /&gt;
void worker() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        Node* node = new Node();&lt;br /&gt;
        node-&amp;gt;locked = true;&lt;br /&gt;
        Node* prev = node;&lt;br /&gt;
        SWAP(prev, tail);&lt;br /&gt;
        while (prev != nullptr &amp;amp;&amp;amp; prev-&amp;gt;locked) skip();&lt;br /&gt;
        // Критична секција&lt;br /&gt;
        node-&amp;gt;locked = false;&lt;br /&gt;
        // Некритична секција&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ова критична секција је правична јер ће први процес који уради замену (изврши SWAP инструкцију) бити први који ће ући у критичну секцију.&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се један паркинг. Постоји само једна рампа која служи и за улаз на паркинг, и за излаз са паркинга, кроз коју може пролазити само један аутомобил у једном тренутку. На паркингу има N места за паркирање. Аутомобили који улазе, могу да уђу, један по један, уколико има слободних места. Уколико нема слободног места, проверава се да ли има аутомобила који хоће да изађу. Ако након изласка свих аутомобила који желе да изађу и уласка аутомобила који су дошли пре њега за аутомобил неће бити места, он одлази у потрагу за другим паркингом. Аутомобили при изласку плаћају услуге паркинга и излазе један по један. На почетку предност на рампи имају аутомобили који излазе са паркинга. Након што кроз рампу изађе K узастопних аутомобила, приоритет се мења (додељује се већи приоритет онима који улазе). Након проласка K узастопних аутомобила који улазе, приоритет се поново мења. Ако нема аутомобила из смера који има приоритет, аутомобили који немају приоритетни смер смеју да пролазе кроз рампу. Коришћењем једног низа од 2N + 1 семафора направити методе за тражење дозвола за улаз и излаз и обавештавање о уласку и изласку аутомобила са паркинга. Није дозвољено користити помоћне структуре података ни додатне елементе за синхронизацију процеса. Аутомобили не смеју да се претичу.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
const int N = 100;&lt;br /&gt;
const int K = 50;&lt;br /&gt;
&lt;br /&gt;
sem sems[2 * N + 1];&lt;br /&gt;
// Број слободних места на паркингу (аутомобили који чекају излаз су ослободили своје место)&lt;br /&gt;
int capacity = N;&lt;br /&gt;
// Број аутомобила који чекају на улазу&lt;br /&gt;
int entering = 0;&lt;br /&gt;
// Број аутомобила који чекају на излазу&lt;br /&gt;
int exiting = 0;&lt;br /&gt;
int enterTail = 0;&lt;br /&gt;
int enterHead = 0;&lt;br /&gt;
int exitTail = 0;&lt;br /&gt;
int exitHead = 0;&lt;br /&gt;
// true - излаз, false - улаз&lt;br /&gt;
bool priority = true;&lt;br /&gt;
int passed = 0;&lt;br /&gt;
sem&amp;amp; mutex = sems[2 * N];&lt;br /&gt;
bool requestEntrance() {&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    if (capacity - entering &amp;lt;= 0) {&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    ++entering;&lt;br /&gt;
    if (entering == 1 &amp;amp;&amp;amp; exiting == 0) {&lt;br /&gt;
        // Слободан пролаз&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    int semIndex = enterTail;&lt;br /&gt;
    enterTail = (enterTail + 1) % N;&lt;br /&gt;
    mutex.signal();&lt;br /&gt;
    sems[semIndex].wait();&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
void requestExit() {&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    ++capacity;&lt;br /&gt;
    ++exiting;&lt;br /&gt;
    if (entering == 0 &amp;amp;&amp;amp; exiting == 1) {&lt;br /&gt;
        // Слободан пролаз&lt;br /&gt;
        mutex.signal();&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    int semIndex = exitTail + N;&lt;br /&gt;
    exitTail = (exitTail + 1) % N;&lt;br /&gt;
    mutex.signal();&lt;br /&gt;
    sems[semIndex].wait();&lt;br /&gt;
}&lt;br /&gt;
void entered() {&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    --entering;&lt;br /&gt;
    --capacity;&lt;br /&gt;
    signal();&lt;br /&gt;
    mutex.signal();&lt;br /&gt;
}&lt;br /&gt;
void exited() {&lt;br /&gt;
    mutex.wait();&lt;br /&gt;
    --exiting;&lt;br /&gt;
    signal();&lt;br /&gt;
    mutex.signal();&lt;br /&gt;
}&lt;br /&gt;
void signal() {&lt;br /&gt;
    int semIndex = -1;&lt;br /&gt;
    bool hasCapacity = (capacity - exiting) &amp;lt; N;&lt;br /&gt;
    bool signalExit = (exiting &amp;gt; 0) &amp;amp;&amp;amp; (priority || !hasCapacity || entering == 0);&lt;br /&gt;
    bool signalEnter = (entering &amp;gt; 0 &amp;amp;&amp;amp; hasCapacity) &amp;amp;&amp;amp; (!priority || exiting == 0);&lt;br /&gt;
    if (signalExit) {&lt;br /&gt;
        semIndex = exitHead + N;&lt;br /&gt;
        exitHead = (exitHead + 1) % N;&lt;br /&gt;
    } else if (signalEnter) {&lt;br /&gt;
        semIndex = enterHead;&lt;br /&gt;
        enterHead = (enterHead + 1) % N;&lt;br /&gt;
    }&lt;br /&gt;
    if (semIndex &amp;gt;= 0) {&lt;br /&gt;
        if (priority != signalExit) {&lt;br /&gt;
            // Ако сада није изашао аутомобил из реда који је имао приоритет,&lt;br /&gt;
            // ресетује се бројач узастопних аутомобила&lt;br /&gt;
            passed = 0;&lt;br /&gt;
        } else {&lt;br /&gt;
            ++passed;&lt;br /&gt;
        }&lt;br /&gt;
        if (passed == K) {&lt;br /&gt;
            passed = 0;&lt;br /&gt;
            priority = !priority;&lt;br /&gt;
        }&lt;br /&gt;
        sems[semIndex].signal();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
void car() {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        if (requestEntrance()) {&lt;br /&gt;
            entered();&lt;br /&gt;
            // ...&lt;br /&gt;
            requestExit();&lt;br /&gt;
            // pay();&lt;br /&gt;
            exited();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3962</id>
		<title>Неуралне мреже/Јануар 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3962"/>
		<updated>2022-02-20T23:17:29Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 1. zadatak */ Dodatno objasnjenje za poslednja dva&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Zaokružiti tačna tvrđenja (svaki tačan odgovor: +1 poen, svaki netačan odgovor: -0.5 poena, bez zaokruživanja: 0 poena):&lt;br /&gt;
&lt;br /&gt;
=== Stavka a ===&lt;br /&gt;
&#039;&#039;Stepen pripadanja&#039;&#039; konkretne vrednosti lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;realna vrednost&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka b ===&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;kontinualnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualna realna funkcija&amp;lt;/span&amp;gt;&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka c ===&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ovde bi kao odgovor moglo da dođe u obzir diskretna funkcija.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka d ===&lt;br /&gt;
&#039;&#039;Podrška (support) kontinualnog&#039;&#039; fuzzy skupa je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka e ===&lt;br /&gt;
&#039;&#039;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-presek (&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-cut) diskretnog&#039;&#039; fuzzy skupa&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;diskretan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka f ===&lt;br /&gt;
Za &#039;&#039;kontinualan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;) je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka g ===&lt;br /&gt;
Za &#039;&#039;diskretan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;):&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Odgovor je diskretan fuzzy skup.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka h ===&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Sugenove&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka i ===&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Mamdanijeve&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;I kod Mamdanijeve i kod Sugenove mašine ulazni skupovi moraju biti kontinualni.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka j ===&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Mamdanijeve&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka k ===&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Sugenove&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan diskretan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka l ===&lt;br /&gt;
Rezultat Center of Gravity defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje(zbog deljenja sa nulom).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka m ===&lt;br /&gt;
Rezultat Weighted Average defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje(zbog deljenja sa nulom).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
Za kontinualne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  1 + \frac{x}{4}, &amp;amp; -4 \leq x \leq 0 \\&lt;br /&gt;
  1 - \frac{x}{4}, &amp;amp; 0 &amp;lt; x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  2 + \frac{x}{2}, &amp;amp; -4 \leq x &amp;lt; -2 \\&lt;br /&gt;
  1, &amp;amp; -2 \leq x &amp;lt; 0 \\&lt;br /&gt;
  1 - \frac{x}{2}, &amp;amp; 0 \leq x &amp;lt; 2 \\&lt;br /&gt;
  0 &amp;amp; 2 \leq x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  y + 1, &amp;amp; -1 \leq y &amp;lt; 0 \\&lt;br /&gt;
  1, &amp;amp; 0 \leq y \leq 1 \\&lt;br /&gt;
  \frac{3-y}{2}, &amp;amp; 1 &amp;lt; y \leq 3&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Skicirati funkcije pripadanja za fuzzy skupove: (standardna) unija &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;, (standardni) komplement &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; i (standardni) komplement &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt; biće &#039;&#039;prazan skup&#039;&#039; za opseg konkretnih vrednosti ulazne varijable: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;plain&amp;quot;&amp;gt;Sa grafika za &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; vidimo da će biti prazan skup za opseg &amp;lt;math&amp;gt;x \in [-2,0]&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;clipping implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = -1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ A\ \text{then}\ y\ \text{is}\ \neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;gallery class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;plain&amp;quot;&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2 mua.svg    | &amp;lt;math&amp;gt;\mu_A(x)&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2 mub.svg    | &amp;lt;math&amp;gt;\mu_B(x)&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2 muc.svg    | &amp;lt;math&amp;gt;\mu_C(x)&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2a A unija B.svg    | Zadatak 2a, &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2a komplement B.svg | Zadatak 2a, &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2a komplement C.svg | Zadatak 2a, &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2b.svg              | Zadatak 2b&lt;br /&gt;
  NM januar 2019 zadatak 2d.svg              | Zadatak 2d&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
Za diskretne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(z) = 0.1|50 + 0.3|-30 + 0.1|-10 + 0.1|10 + 0.0|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(z) = 0.0|50 + 0.4|-30 + 0.6|-10 + 0.7|10 + 0.5|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(z) = 0.5|50 + 1.0|-30 + 0.8|-10 + 0.5|10 + 0.1|30&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ako je presek skupova definisan kao &#039;&#039;proizvod&#039;&#039; pripadnosti, tada je za &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: &amp;lt;math&amp;gt;\mu_D(z) = &amp;lt;/math&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;plain&amp;quot;&amp;gt;&amp;lt;math&amp;gt; \frac{0}{50} + \frac{0.12}{-30} + \frac{0.048}{-10} + \frac{0.035}{10} + \frac{0}{30}&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Rezultat standardne (weighted average) defazifikacije, primenjene nad skupom &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt; je:&lt;br /&gt;
#: &amp;lt;math&amp;gt;z_{WA} =&amp;lt;/math&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;-18.37&amp;lt;/span&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;&amp;lt;math&amp;gt;z_{WA} =\frac{0 \cdot 50 + 0.12 \cdot (-30) + 0.048 \cdot (-10) + 0.035 \cdot 10 + 0 \cdot 30}{0+0.12+0.048+0.035+0}&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Неуралне мреже]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3960</id>
		<title>Неуралне мреже/Јануар 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3960"/>
		<updated>2022-02-20T23:09:11Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 2. zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Zaokružiti tačna tvrđenja (svaki tačan odgovor: +1 poen, svaki netačan odgovor: -0.5 poena, bez zaokruživanja: 0 poena):&lt;br /&gt;
&lt;br /&gt;
=== Stavka a ===&lt;br /&gt;
&#039;&#039;Stepen pripadanja&#039;&#039; konkretne vrednosti lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;realna vrednost&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka b ===&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;kontinualnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualna realna funkcija&amp;lt;/span&amp;gt;&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka c ===&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ovde bi kao odgovor moglo da dođe u obzir diskretna funkcija.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka d ===&lt;br /&gt;
&#039;&#039;Podrška (support) kontinualnog&#039;&#039; fuzzy skupa je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka e ===&lt;br /&gt;
&#039;&#039;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-presek (&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-cut) diskretnog&#039;&#039; fuzzy skupa&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;diskretan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka f ===&lt;br /&gt;
Za &#039;&#039;kontinualan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;) je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka g ===&lt;br /&gt;
Za &#039;&#039;diskretan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;):&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Odgovor je diskretan fuzzy skup.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka h ===&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Sugenove&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka i ===&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Mamdanijeve&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;I kod Mamdanijeve i kod Sugenove mašine ulazni skupovi moraju biti kontinualni.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka j ===&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Mamdanijeve&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka k ===&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Sugenove&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan diskretan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka l ===&lt;br /&gt;
Rezultat Center of Gravity defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka m ===&lt;br /&gt;
Rezultat Weighted Average defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
Za kontinualne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  1 + \frac{x}{4}, &amp;amp; -4 \leq x \leq 0 \\&lt;br /&gt;
  1 - \frac{x}{4}, &amp;amp; 0 &amp;lt; x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  2 + \frac{x}{2}, &amp;amp; -4 \leq x &amp;lt; -2 \\&lt;br /&gt;
  1, &amp;amp; -2 \leq x &amp;lt; 0 \\&lt;br /&gt;
  1 - \frac{x}{2}, &amp;amp; 0 \leq x &amp;lt; 2 \\&lt;br /&gt;
  0 &amp;amp; 2 \leq x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  y + 1, &amp;amp; -1 \leq y &amp;lt; 0 \\&lt;br /&gt;
  1, &amp;amp; 0 \leq y \leq 1 \\&lt;br /&gt;
  \frac{3-y}{2}, &amp;amp; 1 &amp;lt; y \leq 3&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Skicirati funkcije pripadanja za fuzzy skupove: (standardna) unija &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;, (standardni) komplement &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; i (standardni) komplement &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt; biće &#039;&#039;prazan skup&#039;&#039; za opseg konkretnih vrednosti ulazne varijable: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;plain&amp;quot;&amp;gt;Sa grafika za &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; vidimo da će biti prazan skup za opseg &amp;lt;math&amp;gt;x \in [-2,0]&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;clipping implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = -1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ A\ \text{then}\ y\ \text{is}\ \neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;gallery class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;plain&amp;quot;&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2 mua.svg    | &amp;lt;math&amp;gt;\mu_A(x)&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2 mub.svg    | &amp;lt;math&amp;gt;\mu_B(x)&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2 muc.svg    | &amp;lt;math&amp;gt;\mu_C(x)&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2a A unija B.svg    | Zadatak 2a, &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2a komplement B.svg | Zadatak 2a, &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2a komplement C.svg | Zadatak 2a, &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;&lt;br /&gt;
  NM januar 2019 zadatak 2b.svg              | Zadatak 2b&lt;br /&gt;
  NM januar 2019 zadatak 2d.svg              | Zadatak 2d&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
Za diskretne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(z) = 0.1|50 + 0.3|-30 + 0.1|-10 + 0.1|10 + 0.0|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(z) = 0.0|50 + 0.4|-30 + 0.6|-10 + 0.7|10 + 0.5|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(z) = 0.5|50 + 1.0|-30 + 0.8|-10 + 0.5|10 + 0.1|30&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ako je presek skupova definisan kao &#039;&#039;proizvod&#039;&#039; pripadnosti, tada je za &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: &amp;lt;math&amp;gt;\mu_D(z) = &amp;lt;/math&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;plain&amp;quot;&amp;gt;&amp;lt;math&amp;gt; \frac{0}{50} + \frac{0.12}{-30} + \frac{0.048}{-10} + \frac{0.035}{10} + \frac{0}{30}&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Rezultat standardne (weighted average) defazifikacije, primenjene nad skupom &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt; je:&lt;br /&gt;
#: &amp;lt;math&amp;gt;z_{WA} =&amp;lt;/math&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;-18.37&amp;lt;/span&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;&amp;lt;math&amp;gt;z_{WA} =\frac{0 \cdot 50 + 0.12 \cdot (-30) + 0.048 \cdot (-10) + 0.035 \cdot 10 + 0 \cdot 30}{0+0.12+0.048+0.035+0}&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Неуралне мреже]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3944</id>
		<title>Неуралне мреже/Јануар 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3944"/>
		<updated>2022-02-20T21:36:22Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 3. zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Zaokružiti tačna tvrđenja (svaki tačan odgovor: +1 poen, svaki netačan odgovor: -0.5 poena, bez zaokruživanja: 0 poena):&lt;br /&gt;
&lt;br /&gt;
=== Stavka a ===&lt;br /&gt;
&#039;&#039;Stepen pripadanja&#039;&#039; konkretne vrednosti lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;realna vrednost&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka b ===&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;kontinualnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualna realna funkcija&amp;lt;/span&amp;gt;&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka c ===&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ovde bi kao odgovor moglo da dođe u obzir diskretna funkcija.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka d ===&lt;br /&gt;
&#039;&#039;Podrška (support) kontinualnog&#039;&#039; fuzzy skupa je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka e ===&lt;br /&gt;
&#039;&#039;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-presek (&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-cut) diskretnog&#039;&#039; fuzzy skupa&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;diskretan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka f ===&lt;br /&gt;
Za &#039;&#039;kontinualan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;) je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka g ===&lt;br /&gt;
Za &#039;&#039;diskretan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;):&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Odgovor je diskretan fuzzy skup.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka h ===&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Sugenove&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka i ===&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Mamdanijeve&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;I kod Mamdanijeve i kod Sugenove mašine ulazni skupovi moraju biti kontinualni.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka j ===&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Mamdanijeve&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka k ===&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Sugenove&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan diskretan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka l ===&lt;br /&gt;
Rezultat Center of Gravity defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stavka m ===&lt;br /&gt;
Rezultat Weighted Average defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Za kontinualne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  1 + \frac{x}{4}, &amp;amp; -4 \leq x \leq 0 \\&lt;br /&gt;
  1 - \frac{x}{4}, &amp;amp; 0 &amp;lt; x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  2 + \frac{x}{2}, &amp;amp; -4 \leq x &amp;lt; -2 \\&lt;br /&gt;
  1, &amp;amp; -2 \leq x &amp;lt; 0 \\&lt;br /&gt;
  1 - \frac{x}{2}, &amp;amp; 0 \leq x &amp;lt; 2 \\&lt;br /&gt;
  0 &amp;amp; 2 \leq x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  y + 1, &amp;amp; -1 \leq y &amp;lt; 0 \\&lt;br /&gt;
  1, &amp;amp; 0 \leq y \leq 1 \\&lt;br /&gt;
  \frac{3-y}{2}, &amp;amp; 1 &amp;lt; y \leq 3&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Skicirati funkcije pripadanja za fuzzy skupove: (standardna) unija &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;, (standardni) komplement &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; i (standardni) komplement &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt; biće &#039;&#039;prazan skup&#039;&#039; za opseg konkretnih vrednosti ulazne varijable: _______________&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;clipping implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = -1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ A\ \text{then}\ y\ \text{is}\ \neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
Za diskretne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(z) = 0.1|50 + 0.3|-30 + 0.1|-10 + 0.1|10 + 0.0|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(z) = 0.0|50 + 0.4|-30 + 0.6|-10 + 0.7|10 + 0.5|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(z) = 0.5|50 + 1.0|-30 + 0.8|-10 + 0.5|10 + 0.1|30&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ako je presek skupova definisan kao &#039;&#039;proizvod&#039;&#039; pripadnosti, tada je za &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: &amp;lt;math&amp;gt;\mu_D(z) = &amp;lt;/math&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;plain&amp;quot;&amp;gt;&amp;lt;math&amp;gt; \frac{0}{50} + \frac{0.12}{-30} + \frac{0.048}{-10} + \frac{0.035}{10} + \frac{0}{30}&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
# Rezultat standardne (weighted average) defazifikacije, primenjene nad skupom &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt; je:&lt;br /&gt;
#: &amp;lt;math&amp;gt;z_{WA} =&amp;lt;/math&amp;gt; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;-18.37&amp;lt;/span&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;&amp;lt;math&amp;gt;z_{WA} =\frac{0 \cdot 50 + 0.12 \cdot (-30) + 0.048 \cdot (-10) + 0.035 \cdot 10 + 0 \cdot 30}{0+0.12+0.048+0.035+0}&amp;lt;/math&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Неуралне мреже]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3942</id>
		<title>Неуралне мреже/Јануар 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3942"/>
		<updated>2022-02-20T21:15:55Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Zaokružiti tačna tvrđenja (svaki tačan odgovor: +1 poen, svaki netačan odgovor: -0.5 poena, bez zaokruživanja: 0 poena):&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Stepen pripadanja&#039;&#039; konkretne vrednosti lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;realna vrednost&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;kontinualnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualna realna funkcija&amp;lt;/span&amp;gt;&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ovde bi kao odgovor moglo da dođe u obzir diskretna funkcija.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Podrška (support) kontinualnog&#039;&#039; fuzzy skupa je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-presek (&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-cut) diskretnog&#039;&#039; fuzzy skupa&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;diskretan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;kontinualan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;) je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;diskretan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;):&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Odgovor je diskretan fuzzy skup.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Sugenove&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Mamdanijeve&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;I kod Mamdanijeve i kod Sugenove mašine ulazni skupovi moraju biti kontinualni.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Mamdanijeve&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Sugenove&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan diskretan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Center of Gravity defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Weighted Average defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Za kontinualne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  1 + \frac{x}{4}, &amp;amp; -4 \leq x \leq 0 \\&lt;br /&gt;
  1 - \frac{x}{4}, &amp;amp; 0 &amp;lt; x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  2 + \frac{x}{2}, &amp;amp; -4 \leq x &amp;lt; -2 \\&lt;br /&gt;
  1, &amp;amp; -2 \leq x &amp;lt; 0 \\&lt;br /&gt;
  1 - \frac{x}{2}, &amp;amp; 0 \leq x &amp;lt; 2 \\&lt;br /&gt;
  0 &amp;amp; 2 \leq x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  y + 1, &amp;amp; -1 \leq y &amp;lt; 0 \\&lt;br /&gt;
  1, &amp;amp; 0 \leq y \leq 1 \\&lt;br /&gt;
  \frac{3-y}{2}, &amp;amp; 1 &amp;lt; y \leq 3&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Skicirati funkcije pripadanja za fuzzy skupove: (standardna) unija &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;, (standardni) komplement &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; i (standardni) komplement &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt; biće &#039;&#039;prazan skup&#039;&#039; za opseg konkretnih vrednosti ulazne varijable: _______________&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;clipping implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = -1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ A\ \text{then}\ y\ \text{is}\ \neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
Za diskretne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(z) = 0.1|50 + 0.3|-30 + 0.1|-10 + 0.1|10 + 0.0|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(z) = 0.0|50 + 0.4|-30 + 0.6|-10 + 0.7|10 + 0.5|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(z) = 0.5|50 + 1.0|-30 + 0.8|-10 + 0.5|10 + 0.1|30&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ako je presek skupova definisan kao &#039;&#039;proizvod&#039;&#039; pripadnosti, tada je za &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: &amp;lt;math&amp;gt;\mu_D(z) =&amp;lt;/math&amp;gt;&lt;br /&gt;
# Rezultat standardne (weighted average) defazifikacije, primenjene nad skupom &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt; je:&lt;br /&gt;
#: &amp;lt;math&amp;gt;z_{WA} =&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Неуралне мреже]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3941</id>
		<title>Неуралне мреже/Јануар 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3941"/>
		<updated>2022-02-20T21:14:46Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Zaokružiti tačna tvrđenja (svaki tačan odgovor: +1 poen, svaki netačan odgovor: -0.5 poena, bez zaokruživanja: 0 poena):&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Stepen pripadanja&#039;&#039; konkretne vrednosti lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;realna vrednost&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;kontinualnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualna realna funkcija&amp;lt;/span&amp;gt;&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ovde bi kao odgovor moglo da dođe u obzir diskretna funkcija.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Podrška (support) kontinualnog&#039;&#039; fuzzy skupa je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-presek (&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-cut) diskretnog&#039;&#039; fuzzy skupa&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;diskretan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;kontinualan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;) je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;diskretan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;):&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Odgovor je diskretan fuzzy skup.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Sugenove&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Mamdanijeve&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;I kod Mamdanijeve i kod Sugenove mašine ulazni skupovi moraju biti kontinualni.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Mamdanijeve&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Sugenove&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan diskretan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Center of Gravity defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Weighted Average defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
Za kontinualne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  1 + \frac{x}{4}, &amp;amp; -4 \leq x \leq 0 \\&lt;br /&gt;
  1 - \frac{x}{4}, &amp;amp; 0 &amp;lt; x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  2 + \frac{x}{2}, &amp;amp; -4 \leq x &amp;lt; -2 \\&lt;br /&gt;
  1, &amp;amp; -2 \leq x &amp;lt; 0 \\&lt;br /&gt;
  1 - \frac{x}{2}, &amp;amp; 0 \leq x &amp;lt; 2 \\&lt;br /&gt;
  0 &amp;amp; 2 \leq x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  y + 1, &amp;amp; -1 \leq y &amp;lt; 0 \\&lt;br /&gt;
  1, &amp;amp; 0 \leq y \leq 1 \\&lt;br /&gt;
  \frac{3-y}{2}, &amp;amp; 1 &amp;lt; y \leq 3&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Skicirati funkcije pripadanja za fuzzy skupove: (standardna) unija &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;, (standardni) komplement &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; i (standardni) komplement &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt; biće &#039;&#039;prazan skup&#039;&#039; za opseg konkretnih vrednosti ulazne varijable: _______________&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;clipping implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = -1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ A\ \text{then}\ y\ \text{is}\ \neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
Za diskretne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(z) = 0.1|50 + 0.3|-30 + 0.1|-10 + 0.1|10 + 0.0|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(z) = 0.0|50 + 0.4|-30 + 0.6|-10 + 0.7|10 + 0.5|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(z) = 0.5|50 + 1.0|-30 + 0.8|-10 + 0.5|10 + 0.1|30&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ako je presek skupova definisan kao &#039;&#039;proizvod&#039;&#039; pripadnosti, tada je za &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: &amp;lt;math&amp;gt;\mu_D(z) =&amp;lt;/math&amp;gt;&lt;br /&gt;
# Rezultat standardne (weighted average) defazifikacije, primenjene nad skupom &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt; je:&lt;br /&gt;
#: &amp;lt;math&amp;gt;z_{WA} =&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Неуралне мреже]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3940</id>
		<title>Неуралне мреже/Јануар 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3940"/>
		<updated>2022-02-20T21:14:09Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: Kategorizacija u delimicno reseno - resicu do kraja ili posle ili sutra&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{delimično rešeno}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Zaokružiti tačna tvrđenja (svaki tačan odgovor: +1 poen, svaki netačan odgovor: -0.5 poena, bez zaokruživanja: 0 poena):&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Stepen pripadanja&#039;&#039; konkretne vrednosti lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;realna vrednost&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;kontinualnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualna realna funkcija&amp;lt;/span&amp;gt;&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ovde bi kao odgovor moglo da dođe u obzir diskretna funkcija.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Podrška (support) kontinualnog&#039;&#039; fuzzy skupa je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-presek (&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-cut) diskretnog&#039;&#039; fuzzy skupa&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;diskretan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;kontinualan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;) je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;diskretan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;):&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Odgovor je diskretan fuzzy skup.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Sugenove&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Mamdanijeve&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;I kod Mamdanijeve i kod Sugenove mašine ulazni skupovi moraju biti kontinualni.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Mamdanijeve&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Sugenove&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan diskretan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Center of Gravity defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Weighted Average defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
Za kontinualne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  1 + \frac{x}{4}, &amp;amp; -4 \leq x \leq 0 \\&lt;br /&gt;
  1 - \frac{x}{4}, &amp;amp; 0 &amp;lt; x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  2 + \frac{x}{2}, &amp;amp; -4 \leq x &amp;lt; -2 \\&lt;br /&gt;
  1, &amp;amp; -2 \leq x &amp;lt; 0 \\&lt;br /&gt;
  1 - \frac{x}{2}, &amp;amp; 0 \leq x &amp;lt; 2 \\&lt;br /&gt;
  0 &amp;amp; 2 \leq x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  y + 1, &amp;amp; -1 \leq y &amp;lt; 0 \\&lt;br /&gt;
  1, &amp;amp; 0 \leq y \leq 1 \\&lt;br /&gt;
  \frac{3-y}{2}, &amp;amp; 1 &amp;lt; y \leq 3&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Skicirati funkcije pripadanja za fuzzy skupove: (standardna) unija &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;, (standardni) komplement &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; i (standardni) komplement &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt; biće &#039;&#039;prazan skup&#039;&#039; za opseg konkretnih vrednosti ulazne varijable: _______________&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;clipping implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = -1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ A\ \text{then}\ y\ \text{is}\ \neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
Za diskretne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(z) = 0.1|50 + 0.3|-30 + 0.1|-10 + 0.1|10 + 0.0|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(z) = 0.0|50 + 0.4|-30 + 0.6|-10 + 0.7|10 + 0.5|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(z) = 0.5|50 + 1.0|-30 + 0.8|-10 + 0.5|10 + 0.1|30&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ako je presek skupova definisan kao &#039;&#039;proizvod&#039;&#039; pripadnosti, tada je za &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: &amp;lt;math&amp;gt;\mu_D(z) =&amp;lt;/math&amp;gt;&lt;br /&gt;
# Rezultat standardne (weighted average) defazifikacije, primenjene nad skupom &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt; je:&lt;br /&gt;
#: &amp;lt;math&amp;gt;z_{WA} =&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Неуралне мреже]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3939</id>
		<title>Неуралне мреже/Јануар 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3939"/>
		<updated>2022-02-20T21:12:56Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nerešeno}}&lt;br /&gt;
{{rešenja}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Zaokružiti tačna tvrđenja (svaki tačan odgovor: +1 poen, svaki netačan odgovor: -0.5 poena, bez zaokruživanja: 0 poena):&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Stepen pripadanja&#039;&#039; konkretne vrednosti lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;realna vrednost&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;kontinualnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualna realna funkcija&amp;lt;/span&amp;gt;&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ovde bi kao odgovor moglo da dođe u obzir diskretna funkcija.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Podrška (support) kontinualnog&#039;&#039; fuzzy skupa je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-presek (&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-cut) diskretnog&#039;&#039; fuzzy skupa&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;diskretan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;kontinualan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;) je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;diskretan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;):&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Odgovor je diskretan fuzzy skup.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Sugenove&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Mamdanijeve&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;I kod Mamdanijeve i kod Sugenove mašine ulazni skupovi moraju biti kontinualni.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Mamdanijeve&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Sugenove&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan diskretan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Center of Gravity defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Weighted Average defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
Za kontinualne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  1 + \frac{x}{4}, &amp;amp; -4 \leq x \leq 0 \\&lt;br /&gt;
  1 - \frac{x}{4}, &amp;amp; 0 &amp;lt; x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  2 + \frac{x}{2}, &amp;amp; -4 \leq x &amp;lt; -2 \\&lt;br /&gt;
  1, &amp;amp; -2 \leq x &amp;lt; 0 \\&lt;br /&gt;
  1 - \frac{x}{2}, &amp;amp; 0 \leq x &amp;lt; 2 \\&lt;br /&gt;
  0 &amp;amp; 2 \leq x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  y + 1, &amp;amp; -1 \leq y &amp;lt; 0 \\&lt;br /&gt;
  1, &amp;amp; 0 \leq y \leq 1 \\&lt;br /&gt;
  \frac{3-y}{2}, &amp;amp; 1 &amp;lt; y \leq 3&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Skicirati funkcije pripadanja za fuzzy skupove: (standardna) unija &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;, (standardni) komplement &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; i (standardni) komplement &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt; biće &#039;&#039;prazan skup&#039;&#039; za opseg konkretnih vrednosti ulazne varijable: _______________&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;clipping implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = -1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ A\ \text{then}\ y\ \text{is}\ \neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
Za diskretne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(z) = 0.1|50 + 0.3|-30 + 0.1|-10 + 0.1|10 + 0.0|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(z) = 0.0|50 + 0.4|-30 + 0.6|-10 + 0.7|10 + 0.5|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(z) = 0.5|50 + 1.0|-30 + 0.8|-10 + 0.5|10 + 0.1|30&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ako je presek skupova definisan kao &#039;&#039;proizvod&#039;&#039; pripadnosti, tada je za &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: &amp;lt;math&amp;gt;\mu_D(z) =&amp;lt;/math&amp;gt;&lt;br /&gt;
# Rezultat standardne (weighted average) defazifikacije, primenjene nad skupom &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt; je:&lt;br /&gt;
#: &amp;lt;math&amp;gt;z_{WA} =&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Неуралне мреже]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3938</id>
		<title>Неуралне мреже/Јануар 2019</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9D%D0%B5%D1%83%D1%80%D0%B0%D0%BB%D0%BD%D0%B5_%D0%BC%D1%80%D0%B5%D0%B6%D0%B5/%D0%88%D0%B0%D0%BD%D1%83%D0%B0%D1%80_2019&amp;diff=3938"/>
		<updated>2022-02-20T21:11:49Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* Interaktivni rezim i odgovori za prvi zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nerešeno}}&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
Zaokružiti tačna tvrđenja (svaki tačan odgovor: +1 poen, svaki netačan odgovor: -0.5 poena, bez zaokruživanja: 0 poena):&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Stepen pripadanja&#039;&#039; konkretne vrednosti lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;realna vrednost&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;kontinualnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualna realna funkcija&amp;lt;/span&amp;gt;&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Funkcija pripadanja&#039;&#039; lingvističke varijable &#039;&#039;diskretnom&#039;&#039; fuzzy skupu je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Ovde bi kao odgovor moglo da dođe u obzir diskretna funkcija.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;Podrška (support) kontinualnog&#039;&#039; fuzzy skupa je:&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-presek (&amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;-cut) diskretnog&#039;&#039; fuzzy skupa&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;diskretan klasičan skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;kontinualan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;) je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Za &#039;&#039;diskretan&#039;&#039; fuzzy skup &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A^2&amp;lt;/math&amp;gt; (&amp;quot;A na kvadrat&amp;quot;):&lt;br /&gt;
# kontinualan fuzzy skup&lt;br /&gt;
# diskretan klasičan skup&lt;br /&gt;
# kontinualan klasičan skup&lt;br /&gt;
# realna vrednost&lt;br /&gt;
# kontinualna realna funkcija&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Odgovor je diskretan fuzzy skup.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Sugenove&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
U pravilu &amp;quot;if &#039;&#039;time&#039;&#039; is &#039;&#039;short&#039;&#039; then &#039;&#039;risk&#039;&#039; is &#039;&#039;high&#039;&#039;&amp;quot; &#039;&#039;Mamdanijeve&#039;&#039; mašine, &#039;&#039;short&#039;&#039; je:&lt;br /&gt;
# diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# klasičan skup&lt;br /&gt;
# lingvistička varijabla&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;I kod Mamdanijeve i kod Sugenove mašine ulazni skupovi moraju biti kontinualni.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Mamdanijeve&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan kontinualan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Ako je rezultat izvršenja svih pravila &#039;&#039;Sugenove&#039;&#039; mašine prazan skup, rezultat (maksimum) agregacije je:&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;prazan diskretan fuzzy skup&amp;lt;/span&amp;gt;&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# nijedno od ponuđenog&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Center of Gravity defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
Rezultat Weighted Average defazifikacije praznog fuzzy skupa je:&lt;br /&gt;
# prazan diskretan fuzzy skup&lt;br /&gt;
# prazan kontinualan fuzzy skup&lt;br /&gt;
# prazan klasičan skup&lt;br /&gt;
# realna vrednost 0&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;nijedno od ponuđenog&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Objašnjenje: &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Defazifikacija praznog fuzzy skupa proizvodi nedefinisano ponašanje.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
Za kontinualne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  1 + \frac{x}{4}, &amp;amp; -4 \leq x \leq 0 \\&lt;br /&gt;
  1 - \frac{x}{4}, &amp;amp; 0 &amp;lt; x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  2 + \frac{x}{2}, &amp;amp; -4 \leq x &amp;lt; -2 \\&lt;br /&gt;
  1, &amp;amp; -2 \leq x &amp;lt; 0 \\&lt;br /&gt;
  1 - \frac{x}{2}, &amp;amp; 0 \leq x &amp;lt; 2 \\&lt;br /&gt;
  0 &amp;amp; 2 \leq x \leq 4&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(x) = \left\{\begin{array}{ll}&lt;br /&gt;
  y + 1, &amp;amp; -1 \leq y &amp;lt; 0 \\&lt;br /&gt;
  1, &amp;amp; 0 \leq y \leq 1 \\&lt;br /&gt;
  \frac{3-y}{2}, &amp;amp; 1 &amp;lt; y \leq 3&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Skicirati funkcije pripadanja za fuzzy skupove: (standardna) unija &amp;lt;math&amp;gt;A \cup B&amp;lt;/math&amp;gt;, (standardni) komplement &amp;lt;math&amp;gt;\neg B&amp;lt;/math&amp;gt; i (standardni) komplement &amp;lt;math&amp;gt;\neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;scaling implikacija&#039;&#039;&#039;, rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ \neg B\ \text{then}\ y\ \text{is}\ C&amp;lt;/math&amp;gt; biće &#039;&#039;prazan skup&#039;&#039; za opseg konkretnih vrednosti ulazne varijable: _______________&lt;br /&gt;
# Ako se primenjuje &#039;&#039;&#039;clipping implikacija&#039;&#039;&#039;, a konkretno je &amp;lt;math&amp;gt;x = -1&amp;lt;/math&amp;gt;, skicirati rezultat izvršavanja pravila &amp;lt;math&amp;gt;\text{R1: if}\ x\ \text{is}\ A\ \text{then}\ y\ \text{is}\ \neg C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
Za diskretne fuzzy skupove &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; definisane su funkcije pripadanja:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_A(z) = 0.1|50 + 0.3|-30 + 0.1|-10 + 0.1|10 + 0.0|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_B(z) = 0.0|50 + 0.4|-30 + 0.6|-10 + 0.7|10 + 0.5|30&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mu_C(z) = 0.5|50 + 1.0|-30 + 0.8|-10 + 0.5|10 + 0.1|30&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ako je presek skupova definisan kao &#039;&#039;proizvod&#039;&#039; pripadnosti, tada je za &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: &amp;lt;math&amp;gt;\mu_D(z) =&amp;lt;/math&amp;gt;&lt;br /&gt;
# Rezultat standardne (weighted average) defazifikacije, primenjene nad skupom &amp;lt;math&amp;gt;D = A \cap B \cap C&amp;lt;/math&amp;gt; je:&lt;br /&gt;
#: &amp;lt;math&amp;gt;z_{WA} =&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Неуралне мреже]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F1/%D0%9A1_2020&amp;diff=3929</id>
		<title>АСП1/К1 2020</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F1/%D0%9A1_2020&amp;diff=3929"/>
		<updated>2022-02-20T15:48:04Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 8. zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[https://rti.etf.bg.ac.rs/rti/ri3sp/rokovi/13S111ASP1_K1_1920.pdf Zadaci na sajtu predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neka je data funkcija &#039;&#039;random()&#039;&#039; koja vraća broj 0 ili 1 sa podjednakom verovatnoćom. Objasniti i ilustrovati primerom kako bi se korišćenjem zadate funkcije implementirala funkcija koja vraća vrednost 0 sa verovatnoćom 25%, a sa 1 verovatnoćom od 75%.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
U okviru naše nove funkcije pozivamo funkciju random dva puta, i samo u jednom od četiri slučaja, na primer kada oba puta funkcija vrati nulu (00), naša nova funkcija vraća nulu, a za sve ostale slučajeve (01, 10, 11) vraća jedan. Na taj način je obezbeđeno da funkcija vraća 0 sa verovatnoćom 25%, a 1 sa verovatnoćom 75%.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
NEW RANDOM()&lt;br /&gt;
if (random() = 0) and (random() = 0) then&lt;br /&gt;
    return 0&lt;br /&gt;
else&lt;br /&gt;
    return 1&lt;br /&gt;
end_if&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neka je dat stek &#039;&#039;s1&#039;&#039; na kome se nalaze celi brojevi. Korišćenjem dodatnog steka &#039;&#039;s2&#039;&#039;, transformisati sadržaj steka &#039;&#039;s1&#039;&#039; tako da on postane neopadajuće uređen niz. Smatrati da su operacije za rad sa stekom već implementirane.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Ideja jeste da na steku &#039;&#039;s1&#039;&#039; imamo sortirani i nesortirani deo. Na početku svi elementi su u nesortiranom delu i određujemo dubinu steka i trenutni maksimum na njemu. Svakom narednom iteracijom sve elemente koji su manji od maksimuma prebacujemo na stek &#039;&#039;s2&#039;&#039;, dok sve maksimume izbacujemo sa steka, a zatim naknadno ubacujemo onoliko puta koliko su se pojavili. Na kraju, vraćamo sve ne-maksimalne elemente sa steka &#039;&#039;s2&#039;&#039; nazad u nesortirani deo steka &#039;&#039;s1&#039;&#039;, pritom ponovo određujući maksimalni element u nesortiranom delu. Proces se ponavlja dok ima elemenata u maksimalnom delu.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
SORT STACK(s1)&lt;br /&gt;
max = TOP(s1)&lt;br /&gt;
cnt = 0&lt;br /&gt;
while (not STACK_IS_EMPTY(s1)) do&lt;br /&gt;
    x = POP(s1)&lt;br /&gt;
    if (x &amp;gt; max) then&lt;br /&gt;
        max = x&lt;br /&gt;
    end_if&lt;br /&gt;
    PUSH(s2, x)&lt;br /&gt;
    cnt = cnt + 1&lt;br /&gt;
end_while&lt;br /&gt;
while (not STACK_IS_EMPTY(s2)) do&lt;br /&gt;
    x = POP(s2)&lt;br /&gt;
    PUSH(s1, x)&lt;br /&gt;
end_while&lt;br /&gt;
while (cnt &amp;gt; 0) do&lt;br /&gt;
    num = cnt&lt;br /&gt;
    tmp = 0&lt;br /&gt;
    while (num &amp;gt; 0) do&lt;br /&gt;
        x = POP(s1)&lt;br /&gt;
        if (x &amp;lt; max) then&lt;br /&gt;
            PUSH(s2, x)&lt;br /&gt;
        else&lt;br /&gt;
            cnt = cnt - 1&lt;br /&gt;
            tmp = tmp + 1&lt;br /&gt;
        end_if&lt;br /&gt;
        num = num - 1&lt;br /&gt;
    end_while&lt;br /&gt;
    for i = 1 to tmp do&lt;br /&gt;
        PUSH(s1, max)&lt;br /&gt;
        i = i + 1&lt;br /&gt;
    end_for&lt;br /&gt;
    if (cnt &amp;gt; 0) then&lt;br /&gt;
        max = TOP(s2)&lt;br /&gt;
        while (not STACK_IS_EMPTY(s2)) do&lt;br /&gt;
            x = POP(s2)&lt;br /&gt;
            if (x &amp;gt; max) then&lt;br /&gt;
                max = x&lt;br /&gt;
            end_if&lt;br /&gt;
            PUSH(s1, x)&lt;br /&gt;
        end_while&lt;br /&gt;
    end_if&lt;br /&gt;
end_while&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Posmatra se retka matrica A veličine NxM. Matrica je data u vidu kružnih ulančanih listi sa zaglavljima R&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt; i C&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;. Napisati efikasnu iterativnu funkciju u pseudokodu koja datu matricu pretvara u vektorski format sa tri posebna vektora R, C i V. Funkcija takođe treba da vrati broj nenultih elemenata u matrici. Smatrati da je za sve vektore inicijalno rezervisano dovoljno prostora.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
REFORMAT SPARSE MAT(A, N, M, Ra, Ca, R, C, V)&lt;br /&gt;
cnt = 1&lt;br /&gt;
for i = 1 to N do&lt;br /&gt;
    curr = next(Ra[i])&lt;br /&gt;
    R[i] = cnt&lt;br /&gt;
    while (curr ≠ Ra[i]) do&lt;br /&gt;
        C[cnt] = col(curr)&lt;br /&gt;
        V[cnt] = val(curr)&lt;br /&gt;
        cnt = cnt + 1&lt;br /&gt;
        curr = next(curr)&lt;br /&gt;
    end_while&lt;br /&gt;
end_for&lt;br /&gt;
R[N + 1] = cnt + 1&lt;br /&gt;
return cnt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Transformisati izraz u infiksnom obliku&lt;br /&gt;
: A+C^(D-E!)!^F*B-C+G*H&lt;br /&gt;
u ekvivalentni izraz u postfiksnoj formi. Tabelu prioriteta operatora dopuniti odgovarajućim vrednostima, pri čemu je operacija faktorijel ! unarna operacija koja se grupiše sleva na desno i ima najveći prioritet od svih aritmetičkih operacija, a operacija ^ je operacija stepenovanja i grupiše se sdesna na levo. Transformaciju izraza prikazati po koracima.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! operator&lt;br /&gt;
! ul. pr !! stek pr. !! R&lt;br /&gt;
|-&lt;br /&gt;
! +, -&lt;br /&gt;
| 2 || 2 || -1&lt;br /&gt;
|-&lt;br /&gt;
! *, /&lt;br /&gt;
| 3 || 3 || -1&lt;br /&gt;
|-&lt;br /&gt;
! ^&lt;br /&gt;
| 5 || 4 || -1&lt;br /&gt;
|-&lt;br /&gt;
! !&lt;br /&gt;
| 6 || 6 || 0&lt;br /&gt;
|-&lt;br /&gt;
! (&lt;br /&gt;
| 7 || 0 || -&lt;br /&gt;
|-&lt;br /&gt;
! )&lt;br /&gt;
| 1 || - || -&lt;br /&gt;
|}&lt;br /&gt;
Postfiksna forma datog infiksnog izraza koji se dobije primenom algoritma za konverziju iz infiksa u postfiks je:&lt;br /&gt;
: ACDE!-!F^^B*+C-GH*+&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Data je retko popunjena kvadratna matrica 2N x 2N. Nepodrazumevani elementi matrice smeštaju se u memoriji po vrstama. Indeksiranje kreće od 1, a svaki element matrice zauzima po 2 reči.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Izvesti adresnu funkciju za pristup proizvoljnom elementu matrice.&lt;br /&gt;
# Implementirati funkciju GET koja vraća vrednost traženog elementa koji odgovara indeksima &#039;&#039;i&#039;&#039; i &#039;&#039;j&#039;&#039; matrice &#039;&#039;A&#039;&#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# &amp;lt;math&amp;gt;A_{ij} = \left\{&lt;br /&gt;
\begin{array}{ll}&lt;br /&gt;
    A_{11} + ((i-1) \cdot 2+\left\lfloor{(j-1)/N)}\right\rfloor) \cdot 2 &amp;amp; i=j \lor i+j=2N+1 \\&lt;br /&gt;
    0 &amp;amp; i \neq j \land i+j \neq 2N+1&lt;br /&gt;
\end{array}\right.&amp;lt;/math&amp;gt;&lt;br /&gt;
# &amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
GET(A, i, j, N)&lt;br /&gt;
if (i = j or i + j = 2 * N + 1) then&lt;br /&gt;
    return A[i, j]&lt;br /&gt;
else &lt;br /&gt;
    return 0&lt;br /&gt;
end_if&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U nekom azilu za životinje su zbrinuti psi, mačke i kanarinci. Kada neko želi da usvoji životinju, on se može izjasniti da li želi psa, mačku, kanarinca ili mu je svejedno. Nije moguće uputiti zahtev za određenom (pojedinačnom) životinjom već u skladu sa odabirom vrste, biće dodeljena ili životinja tražene vrste koja je najduže u azilu, ako takva postoji, ili životinja koja je tu duže od svih drugih. Takođe, azil prihvata nove životinje dok se ne popuni kapacitet.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Ukratko objasniti koja struktura se koristi za modelovanje azila i kako se ona održava sa dolaskom i usvajanjem životinja.&lt;br /&gt;
# Prikazati kako će struktura usvojena pod a) izgledati nakon usvajanja jednog psa, ako je prikazano trenutno stanje životinja u azilu po boksovima u kojima su smešteni. Pored vrste životinje, radi ilustracije, u zagradi se nalazi i trenutno vreme boravka životinje u azilu.&lt;br /&gt;
#: M(2) K(1) P(6) P(3) M(6) M(7) K(5) P(3)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U nekom programu je potrebno prestaviti skup celih brojeva u opsegu od 0 do 999. Neka su u programskom jeziku koji se koristi na raspolaganju celobrojni tipovi na 4 bajta širine, a pokazivači zauzimaju 4 bajta. Objasniti na koje načine se ovakav skup može predstaviti sekvencijalnom i ulančanom reprezantacijom, a zatim odrediti prosečno zauzeće prostora u oba slučaja pod pretpostavkom da se u skupu u proseku nalazi 10 elemenata.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Napisati u pseudokodu implementaciju funkcije koja u dvostruko ulančanu listu celih brojeva na koju ukazuje pokazivač &#039;&#039;list&#039;&#039; ubacuje vrednost &#039;&#039;x&#039;&#039; ispred elementa na koji ukazuje pokazivač &#039;&#039;node&#039;&#039;. Voditi računa da lista ostane u potpuno konzistentnom stanju.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Pretpostavljamo da je &#039;&#039;node&#039;&#039; validan pokazivač na element koji se nalazi u listi &#039;&#039;list&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
INSERT BEFORE D(list, node, x)&lt;br /&gt;
new_node = Node(x)&lt;br /&gt;
new_node.prev = node.prev&lt;br /&gt;
new_node.next = node&lt;br /&gt;
if node.prev == null&lt;br /&gt;
   list = new_node&lt;br /&gt;
else&lt;br /&gt;
   node.prev.next = new_node&lt;br /&gt;
node.prev = new_node&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:АСП1]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F1/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2021&amp;diff=3927</id>
		<title>АСП1/Август 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F1/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2021&amp;diff=3927"/>
		<updated>2022-02-20T15:35:52Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 9. zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Ovaj članak je rekreacija avgustovskog roka koji nije objavljen.&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Data je retka matrica koja je prikazana na slici. (Data je matrica npr. 5*6 sa 5 ili 6 random nenultih elemenata).&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Nacrtati izgled delova memorije u kojima se čuva ova retka matrica, ako se primenjuje &#039;&#039;Compressed Sparse Row&#039;&#039; način čuvanja.&lt;br /&gt;
# Napisati funkciju u pseudokodu koja na osnovu sačuvane &#039;&#039;Compressed Sparse Row&#039;&#039; reprezentacije matrice M i unetog broja &#039;&#039;i&#039;&#039; štampa sve nenulte elemente &#039;&#039;i&#039;&#039;-te vrste.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navedite načine reprezentacije grafova i njihove prednosti i mane.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Potrebno je samo napisati i prokomentarisati tabelu 7.1 sa strane 161 iz udžbenika.&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Zadato je binarno stablo S i date su adrese dva čvora &#039;&#039;x&#039;&#039; i &#039;&#039;y&#039;&#039;. Napisati funkciju u pseudokodu koja pronalazi najnižeg zajedničkog pretka zadata dva čvora.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
LOWEST_COMMON_ANCESTOR(S,x,y)&lt;br /&gt;
return FIND(S,x,y)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
FIND(S,x,y)&lt;br /&gt;
if S == null&lt;br /&gt;
   return null&lt;br /&gt;
end_if&lt;br /&gt;
if S == x || S == y&lt;br /&gt;
   return S&lt;br /&gt;
end_if&lt;br /&gt;
left = FIND(S.left,x,y)&lt;br /&gt;
right = FIND(S.right,x,y)&lt;br /&gt;
if left ≠ null &amp;amp;&amp;amp; right ≠ null&lt;br /&gt;
   return S&lt;br /&gt;
else if left ≠ null&lt;br /&gt;
   return left&lt;br /&gt;
else if right ≠ null&lt;br /&gt;
   return right&lt;br /&gt;
else&lt;br /&gt;
   return null&lt;br /&gt;
end_if&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Potpuno formalno izvesti međusobnu zavisnost interne i eksterne dužine puta u binarnom stablu i kratko obrazložiti.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;math&amp;gt; PE = PI + 2n &amp;lt;/math&amp;gt;, gde je &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; broj čvorova u stablu&lt;br /&gt;
izvođenje indukcijom, kao u knjizi/na predavanju.&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Potrebno je realizovati aplikaciju za obradu slika. Korisniku je potrebno da za uneti set slika i unet set operacija omogućiti da se sve operacije izvrše nad svim unetim slikama. Navesti koje strukture je pogodno koristiti za čuvanje seta slika i seta operacija i objasniti zašto. Napisati funkciju u pseudokodu koja obrađuje uneti set slika unetim setom operacija, u skladu sa odabranim strukturama podataka.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&#039;&#039;Rešenje je krajnje trivijalno i ovde je navedeno jedno koje je bodovano maksimalnim brojem poena.&#039;&#039;&lt;br /&gt;
Za oba se može koristiti jednostruko ulančana lista (jer nije bitan redosled kojim će se operacije izvršavati jer će se svakako sve izvršiti na svim slikama), a ulančane liste su pogodno za lako dodavanje i brisanje elemenata.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
PROCESS_IMAGES(images, operations)&lt;br /&gt;
S = head(images)&lt;br /&gt;
O = head(operations)&lt;br /&gt;
while s ≠ NIL do&lt;br /&gt;
    while o ≠ NIL do&lt;br /&gt;
        data(S) = (operation(O))(data(S))&lt;br /&gt;
    end_while&lt;br /&gt;
end_while&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&#039;&#039;&#039;Huffman-ov algoritam&#039;&#039;&#039;: Dat јe tekst sa 6 slova dužine 21 slovo. Odrediti izgled stabla dobijenog statičkim Huffman-om za ovaj tekst i uporediti prosečan broj bitova za čuvanje ovog teksta, kao i jednog slova u slučaju da se čuva podrazumevano i na osnovu ovog Huffman stabla. Frekvenciju slova zaključiti iz teksta.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Najobičniji statički Huffman za zadatim frekvencijama.&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dat je grad koji je modelovan usmerenim grafom, tako što su čvorovi lokacije u gradu (pekara, apoteka, biblioteka itd), a težine grana između čvorova vreme u minutima koje je potrebno da se peške dođe od izvorišne do odredišne lokacije. Dete želi da stigne od škole (čvor &#039;&#039;X&#039;&#039;) do kuće (čvor &#039;&#039;Y&#039;&#039;) najbrže moguće. Međutim, postoji opasan deo grada (čvor Z), koji nije bezbedan za decu i koji ona treba da izbegavaju. Napisati funkciju u pseudokodu koja na osnovu zadatog grafa &#039;&#039;G&#039;&#039; (nije data reprezentacija, rešenje treba da bude konceptualno), zadatih lokacija kuće i škole, &#039;&#039;Y&#039;&#039; i &#039;&#039;X&#039;&#039;, i opasnog dela grada &#039;&#039;Z&#039;&#039;, pronalazi najkraće vreme koje je detetu potrebno od škole do kuće.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Zadatak se rešava implementacijom Dijkstrinog algortima, tako što kada se u uzimanju čvorova redom po težinskoj udaljenosti od početnog dođe do &amp;quot;opasnog&amp;quot; čvora &#039;&#039;Z&#039;&#039;, za njega se upiše težina beskonačno i ta petlja preskoči sa &#039;&#039;&#039;continue&#039;&#039;&#039;. Na kraju se samo proveri dostižnost ciljnog čvora.&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dat je graf na slici (ima nekih 7-8 čvorova). Za dati graf uraditi topološko sortiranje i prikazati graf dobijen tako.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
== 9. zadatak==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Detaljno opisati postupak za pronalaženje jako povezanih komponenti u grafu.&lt;br /&gt;
# Za graf sa slike (nekih 7-8 čvorova) po koracima primeniti algoritam za pronalaženje jako povezanih komponenti i rezultujući graf.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[АСП1/Јул 2020#Treći kolokvijum|julskog roka 2020.]]&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Potrebno je čuvati neki skup brojeva koji će biti u opsegu između 1 i 100.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Uporediti sekvencijalnu i ulančanu reprezentaciju skupa i uporediti složenost operacija dodavanja elementa, brisanja elementa i provere pripadnosti elementa skupu za ove dve reprezentacije.&lt;br /&gt;
# Neka je dat skup (npr. 5, 14, 44, 45, 78, 98) prikazati jednu i drugu reprezenatciju nakon operacija (npr. dodavanje 7, dodavanje 46, dodavanje 97, brisanje 78).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Kod sekvencijalne se alocira vektor S[1:100] i ukoliko je element &#039;&#039;X&#039;&#039; u skupu, u polje &#039;&#039;S&#039;&#039;[&#039;&#039;X&#039;&#039;] se upisuje 1, inače 0. Kod ulančane reprezentacije je najefikasnije čuvati ulančanu listu u rastućem ili opadajućem poretku. Dodavanje/brisanje u sekvencijalnoj se radi u O(1) tako što se samo proveri ili izmeni indeks u nizu. Kod ulančane reprezentacije je potrebno proći kroz listu do lokacije na koju treba umetnuti/obrisati element (po rastućem ili opadajućem poretku).&lt;br /&gt;
&lt;br /&gt;
[[Категорија:АСП1]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F1/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2021&amp;diff=3926</id>
		<title>АСП1/Август 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F1/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2021&amp;diff=3926"/>
		<updated>2022-02-20T15:23:01Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 3. zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Ovaj članak je rekreacija avgustovskog roka koji nije objavljen.&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Data je retka matrica koja je prikazana na slici. (Data je matrica npr. 5*6 sa 5 ili 6 random nenultih elemenata).&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Nacrtati izgled delova memorije u kojima se čuva ova retka matrica, ako se primenjuje &#039;&#039;Compressed Sparse Row&#039;&#039; način čuvanja.&lt;br /&gt;
# Napisati funkciju u pseudokodu koja na osnovu sačuvane &#039;&#039;Compressed Sparse Row&#039;&#039; reprezentacije matrice M i unetog broja &#039;&#039;i&#039;&#039; štampa sve nenulte elemente &#039;&#039;i&#039;&#039;-te vrste.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navedite načine reprezentacije grafova i njihove prednosti i mane.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Potrebno je samo napisati i prokomentarisati tabelu 7.1 sa strane 161 iz udžbenika.&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Zadato je binarno stablo S i date su adrese dva čvora &#039;&#039;x&#039;&#039; i &#039;&#039;y&#039;&#039;. Napisati funkciju u pseudokodu koja pronalazi najnižeg zajedničkog pretka zadata dva čvora.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
LOWEST_COMMON_ANCESTOR(S,x,y)&lt;br /&gt;
return FIND(S,x,y)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
FIND(S,x,y)&lt;br /&gt;
if S == null&lt;br /&gt;
   return null&lt;br /&gt;
end_if&lt;br /&gt;
if S == x || S == y&lt;br /&gt;
   return S&lt;br /&gt;
end_if&lt;br /&gt;
left = FIND(S.left,x,y)&lt;br /&gt;
right = FIND(S.right,x,y)&lt;br /&gt;
if left ≠ null &amp;amp;&amp;amp; right ≠ null&lt;br /&gt;
   return S&lt;br /&gt;
else if left ≠ null&lt;br /&gt;
   return left&lt;br /&gt;
else if right ≠ null&lt;br /&gt;
   return right&lt;br /&gt;
else&lt;br /&gt;
   return null&lt;br /&gt;
end_if&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Potpuno formalno izvesti međusobnu zavisnost interne i eksterne dužine puta u binarnom stablu i kratko obrazložiti.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;math&amp;gt; PE = PI + 2n &amp;lt;/math&amp;gt;, gde je &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; broj čvorova u stablu&lt;br /&gt;
izvođenje indukcijom, kao u knjizi/na predavanju.&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Potrebno je realizovati aplikaciju za obradu slika. Korisniku je potrebno da za uneti set slika i unet set operacija omogućiti da se sve operacije izvrše nad svim unetim slikama. Navesti koje strukture je pogodno koristiti za čuvanje seta slika i seta operacija i objasniti zašto. Napisati funkciju u pseudokodu koja obrađuje uneti set slika unetim setom operacija, u skladu sa odabranim strukturama podataka.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&#039;&#039;Rešenje je krajnje trivijalno i ovde je navedeno jedno koje je bodovano maksimalnim brojem poena.&#039;&#039;&lt;br /&gt;
Za oba se može koristiti jednostruko ulančana lista (jer nije bitan redosled kojim će se operacije izvršavati jer će se svakako sve izvršiti na svim slikama), a ulančane liste su pogodno za lako dodavanje i brisanje elemenata.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
PROCESS_IMAGES(images, operations)&lt;br /&gt;
S = head(images)&lt;br /&gt;
O = head(operations)&lt;br /&gt;
while s ≠ NIL do&lt;br /&gt;
    while o ≠ NIL do&lt;br /&gt;
        data(S) = (operation(O))(data(S))&lt;br /&gt;
    end_while&lt;br /&gt;
end_while&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&#039;&#039;&#039;Huffman-ov algoritam&#039;&#039;&#039;: Dat јe tekst sa 6 slova dužine 21 slovo. Odrediti izgled stabla dobijenog statičkim Huffman-om za ovaj tekst i uporediti prosečan broj bitova za čuvanje ovog teksta, kao i jednog slova u slučaju da se čuva podrazumevano i na osnovu ovog Huffman stabla. Frekvenciju slova zaključiti iz teksta.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Najobičniji statički Huffman za zadatim frekvencijama.&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dat je grad koji je modelovan usmerenim grafom, tako što su čvorovi lokacije u gradu (pekara, apoteka, biblioteka itd), a težine grana između čvorova vreme u minutima koje je potrebno da se peške dođe od izvorišne do odredišne lokacije. Dete želi da stigne od škole (čvor &#039;&#039;X&#039;&#039;) do kuće (čvor &#039;&#039;Y&#039;&#039;) najbrže moguće. Međutim, postoji opasan deo grada (čvor Z), koji nije bezbedan za decu i koji ona treba da izbegavaju. Napisati funkciju u pseudokodu koja na osnovu zadatog grafa &#039;&#039;G&#039;&#039; (nije data reprezentacija, rešenje treba da bude konceptualno), zadatih lokacija kuće i škole, &#039;&#039;Y&#039;&#039; i &#039;&#039;X&#039;&#039;, i opasnog dela grada &#039;&#039;Z&#039;&#039;, pronalazi najkraće vreme koje je detetu potrebno od škole do kuće.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Zadatak se rešava implementacijom Dijkstrinog algortima, tako što kada se u uzimanju čvorova redom po težinskoj udaljenosti od početnog dođe do &amp;quot;opasnog&amp;quot; čvora &#039;&#039;Z&#039;&#039;, za njega se upiše težina beskonačno i ta petlja preskoči sa &#039;&#039;&#039;continue&#039;&#039;&#039;. Na kraju se samo proveri dostižnost ciljnog čvora.&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dat je graf na slici (ima nekih 7-8 čvorova). Za dati graf uraditi topološko sortiranje i prikazati graf dobijen tako.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
== 9. zadatak==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Detaljno opisati postupak za pronalaženje jako povezanih komponenti u grafu.&lt;br /&gt;
# Za graf sa slike (nekih 7-8 čvorova) po koracima primeniti algoritam za pronalaženje jako povezanih komponenti i rezultujući graf.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Potrebno je čuvati neki skup brojeva koji će biti u opsegu između 1 i 100.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Uporediti sekvencijalnu i ulančanu reprezentaciju skupa i uporediti složenost operacija dodavanja elementa, brisanja elementa i provere pripadnosti elementa skupu za ove dve reprezentacije.&lt;br /&gt;
# Neka je dat skup (npr. 5, 14, 44, 45, 78, 98) prikazati jednu i drugu reprezenatciju nakon operacija (npr. dodavanje 7, dodavanje 46, dodavanje 97, brisanje 78).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Kod sekvencijalne se alocira vektor S[1:100] i ukoliko je element &#039;&#039;X&#039;&#039; u skupu, u polje &#039;&#039;S&#039;&#039;[&#039;&#039;X&#039;&#039;] se upisuje 1, inače 0. Kod ulančane reprezentacije je najefikasnije čuvati ulančanu listu u rastućem ili opadajućem poretku. Dodavanje/brisanje u sekvencijalnoj se radi u O(1) tako što se samo proveri ili izmeni indeks u nizu. Kod ulančane reprezentacije je potrebno proći kroz listu do lokacije na koju treba umetnuti/obrisati element (po rastućem ili opadajućem poretku).&lt;br /&gt;
&lt;br /&gt;
[[Категорија:АСП1]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F1/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2021&amp;diff=3925</id>
		<title>АСП1/Август 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%90%D0%A1%D0%9F1/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2021&amp;diff=3925"/>
		<updated>2022-02-20T15:17:27Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 3. zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Ovaj članak je rekreacija avgustovskog roka koji nije objavljen.&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Data je retka matrica koja je prikazana na slici. (Data je matrica npr. 5*6 sa 5 ili 6 random nenultih elemenata).&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Nacrtati izgled delova memorije u kojima se čuva ova retka matrica, ako se primenjuje &#039;&#039;Compressed Sparse Row&#039;&#039; način čuvanja.&lt;br /&gt;
# Napisati funkciju u pseudokodu koja na osnovu sačuvane &#039;&#039;Compressed Sparse Row&#039;&#039; reprezentacije matrice M i unetog broja &#039;&#039;i&#039;&#039; štampa sve nenulte elemente &#039;&#039;i&#039;&#039;-te vrste.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Navedite načine reprezentacije grafova i njihove prednosti i mane.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Potrebno je samo napisati i prokomentarisati tabelu 7.1 sa strane 161 iz udžbenika.&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Zadato je binarno stablo S i date su adrese dva čvora &#039;&#039;x&#039;&#039; i &#039;&#039;y&#039;&#039;. Napisati funkciju u pseudokodu koja pronalazi najnižeg zajedničkog pretka zadata dva čvora.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
LOWEST_COMMON_ANCESTOR(S,x,y)&lt;br /&gt;
return FIND(S,x,y)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
FIND(S,x,y)&lt;br /&gt;
if S==null&lt;br /&gt;
   return null&lt;br /&gt;
end_if&lt;br /&gt;
if S == x || S == y&lt;br /&gt;
   return S&lt;br /&gt;
end_if&lt;br /&gt;
left = FIND(S.left,x,y)&lt;br /&gt;
right = FIND(S.right,x,y)&lt;br /&gt;
if left ≠ null &amp;amp;&amp;amp; right ≠ null&lt;br /&gt;
   return S&lt;br /&gt;
else if left ≠ null&lt;br /&gt;
   return left&lt;br /&gt;
else if right ≠ null&lt;br /&gt;
   return right&lt;br /&gt;
else&lt;br /&gt;
   return null&lt;br /&gt;
end_if&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Potpuno formalno izvesti međusobnu zavisnost interne i eksterne dužine puta u binarnom stablu i kratko obrazložiti.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;math&amp;gt; PE = PI + 2n &amp;lt;/math&amp;gt;, gde je &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; broj čvorova u stablu&lt;br /&gt;
izvođenje indukcijom, kao u knjizi/na predavanju.&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Potrebno je realizovati aplikaciju za obradu slika. Korisniku je potrebno da za uneti set slika i unet set operacija omogućiti da se sve operacije izvrše nad svim unetim slikama. Navesti koje strukture je pogodno koristiti za čuvanje seta slika i seta operacija i objasniti zašto. Napisati funkciju u pseudokodu koja obrađuje uneti set slika unetim setom operacija, u skladu sa odabranim strukturama podataka.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&#039;&#039;Rešenje je krajnje trivijalno i ovde je navedeno jedno koje je bodovano maksimalnim brojem poena.&#039;&#039;&lt;br /&gt;
Za oba se može koristiti jednostruko ulančana lista (jer nije bitan redosled kojim će se operacije izvršavati jer će se svakako sve izvršiti na svim slikama), a ulančane liste su pogodno za lako dodavanje i brisanje elemenata.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;milo&amp;quot;&amp;gt;&lt;br /&gt;
PROCESS_IMAGES(images, operations)&lt;br /&gt;
S = head(images)&lt;br /&gt;
O = head(operations)&lt;br /&gt;
while s ≠ NIL do&lt;br /&gt;
    while o ≠ NIL do&lt;br /&gt;
        data(S) = (operation(O))(data(S))&lt;br /&gt;
    end_while&lt;br /&gt;
end_while&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&#039;&#039;&#039;Huffman-ov algoritam&#039;&#039;&#039;: Dat јe tekst sa 6 slova dužine 21 slovo. Odrediti izgled stabla dobijenog statičkim Huffman-om za ovaj tekst i uporediti prosečan broj bitova za čuvanje ovog teksta, kao i jednog slova u slučaju da se čuva podrazumevano i na osnovu ovog Huffman stabla. Frekvenciju slova zaključiti iz teksta.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Najobičniji statički Huffman za zadatim frekvencijama.&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dat je grad koji je modelovan usmerenim grafom, tako što su čvorovi lokacije u gradu (pekara, apoteka, biblioteka itd), a težine grana između čvorova vreme u minutima koje je potrebno da se peške dođe od izvorišne do odredišne lokacije. Dete želi da stigne od škole (čvor &#039;&#039;X&#039;&#039;) do kuće (čvor &#039;&#039;Y&#039;&#039;) najbrže moguće. Međutim, postoji opasan deo grada (čvor Z), koji nije bezbedan za decu i koji ona treba da izbegavaju. Napisati funkciju u pseudokodu koja na osnovu zadatog grafa &#039;&#039;G&#039;&#039; (nije data reprezentacija, rešenje treba da bude konceptualno), zadatih lokacija kuće i škole, &#039;&#039;Y&#039;&#039; i &#039;&#039;X&#039;&#039;, i opasnog dela grada &#039;&#039;Z&#039;&#039;, pronalazi najkraće vreme koje je detetu potrebno od škole do kuće.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Zadatak se rešava implementacijom Dijkstrinog algortima, tako što kada se u uzimanju čvorova redom po težinskoj udaljenosti od početnog dođe do &amp;quot;opasnog&amp;quot; čvora &#039;&#039;Z&#039;&#039;, za njega se upiše težina beskonačno i ta petlja preskoči sa &#039;&#039;&#039;continue&#039;&#039;&#039;. Na kraju se samo proveri dostižnost ciljnog čvora.&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dat je graf na slici (ima nekih 7-8 čvorova). Za dati graf uraditi topološko sortiranje i prikazati graf dobijen tako.&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
== 9. zadatak==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Detaljno opisati postupak za pronalaženje jako povezanih komponenti u grafu.&lt;br /&gt;
# Za graf sa slike (nekih 7-8 čvorova) po koracima primeniti algoritam za pronalaženje jako povezanih komponenti i rezultujući graf.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Potrebno je čuvati neki skup brojeva koji će biti u opsegu između 1 i 100.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Uporediti sekvencijalnu i ulančanu reprezentaciju skupa i uporediti složenost operacija dodavanja elementa, brisanja elementa i provere pripadnosti elementa skupu za ove dve reprezentacije.&lt;br /&gt;
# Neka je dat skup (npr. 5, 14, 44, 45, 78, 98) prikazati jednu i drugu reprezenatciju nakon operacija (npr. dodavanje 7, dodavanje 46, dodavanje 97, brisanje 78).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Kod sekvencijalne se alocira vektor S[1:100] i ukoliko je element &#039;&#039;X&#039;&#039; u skupu, u polje &#039;&#039;S&#039;&#039;[&#039;&#039;X&#039;&#039;] se upisuje 1, inače 0. Kod ulančane reprezentacije je najefikasnije čuvati ulančanu listu u rastućem ili opadajućem poretku. Dodavanje/brisanje u sekvencijalnoj se radi u O(1) tako što se samo proveri ili izmeni indeks u nizu. Kod ulančane reprezentacije je potrebno proći kroz listu do lokacije na koju treba umetnuti/obrisati element (po rastućem ili opadajućem poretku).&lt;br /&gt;
&lt;br /&gt;
[[Категорија:АСП1]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9E%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2013&amp;diff=3922</id>
		<title>ОС1/Октобар 2013</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9E%D0%BA%D1%82%D0%BE%D0%B1%D0%B0%D1%80_2013&amp;diff=3922"/>
		<updated>2022-02-20T14:28:06Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 10. zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2013/okt/OS1%20Okt%202013.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koja je razlika između multiprocesorskih i distribuiranih računarskih sistema?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Kod multiprocesorskih sistema skup procesora ima deljenu operativnu memoriju, dok kod distribuiranog sistema nema zajedničke operativne memorije, već postoji mrežna komunikacija između procesora.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem operacije &amp;lt;code&amp;gt;yield(jmp_buf old, jmp_buf new)&amp;lt;/code&amp;gt; koja čuva kontekst niti čiji je &amp;lt;code&amp;gt;jmp_buf&amp;lt;/code&amp;gt; dat  kao  prvi  argument, oduzima  joj  procesor  i restaurira kontekst  niti čiji je &amp;lt;code&amp;gt;jmp_buf&amp;lt;/code&amp;gt; dat kao drugi argument, kojoj predaje procesor, realizovati operaciju &amp;lt;code&amp;gt;Semaphore::wait()&amp;lt;/code&amp;gt; u školskom jezgru.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
Semaphore::wait() {&lt;br /&gt;
	lock();&lt;br /&gt;
	if(--val &amp;lt; 0) {&lt;br /&gt;
		jmp_buf old = Thread::running-&amp;gt;context;&lt;br /&gt;
		blocked.put(Thread::running);&lt;br /&gt;
		Thread::running = Scheduler::get();&lt;br /&gt;
		jmp_buf new = Thread::running-&amp;gt;context;&lt;br /&gt;
		yield(old, new);&lt;br /&gt;
	}&lt;br /&gt;
	unlock();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koja je razlika između (teškog) procesa i niti (&#039;&#039;thread&#039;&#039;)? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Teški proces je izvršavanje jednog programa sa sopstvenim adresnim prostorom dok se nitima, tj. lakim procesima zove svaki tok kontrole koji koristi taj adresni prostor.&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem standardnih brojačkih semafora, napisati kod za inicijalizaciju i potrebnu  sinhronizaciju kritične sekcije u koju može ući najviše &#039;&#039;N&#039;&#039; uporednih procesa.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
var mutex : Semaphore := N;&lt;br /&gt;
&lt;br /&gt;
process P:&lt;br /&gt;
	begin&lt;br /&gt;
		loop&lt;br /&gt;
			wait(mutex);&lt;br /&gt;
			&amp;lt;critical&amp;gt;&lt;br /&gt;
			signal(mutex);&lt;br /&gt;
			&amp;lt;non-critical&amp;gt;&lt;br /&gt;
	end&lt;br /&gt;
end P;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ako tokom svog prvog prolaza linker u svojoj tabeli ne pronađe simbol koji je definisan u tekućem fajlu (izvozi se), da li će prijaviti grešku? Obrazložiti. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Ne jer ako se ne nalazi u tabeli simbola znači da simbol nije definisan i ne dolazi do konflikta imena.&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koja je razlika između &#039;&#039;best fit&#039;&#039; i &#039;&#039;worst fit&#039;&#039; algoritma kontinualne alokacije memorije? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Best fit algoritam ima cilj da nakon alokacije ostane što manji slobodan fragment kako bi se smanjila eksterna fragmentacija.&lt;br /&gt;
Worst fit algoritam ima cilja da preostali slobodan fragment bude što upotrebljiviji, odnosno takav da se poveća šansa da se može upotrebiti za dalju alokaciju, tj. ostavlja najveći slobodan fragment nakon alokacije.&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U  nekom  sistemu  sa  virtuelnom  memorijom  broj  stranice  u virtuelnoj  adresi  je  veličine  48 bita.  Da  bi  čuvanje  PMT  učinio  izvodljivim,  sistem koristi  &#039;&#039;hash&#039;&#039;  tabelu  sa  64K  ulaza  za  smešanje PMT  svakog  procesa.  &#039;&#039;Hash&#039;&#039;  funkcija  je  prosta  modulo funkcija:  ulaz  u  tabelu  određuje  se  pomoću 16 najnižih bita broja stranice. U svakom ulazu &#039;&#039;hash&#039;&#039; tabele nalazi se 64-bitna glava ulančane liste zapisa  za  alocirane  stranice  koje  se  preslikavaju  u  taj ulaz.  Svaki  zapis  sadrži  viših  32  bita  broja stranice,  broj  okvira  u  koji  je  ta  stranica  preslikana (32  bita,  vrednost  0  označava  da  stranica  ne može da se preslika) i pokazivač na sledeći zapis (64 bita, vrednost 0 označava kraj liste). Neki  proces  je  alocirao  256  najnižih  i  256  najviših stranica  svog  virtuelnog  adresnog  prostora. Koliko prostora (u bajtovima) ukupno zauzima PMT ovog procesa? &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
U nekom sistemu podržan je samo asinhroni izlaz na izlazni uređaj pomoću sledeće funkcije&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;IOReqID output (IODevID deviceID, IOReq* request);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
koja zadaje (asinhrono) izlaznu operaciju specifikovanu drugim argumentom na uređaju identifikovanom prvim argumentom. Ova funkcija odmah vraća kontrolu pozivaocu, uz identifikaciju  zadate  operacije  (rezultat  tipa  &amp;lt;code&amp;gt;IOReqID&amp;lt;/code&amp;gt;  je  veći  od  0  u  slučaju  ispravno  zadatog  zahteva).&lt;br /&gt;
Funkcija &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void ioWait (IOReqID);&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
blokira pozivajući proces sve dok operacija identifikovana argumentom nije završena u potpunosti. Pomoću ovih funkcija realizovati funkciju koja, u odnosu na jedan argument, može zadati operaciju sinhrono ili asinhrono, prema želji pozivaoca. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
IOReqID output_user(IODevID deviceID, IOReq* request, bool synchronous) {&lt;br /&gt;
	IOReqID id = output(deviceID, request);&lt;br /&gt;
	if(synchronous &amp;amp;&amp;amp; id &amp;gt; 0) wait(id);&lt;br /&gt;
	return id;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta označava skraćenica FTP? Ukratko objasniti čemu služi ovaj protokol.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
File Transfer Protocol - u razmeni fajlova učestvuju 2 računara. Jedan igra ulogu servera a drugi ulogu klijenta. Na oba računara se izvršavaju programi koji implementiraju ovaj protokol.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Koja  metoda  alokacije  fajlova  je  efikasnija  za  direktni pristup,  ulančana  ili  indeksirana  i zašto?&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Efikasnija je indeksirana; kod ulančane alokacije je efikasan sekvencijalan pristup, ali direktni pristup nekom bloku &amp;lt;b&amp;gt;n&amp;lt;/b&amp;gt; podrazumeva pristup svim blokovima počev od prvog pa do njega. Jedna od najvecih pogodnosti indeksne alokacije je upravo direktni pristup, jer indeksna alokacija podrazumeva postojanje indeksnog bloka u kome se nalazi spisak brojeva blokova sa sadržajem fajla redom, koji omogućava vrlo efikasan direktan pristup. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BD_2016&amp;diff=3902</id>
		<title>ОС1/Јун 2016</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%88%D1%83%D0%BD_2016&amp;diff=3902"/>
		<updated>2022-02-19T23:12:48Z</updated>

		<summary type="html">&lt;p&gt;Lukahrvacevic: /* 10. zadatak */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
[http://os.etf.bg.ac.rs/OS1/rokovi/2016/jun/Jun%202016.pdf Zadaci na stranici predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Šta se smatralo najvećim nedostatkom prvobitnih paketnih (&#039;&#039;batch&#039;&#039;)  sistema  i  kako  je  taj nedostatak rešen?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Prvobitni batch sistemi su efikasno delili resurse ali nisu interaktivni. Osnovni nedostatak bio je slabo iskorišćenje glavnog resursa računara - procesora. Nedostatak je rešen uvođenjem time sharing-a&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem funkcije &amp;lt;code&amp;gt;yield(jmp_buf old, jmp_buf new)&amp;lt;/code&amp;gt; koja čuva kontekst jedne niti i predaje procesor drugoj niti, realizovati operaciju &amp;lt;code&amp;gt;wait&amp;lt;/code&amp;gt; na brojačkom semaforu u školskom jezgru&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Videti zadatak iz [[ОС1/Октобар 2013#2. zadatak|oktobarskog roka 2013]].&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Za sledeće slučajeve navesti u koje stanje prelazi tekući (&#039;&#039;running&#039;&#039;) proces i naznačiti da li se to dešava kao posledica sistemskog poziva od strane tog tekućeg procesa ili spoljašnjeg prekida. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
___________________________________________________________________________________________________________________________________&lt;br /&gt;
| Slučaj                                                    | Tekući proces prelazi u stanje: | Uzrok prekid ili sistemski poziv: |&lt;br /&gt;
|___________________________________________________________|_________________________________|___________________________________|&lt;br /&gt;
| Istek vremenskog kvantuma kod timesharing sistema         |            ready                |              prekid               |&lt;br /&gt;
|___________________________________________________________|_________________________________|___________________________________|&lt;br /&gt;
| Operacija wait na semaforu koji ima vrednost 0            |            blocked              |         sistemski poziv           |&lt;br /&gt;
|___________________________________________________________|_________________________________|___________________________________|&lt;br /&gt;
| Došlo vreme aktivacije prioritetnijeg periodičnog procesa |            ready                |              prekid               |&lt;br /&gt;
|___________________________________________________________|_________________________________|___________________________________|&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Napisati kod koji realizuje Petersonov algoritam međusobnog isključenja dva uporedna procesa pomoću uposlenog čekanja. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
shared var turn : integer := 1, flag1, flag2 : boolean := false;&lt;br /&gt;
&lt;br /&gt;
process P1 &lt;br /&gt;
begin &lt;br /&gt;
  loop &lt;br /&gt;
    flag1 := true; turn := 2; &lt;br /&gt;
    while flag2 and turn = 2 do null; &lt;br /&gt;
    &amp;lt;critical section&amp;gt; &lt;br /&gt;
    flag1 := false; &lt;br /&gt;
    &amp;lt;non-critical section&amp;gt; &lt;br /&gt;
  end &lt;br /&gt;
end P1;&lt;br /&gt;
&lt;br /&gt;
process P2 &lt;br /&gt;
begin &lt;br /&gt;
  loop &lt;br /&gt;
    flag2 := true; turn := 1; &lt;br /&gt;
    while flag1 and turn = 1 do null; &lt;br /&gt;
    &amp;lt;critical section&amp;gt; &lt;br /&gt;
    flag2 := false; &lt;br /&gt;
    &amp;lt;non-critical section&amp;gt; &lt;br /&gt;
  end &lt;br /&gt;
end P2;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Precizno objasniti zašto klasičan linker svoj posao obavlja u dva prolaza (a ne može samo u jednom). Obrazloženje ilustrovati primerom. &lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
U prvom prolazu linker pravi globalnu mapu .obj fajlova i globalno definisanih izvezenih simbola i njihovih adresa relativno u odnosu na početak .obj fajla. U drugom prolazu razrešava nerazrešena adresna polja koristeći definisane simbole u tabeli simbola.&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Virtuelni  adresni  prostor  sistema  je  8GB,  adresibilna  jedinica  je  16-bitna reč, a virtuelni adresni prostor je organizovan stranično sa stranicom veličine 32KB. Fizički adresni prostor je veličine 2GB. Tabele preslikavanja  stranica  su  organizovane  u  dva  nivoa,  s  tim  da  tabela  prvog nivoa  ima  2K  ulaza.  Svaki  ulaz  u  PMT  oba  nivoa  zauzima  samo  onoliko  koliko  je potrebno da se smesti broj okvira (PMT drugog nivoa je poravnata na okvir). Koliko memorije zauzimaju ukupno PMT procesa koji je alocirao svojih prvih 128 stranica?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
VAS: 2^33B -&amp;gt; VA: 32b, page size 32KB = 2^15B -&amp;gt; page 14b, AU = 2B&lt;br /&gt;
&lt;br /&gt;
PAS: 2GB = 2^31B -&amp;gt; PA: 30b&lt;br /&gt;
&lt;br /&gt;
PMT1: 2K = 2^11 -&amp;gt; 11b&lt;br /&gt;
&lt;br /&gt;
VA: page1(11) : page2(7) : offset(14)&lt;br /&gt;
&lt;br /&gt;
128 stranica -&amp;gt; PMT1 i 1 PMT2 = 2^11 * 2^2 + 2^7 * 2^2 = 8.5KB&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki sistem sa straničnom organizacijom memorije koristi tehniku &#039;&#039;copy  on  write&#039;&#039;.  Jedan proces je tek kreirao drugi proces pozivom &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt;. Ako novokreirani proces odmah po pokretanju izvrši operaciju upisa u memoriju, koji izuzetak će generisati procesor, &#039;&#039;page  fault&#039;&#039;  ili  neki  drugi  i koji? Precizno objasniti zašto i kako.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Procesor će generisati izuzetak &#039;&#039;write prohibited&#039;&#039;, jer je u desktriptoru ove stranice označeno da ona nije dozvoljena za upis zbog tek kreiranog procesa deteta.&lt;br /&gt;
&lt;br /&gt;
== 8. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Na asembleru nekog zamišljenog RISC procesora sa LOAD/STORE arhitekturom napisati program  koji  prenosi  blok podataka zadate dužine sa zadate adrese na izlazni uređaj korišćenjem programiranog ulaza/izlaza sa prozivanjem (polling).&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
		LD R1, blockAddr&lt;br /&gt;
		LD R2, cnt&lt;br /&gt;
		ST [ctrl], #0..1&lt;br /&gt;
wait:	LD R0, [status]&lt;br /&gt;
		AND R0, #1..0&lt;br /&gt;
		JZ wait&lt;br /&gt;
		LD R0, [R1]&lt;br /&gt;
		ST [data], R0&lt;br /&gt;
		INC R1&lt;br /&gt;
		DEC R2&lt;br /&gt;
		JNZ wait&lt;br /&gt;
		ST [ctrl], R0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
== 9. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Ako  fajl  sistem  koristi  dve  vrste  ključeva,  deljeni (&#039;&#039;shared&#039;&#039;)  i  ekskluzivni  (&#039;&#039;exclusive&#039;&#039;),  sa implicitnim  zaključavanjem prilikom otvaranja fajla, koji ključ će biti zahtevan od strane procesa koji otvara fajl sa najavom samo operacije čitanja?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Deljeni (shared) ključ.&lt;br /&gt;
&lt;br /&gt;
== 10. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Neki sistem evidentira slobodne blokove fajl sistema tako što u jedan slobodan blok smešta spisak (indeks) do &#039;&#039;n&#039;&#039; narednih slobodnih blokova (najmanje 0, najviše &#039;&#039;n&#039;&#039;), kao i broj sledećeg takvog indeksnog bloka. Koliki je broj blokova kojima sistem treba da pristupi (na čitanje ili upis) u najgorem slučaju prilikom alokacije jednog slobodnog bloka za sadržaj fajla? Broj prvog takvog bloka u lancu je globalni podatak koji se nalazi u memoriji i njegova eventualna izmena se ne broji.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Broj blokova kojima sistem treba da pristupi je u svakom slučaju 1. Kada se na spisku nalazi bar jedan slobodan blok, on se alocira i briše sa spiska. Kada se na spisku ne nalazi nijedan slobodan blok, blok u kome se nalazi spisak se alocira kao slobodan blok i u memoriji se menja pokazivač sa njega na sledeći blok sa spiskom.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>Lukahrvacevic</name></author>
	</entry>
</feed>