<?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=Garca</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=Garca"/>
	<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/Garca"/>
	<updated>2026-06-04T06:44:29Z</updated>
	<subtitle>Кориснички доприноси</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<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_2021&amp;diff=4318</id>
		<title>КДП/Јануар 2021</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_2021&amp;diff=4318"/>
		<updated>2022-05-14T11:45:52Z</updated>

		<summary type="html">&lt;p&gt;Garca: /* Решење */ Nepotrebna provera grupe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/2021/IR3KDP_2021_jan.pdf странице предмета.]&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Потребно је реализовати тајмер користећи приватне семафоре и технику предаје штафетне палице. Тајмер има две методе, прва је метода &amp;lt;code&amp;gt;wakeme&amp;lt;/code&amp;gt; која омогућава да се дата нит блокирана &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; јединица времена (ово је аргумент), а друга је метода &amp;lt;code&amp;gt;tick&amp;lt;/code&amp;gt; која означава да је истекла једна јединица времена.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоји тоалет капацитета N (N &amp;gt; 1) који могу да користе жене, мушкарци, деца и домар (&#039;&#039;Single Bathroom Problem&#039;&#039;) такав да важе следећа правила коришћења: у исто време у тоалету не могу наћи и жене и мушкарци; деца могу да деле тоалет и са женама и са мушкарцима; дете може да се нађе у тоалету само ако се тамо налази барем једна жена или мушкарац; домар има ексклузивно право коришћења тоалета. Написати монитор са &#039;&#039;signal and 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 SingleBathroomProblem {&lt;br /&gt;
    public static final int capacity = 10;&lt;br /&gt;
    private int count = 0;&lt;br /&gt;
    private int childCount = 0;&lt;br /&gt;
    // Група која је тренутно у тоалету&lt;br /&gt;
    // -1 - нема никога, 0 - мушкарци, 1 - жене, 2 - домар&lt;br /&gt;
    private int group = -1;&lt;br /&gt;
    private final Condition queue = new Condition();&lt;br /&gt;
    private final Condition childrenQueue = new Condition();&lt;br /&gt;
    private final Condition waitingForChildren = new Condition();&lt;br /&gt;
    private int ticket = 1;&lt;br /&gt;
    private void signalPersonOrChild() {&lt;br /&gt;
        boolean personWaiting = queue.queue() &amp;amp;&amp;amp; queue.minrank() % 3 == group;&lt;br /&gt;
        boolean childWaiting = childrenQueue.queue();&lt;br /&gt;
        if (personWaiting &amp;amp;&amp;amp; childWaiting) {&lt;br /&gt;
            if (queue.minrank() &amp;gt; childrenQueue.minrank() * 3) {&lt;br /&gt;
                // Одрасла особа је стигла пре детета&lt;br /&gt;
                queue.signal();&lt;br /&gt;
            } else {&lt;br /&gt;
                // Дете је стигло пре одрасле особе&lt;br /&gt;
                childrenQueue.signal();&lt;br /&gt;
            }&lt;br /&gt;
        } else if (personWaiting) {&lt;br /&gt;
            queue.signal();&lt;br /&gt;
        } else if (childWaiting) {&lt;br /&gt;
            childrenQueue.signal();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void enterMan() {&lt;br /&gt;
        int myTicket = ticket++;&lt;br /&gt;
        if (count == capacity || group == 1 || group == 2 || queue.queue()) {&lt;br /&gt;
            // Пун тоалет, у њему су жене/домар или има других особа испред тоалета&lt;br /&gt;
            queue.wait(myTicket * 3);&lt;br /&gt;
        }&lt;br /&gt;
        ++count;&lt;br /&gt;
        if (group == -1) {&lt;br /&gt;
            // Означавамо да је тренутно активна група мушкараца&lt;br /&gt;
            group = 0;&lt;br /&gt;
        } else if (waitingForChildren.queue()) {&lt;br /&gt;
            // Ако има мушкарца који чека децу јавља му се да не мора више да чека&lt;br /&gt;
            waitingForChildren.signal();&lt;br /&gt;
        }&lt;br /&gt;
        if (count != capacity) {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void enterWoman() {&lt;br /&gt;
        int myTicket = ticket++;&lt;br /&gt;
        if (count == capacity || group == 0 || group == 2 || queue.queue()) {&lt;br /&gt;
            // Пун тоалет или су у њему мушкарци/домар&lt;br /&gt;
            queue.wait(myTicket * 3 + 1);&lt;br /&gt;
        }&lt;br /&gt;
        ++count;&lt;br /&gt;
        if (group == -1) {&lt;br /&gt;
            // Означавамо да је тренутно активна група жена&lt;br /&gt;
            group = 1;&lt;br /&gt;
        } else if (waitingForChildren.queue()) {&lt;br /&gt;
            // Ако има жена која чека децу јавља јој се да не мора више да чека&lt;br /&gt;
            waitingForChildren.signal();&lt;br /&gt;
        }&lt;br /&gt;
        if (count != capacity) {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void enterJanitor() {&lt;br /&gt;
        int myTicket = ticket++;&lt;br /&gt;
        if (group != -1) {&lt;br /&gt;
            // У тоалету или испред тоалета има било кога&lt;br /&gt;
            queue.wait(myTicket * 3 + 2);&lt;br /&gt;
        }&lt;br /&gt;
        ++count;&lt;br /&gt;
        // Означавамо да је домар тренутно у тоалету&lt;br /&gt;
        group = 2;&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void enterChild() {&lt;br /&gt;
        int myTicket = ticket++;&lt;br /&gt;
        if (count == capacity || group == 2 || group == -1 || queue.queue() || childrenQueue.queue() || waitingForChildren.queue()) {&lt;br /&gt;
            // Пун тоалет, у њему нема никога, у њему је домар, има других особа&lt;br /&gt;
            // испред тоалета или има особа која је унутра и чека да деца изађу&lt;br /&gt;
            childrenQueue.wait(myTicket);&lt;br /&gt;
        }&lt;br /&gt;
        ++count;&lt;br /&gt;
        ++childCount;&lt;br /&gt;
        if (count != capacity) {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void exitMan() {&lt;br /&gt;
        if (count == childCount + 1) {&lt;br /&gt;
            // Мушкарац не може да изађе док су деца сама у тоалету&lt;br /&gt;
            waitingForChildren.wait();&lt;br /&gt;
        }&lt;br /&gt;
        --count;&lt;br /&gt;
        if (count == 0) {&lt;br /&gt;
            // Нема више никог у тоалету, пусти следећу одраслу особу ако је има&lt;br /&gt;
            group = -1;&lt;br /&gt;
            if (queue.queue()) {&lt;br /&gt;
                queue.signal();&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void exitWoman() {&lt;br /&gt;
        if (count == childCount + 1) {&lt;br /&gt;
            // Жена не може да изађе док су деца сама у тоалету&lt;br /&gt;
            waitingForChildren.wait();&lt;br /&gt;
        }&lt;br /&gt;
        --count;&lt;br /&gt;
        if (count == 0) {&lt;br /&gt;
            // Нема више никог у тоалету, пусти следећу одраслу особу ако је има&lt;br /&gt;
            group = -1;&lt;br /&gt;
            if (queue.queue()) {&lt;br /&gt;
                queue.signal();&lt;br /&gt;
            }&lt;br /&gt;
        } else  {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void exitJanitor() {&lt;br /&gt;
        --count;&lt;br /&gt;
        // Сигурно нема више никог у тоалету&lt;br /&gt;
        group = -1;&lt;br /&gt;
        if (queue.queue()) {&lt;br /&gt;
            queue.signal();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void exitChild() {&lt;br /&gt;
        --count;&lt;br /&gt;
        --childCount;&lt;br /&gt;
        if (waitingForChildren.queue() &amp;amp;&amp;amp; childCount == 0) {&lt;br /&gt;
            // Јави особи која чека на излазак детета да су сва деца изашла&lt;br /&gt;
            waitingForChildren.signal();&lt;br /&gt;
        }&lt;br /&gt;
        if (count == 0) {&lt;br /&gt;
            // Нема више никог у тоалету, пусти следећу одраслу особу ако је има&lt;br /&gt;
            group = -1;&lt;br /&gt;
            if (queue.queue()) {&lt;br /&gt;
                queue.signal();&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            signalPersonOrChild();&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;coarse grain ticket&#039;&#039; алгоритам за улазак у критичну секцију користећи CSP.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
На уласку у једну железничку станицу са једном улазном пругом и једним слепим колосеком десио се квар, па се на улазу направила колона међународних и домаћих возова. Квар је отклоњен и треба пуштати возове. Да би међународни возови мање каснили, они се пуштају први, по редоследу доласка. Пошто постоји само једна пруга и возови се не могу „претицати”, сви домаћи возови који су били испред међународних у колони се пребацују на слепи колосек који је довољно велики да сви возови могу да стану. Када сви међународни возови оду, пуштају се прво возови са слепог колосека, па онда преостали домаћи возови из колоне. Сама станица има N перона, тј. N возова истовремено могу да укрцавају и искрцавају путнике. Возови који у међувремену пристижу треба да буду опслужени, али новопристигли међународни немају приоритет у односу на возове који су испред њих у колони. Решити проблем користећи C-Linda. Написати потребну иницијализацију која осликава стање након отклањања квара. Водити рачуна о томе да су композиције возова тешке и да је потребно време да се воз помери са једног места на друго.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Garca</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_2021&amp;diff=4317</id>
		<title>КДП/Јануар 2021</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_2021&amp;diff=4317"/>
		<updated>2022-05-14T11:43:54Z</updated>

		<summary type="html">&lt;p&gt;Garca: /* Решење */ Zena treba da signalizira nekome ko ceka na decu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/2021/IR3KDP_2021_jan.pdf странице предмета.]&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Потребно је реализовати тајмер користећи приватне семафоре и технику предаје штафетне палице. Тајмер има две методе, прва је метода &amp;lt;code&amp;gt;wakeme&amp;lt;/code&amp;gt; која омогућава да се дата нит блокирана &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; јединица времена (ово је аргумент), а друга је метода &amp;lt;code&amp;gt;tick&amp;lt;/code&amp;gt; која означава да је истекла једна јединица времена.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоји тоалет капацитета N (N &amp;gt; 1) који могу да користе жене, мушкарци, деца и домар (&#039;&#039;Single Bathroom Problem&#039;&#039;) такав да важе следећа правила коришћења: у исто време у тоалету не могу наћи и жене и мушкарци; деца могу да деле тоалет и са женама и са мушкарцима; дете може да се нађе у тоалету само ако се тамо налази барем једна жена или мушкарац; домар има ексклузивно право коришћења тоалета. Написати монитор са &#039;&#039;signal and 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 SingleBathroomProblem {&lt;br /&gt;
    public static final int capacity = 10;&lt;br /&gt;
    private int count = 0;&lt;br /&gt;
    private int childCount = 0;&lt;br /&gt;
    // Група која је тренутно у тоалету&lt;br /&gt;
    // -1 - нема никога, 0 - мушкарци, 1 - жене, 2 - домар&lt;br /&gt;
    private int group = -1;&lt;br /&gt;
    private final Condition queue = new Condition();&lt;br /&gt;
    private final Condition childrenQueue = new Condition();&lt;br /&gt;
    private final Condition waitingForChildren = new Condition();&lt;br /&gt;
    private int ticket = 1;&lt;br /&gt;
    private void signalPersonOrChild() {&lt;br /&gt;
        boolean personWaiting = queue.queue() &amp;amp;&amp;amp; queue.minrank() % 3 == group;&lt;br /&gt;
        boolean childWaiting = childrenQueue.queue();&lt;br /&gt;
        if (personWaiting &amp;amp;&amp;amp; childWaiting) {&lt;br /&gt;
            if (queue.minrank() &amp;gt; childrenQueue.minrank() * 3) {&lt;br /&gt;
                // Одрасла особа је стигла пре детета&lt;br /&gt;
                queue.signal();&lt;br /&gt;
            } else {&lt;br /&gt;
                // Дете је стигло пре одрасле особе&lt;br /&gt;
                childrenQueue.signal();&lt;br /&gt;
            }&lt;br /&gt;
        } else if (personWaiting) {&lt;br /&gt;
            queue.signal();&lt;br /&gt;
        } else if (childWaiting) {&lt;br /&gt;
            childrenQueue.signal();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void enterMan() {&lt;br /&gt;
        int myTicket = ticket++;&lt;br /&gt;
        if (count == capacity || group == 1 || group == 2 || queue.queue()) {&lt;br /&gt;
            // Пун тоалет, у њему су жене/домар или има других особа испред тоалета&lt;br /&gt;
            queue.wait(myTicket * 3);&lt;br /&gt;
        }&lt;br /&gt;
        ++count;&lt;br /&gt;
        if (group == -1) {&lt;br /&gt;
            // Означавамо да је тренутно активна група мушкараца&lt;br /&gt;
            group = 0;&lt;br /&gt;
        } else if (waitingForChildren.queue()) {&lt;br /&gt;
            // Ако има мушкарца који чека децу јавља му се да не мора више да чека&lt;br /&gt;
            waitingForChildren.signal();&lt;br /&gt;
        }&lt;br /&gt;
        if (count != capacity) {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void enterWoman() {&lt;br /&gt;
        int myTicket = ticket++;&lt;br /&gt;
        if (count == capacity || group == 0 || group == 2 || queue.queue()) {&lt;br /&gt;
            // Пун тоалет или су у њему мушкарци/домар&lt;br /&gt;
            queue.wait(myTicket * 3 + 1);&lt;br /&gt;
        }&lt;br /&gt;
        ++count;&lt;br /&gt;
        if (group == -1) {&lt;br /&gt;
            // Означавамо да је тренутно активна група жена&lt;br /&gt;
            group = 1;&lt;br /&gt;
        } else if (waitingForChildren.queue()) {&lt;br /&gt;
            // Ако има жена која чека децу јавља јој се да не мора више да чека&lt;br /&gt;
            waitingForChildren.signal();&lt;br /&gt;
        }&lt;br /&gt;
        if (count != capacity) {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void enterJanitor() {&lt;br /&gt;
        int myTicket = ticket++;&lt;br /&gt;
        if (group != -1) {&lt;br /&gt;
            // У тоалету или испред тоалета има било кога&lt;br /&gt;
            queue.wait(myTicket * 3 + 2);&lt;br /&gt;
        }&lt;br /&gt;
        ++count;&lt;br /&gt;
        // Означавамо да је домар тренутно у тоалету&lt;br /&gt;
        group = 2;&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void enterChild() {&lt;br /&gt;
        int myTicket = ticket++;&lt;br /&gt;
        if (count == capacity || group == 2 || group == -1 || queue.queue() || childrenQueue.queue() || waitingForChildren.queue()) {&lt;br /&gt;
            // Пун тоалет, у њему нема никога, у њему је домар, има других особа&lt;br /&gt;
            // испред тоалета или има особа која је унутра и чека да деца изађу&lt;br /&gt;
            childrenQueue.wait(myTicket);&lt;br /&gt;
        }&lt;br /&gt;
        ++count;&lt;br /&gt;
        ++childCount;&lt;br /&gt;
        if (count != capacity) {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void exitMan() {&lt;br /&gt;
        if (count == childCount + 1) {&lt;br /&gt;
            // Мушкарац не може да изађе док су деца сама у тоалету&lt;br /&gt;
            waitingForChildren.wait();&lt;br /&gt;
        }&lt;br /&gt;
        --count;&lt;br /&gt;
        if (count == 0) {&lt;br /&gt;
            // Нема више никог у тоалету, пусти следећу одраслу особу ако је има&lt;br /&gt;
            group = -1;&lt;br /&gt;
            if (queue.queue()) {&lt;br /&gt;
                queue.signal();&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void exitWoman() {&lt;br /&gt;
        if (count == childCount + 1) {&lt;br /&gt;
            // Жена не може да изађе док су деца сама у тоалету&lt;br /&gt;
            waitingForChildren.wait();&lt;br /&gt;
        }&lt;br /&gt;
        --count;&lt;br /&gt;
        if (count == 0) {&lt;br /&gt;
            // Нема више никог у тоалету, пусти следећу одраслу особу ако је има&lt;br /&gt;
            group = -1;&lt;br /&gt;
            if (queue.queue()) {&lt;br /&gt;
                queue.signal();&lt;br /&gt;
            }&lt;br /&gt;
        } else if (queue.queue() &amp;amp;&amp;amp; queue.minrank() % 3 == group) {&lt;br /&gt;
            signalPersonOrChild();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void exitJanitor() {&lt;br /&gt;
        --count;&lt;br /&gt;
        // Сигурно нема више никог у тоалету&lt;br /&gt;
        group = -1;&lt;br /&gt;
        if (queue.queue()) {&lt;br /&gt;
            queue.signal();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void exitChild() {&lt;br /&gt;
        --count;&lt;br /&gt;
        --childCount;&lt;br /&gt;
        if (waitingForChildren.queue() &amp;amp;&amp;amp; childCount == 0) {&lt;br /&gt;
            // Јави особи која чека на излазак детета да су сва деца изашла&lt;br /&gt;
            waitingForChildren.signal();&lt;br /&gt;
        }&lt;br /&gt;
        if (count == 0) {&lt;br /&gt;
            // Нема више никог у тоалету, пусти следећу одраслу особу ако је има&lt;br /&gt;
            group = -1;&lt;br /&gt;
            if (queue.queue()) {&lt;br /&gt;
                queue.signal();&lt;br /&gt;
            }&lt;br /&gt;
        } else if (queue.queue() &amp;amp;&amp;amp; queue.minrank() % 3 == group) {&lt;br /&gt;
            signalPersonOrChild();&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;coarse grain ticket&#039;&#039; алгоритам за улазак у критичну секцију користећи CSP.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
На уласку у једну железничку станицу са једном улазном пругом и једним слепим колосеком десио се квар, па се на улазу направила колона међународних и домаћих возова. Квар је отклоњен и треба пуштати возове. Да би међународни возови мање каснили, они се пуштају први, по редоследу доласка. Пошто постоји само једна пруга и возови се не могу „претицати”, сви домаћи возови који су били испред међународних у колони се пребацују на слепи колосек који је довољно велики да сви возови могу да стану. Када сви међународни возови оду, пуштају се прво возови са слепог колосека, па онда преостали домаћи возови из колоне. Сама станица има N перона, тј. N возова истовремено могу да укрцавају и искрцавају путнике. Возови који у међувремену пристижу треба да буду опслужени, али новопристигли међународни немају приоритет у односу на возове који су испред њих у колони. Решити проблем користећи C-Linda. Написати потребну иницијализацију која осликава стање након отклањања квара. Водити рачуна о томе да су композиције возова тешке и да је потребно време да се воз помери са једног места на друго.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Garca</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%88%D1%83%D0%BB_2021&amp;diff=4316</id>
		<title>КДП/Јул 2021</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_2021&amp;diff=4316"/>
		<updated>2022-05-14T08:14:05Z</updated>

		<summary type="html">&lt;p&gt;Garca: Nije minrank nego signal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Поставка овог рока може се наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/2021/KDP_2021_jul.pdf странице предмета.]&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Код &#039;&#039;Tie breaker&#039;&#039; алгоритма за n процеса се догодио следећи случај – приликом извршавања кода за улазак у критичну секцију, свих n процеса су ушли у стање 1 и ниједан још није ушао у стање 2. Одговорити на следећа питања и образложити одговор:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Да ли процес који је први ушао у стање 1 први улази у стање 2?&lt;br /&gt;
# Да ли процес који је први ушао у стање n-2 први улази у критичну секцију?&lt;br /&gt;
# Да ли процес који је последњи ушао у стање 1 може да буде трећи који улази у стање 2?&lt;br /&gt;
# Да ли процес који је последњи ушао у стање 1 може да буде први који улази у критичну секцију?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# У општем случају, не мора да значи да ће процес који је први ушао у стање 1 први ући и у стање 2. Пошто се у том тренутку сви процеси налазе у стању 1, било који процес који није последњи стигао у стање 1 ће моћи да први уђе у стање 2. Специјално, у случају када је &amp;lt;math&amp;gt;n = 2&amp;lt;/math&amp;gt;, процес који је први ушао у стање 1 ће гарантовано први ући у стање 2.&lt;br /&gt;
# У првом стању могу да се нађу &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; процеса, у другом стању &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; процеса... том логиком у стању &amp;lt;math&amp;gt;n-2&amp;lt;/math&amp;gt; могу да се нађу 3 процеса истовремено. Један од та три процеса ће последњи ући и неће моћи да напредује, док ће остала два моћи да напредују и не гарантује се који од та два процеса ће први напредовати.&lt;br /&gt;
# Процес који је последњи ушао у стање 1 ће бити последњи који ће из њега изаћи. Могуће је да он буде трећи који улази у стање 2 уколико је &amp;lt;math&amp;gt;n = 3&amp;lt;/math&amp;gt;, у супротном не мора да значи.&lt;br /&gt;
# Процес који је последњи ушао у стање 1 је последњи који улази у критичну секцију. Да би такође био и први, морало би да важи &amp;lt;math&amp;gt;n = 1&amp;lt;/math&amp;gt; а то нема смисла.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Посматра се агенција за изнајмљивање аутомобила. У возном парку постоје M стандардних возила и N лукс возила. Приликом доласка клијента који жели да изнајми ауто, он се изјашњава да ли жели да изнајми стандардно или лукс возило или му је свеједно. Клијент чека у реду све док му се возило не додели на коришћење. По завршетку коришћења, корисник долази још једном у агенцију и враћа ауто. Потребно је обезбедити да клијенти преузимају своје аутомобиле по редоследу доласка у агенцију. Клијент има могућност да изнајми више возила, али је сваки долазак везан искључиво за позајмицу једног аутомобила. Решити проблем користећи мониторе сa &#039;&#039;signal and continue&#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 CarAgency {&lt;br /&gt;
    public static final STANDARD_VEHICLE = 0;&lt;br /&gt;
    public static final LUXURY_VEHICLE = 1;&lt;br /&gt;
    public static final ANY_VEHICLE = 2;&lt;br /&gt;
    private int standardVehicles = 100;&lt;br /&gt;
    private int luxuryVehicles = 10;&lt;br /&gt;
    private final Condition[] queues = new Condition[3];&lt;br /&gt;
    private int ticket = 1;&lt;br /&gt;
    public CarAgency() {&lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; ++i) {&lt;br /&gt;
            queues[i] = new Condition();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void rentCar(int which) {&lt;br /&gt;
        int myTicket = ticket++;&lt;br /&gt;
        if (&lt;br /&gt;
            standardVehicles == 0 &amp;amp;&amp;amp; which == STANDARD_VEHICLE ||&lt;br /&gt;
            luxuryVehicles == 0 &amp;amp;&amp;amp; which == LUXURY_VEHICLE ||&lt;br /&gt;
            (standardVehicles == 0 &amp;amp;&amp;amp; luxuryVehicles == 0)&lt;br /&gt;
        ) {&lt;br /&gt;
            // Нема возила, чекамо&lt;br /&gt;
            queues[which].wait(myTicket);&lt;br /&gt;
        } else if (which == STANDARD_VEHICLE) {&lt;br /&gt;
            // Желели смо стандардно возило и добили смо&lt;br /&gt;
            --standardVehicles;&lt;br /&gt;
        } else if (which == LUXURY_VEHICLE) {&lt;br /&gt;
            // Желели смо луксузно возило и добили смо&lt;br /&gt;
            --luxuryVehicles;&lt;br /&gt;
        } else if (standardVehicles == 0) {&lt;br /&gt;
            // Желели смо било које возило и добили смо луксузно&lt;br /&gt;
            --luxuryVehicles;&lt;br /&gt;
        } else {&lt;br /&gt;
            // Желели смо било које возило и добили смо стандардно&lt;br /&gt;
            --standardVehicles;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void returnCar(int which) {&lt;br /&gt;
        if (which == STANDARD_VEHICLE) {&lt;br /&gt;
            ++standardVehicles;&lt;br /&gt;
            if (queues[STANDARD_VEHICLE].minrank() &amp;lt; queues[ANY_VEHICLE].minrank()) {&lt;br /&gt;
                queues[STANDARD_VEHICLE].signal();&lt;br /&gt;
            } else {&lt;br /&gt;
                queues[ANY_VEHICLE].signal();&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            ++luxuryVehicles;&lt;br /&gt;
            if (queues[LUXURY_VEHICLE].minrank() &amp;lt; queues[ANY_VEHICLE].minrank()) {&lt;br /&gt;
                queues[LUXURY_VEHICLE].signal();&lt;br /&gt;
            } else {&lt;br /&gt;
                queues[ANY_VEHICLE].signal();&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;
== 3. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
У Линди реализовати лицитацију у којој постоји један процес &#039;&#039;vođa_licitacije&#039;&#039; и n процеса &#039;&#039;učesnika_u_licitaciji&#039;&#039; и један процес &#039;&#039;tick&#039;&#039; који само ажурира време. Вођа лицитације треба да иницијализује торку са почетном вредношћу и да после датог временског интервала заврши лицитацију, успешно ако је излицитирана вредност већа од резервисане вредности, неуспешно иначе. Процеси учесници у лицитацији треба да се реализују тако да се не блокирају када се заврши дата лицитација, треба да знају која је излицитирана вредност и да ли су је они поставили.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
== 4. задатак ==&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Постоји N процеса &amp;lt;code&amp;gt;node(i:1..N)&amp;lt;/code&amp;gt; који или чувају елементе листе или су слободни. Сваки од њих може да чува неку вредност (&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;) и показивач на следећи елемент у листи (&amp;lt;code&amp;gt;next&amp;lt;/code&amp;gt;). Процес &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt; чува показивач на први елемент у листи. Приликом брисања елемента из листе процес који га представља се пребацује на почетак листе слободних процеса на који указује процес &amp;lt;code&amp;gt;free&amp;lt;/code&amp;gt;. Процес &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; иницира брисање елемента са задатом вредношћу из листе. Реализовати процедуре за све наведене процесе користећи CSP.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>Garca</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A1_%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2021&amp;diff=4195</id>
		<title>ИЕП/К1 Септембар 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%98%D0%95%D0%9F/%D0%9A1_%D0%A1%D0%B5%D0%BF%D1%82%D0%B5%D0%BC%D0%B1%D0%B0%D1%80_2021&amp;diff=4195"/>
		<updated>2022-03-27T10:37:02Z</updated>

		<summary type="html">&lt;p&gt;Garca: /* 1. задатак */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Први колоквијум у септембарском року 2021. године&#039;&#039;&#039; одржан је 17. септембра.&lt;br /&gt;
&lt;br /&gt;
== Поставка ==&lt;br /&gt;
Компанија уговара пројекте израде софтвера по наруџбини клијента. У компанији су запослени програмери и менаџери. У систему се води евиденција о сваком кораку рада (захтевима, додељеним пословима, развијеном коду). За сваки пројекат неког клијента, евидентирају се датум креирања, менаџер који је надлежан за њега као и сви кориснички захтеви. Пре него што пројекат отпочне, он мора бити испланиран (а након планирања статус пројекта постаје И). Планирање пројекта се састоји у томе да се за сваки кориснички захтев дефинише посао, као и колико ће израда тог посла трајати и колико ће програмера бити ангажовано на том послу. Након тога се одређују програмери и додељује им се ангажман на појединим пословима. Имплементација пројеката може да отпочне тек након што се пројекат испланира. Током имплементације, целокупан код који програмери развијају се такође евидентира у систему и то тако да је за сваки део кода дефинисано које корисничке захтеве имплементира.&lt;br /&gt;
 KLIJENT (&amp;lt;u&amp;gt;SifK&amp;lt;/u&amp;gt;, Naziv, Kontakt)&lt;br /&gt;
 RADNIK (&amp;lt;u&amp;gt;SifR&amp;lt;/u&amp;gt;, Ime)&lt;br /&gt;
 MENADZER (&amp;lt;u&amp;gt;SifR&amp;lt;/u&amp;gt;, Iskustvo)&lt;br /&gt;
 PROGRAMER (&amp;lt;u&amp;gt;SifR&amp;lt;/u&amp;gt;, Specijalnost)&lt;br /&gt;
 PROJEKAT (&amp;lt;u&amp;gt;SifP&amp;lt;/u&amp;gt;, Naziv, Status, Vrednost, Datum, SifK, SifR)&lt;br /&gt;
 ZAHTEV (&amp;lt;u&amp;gt;SifZ&amp;lt;/u&amp;gt;, Opis, SifP)&lt;br /&gt;
 POSAO (&amp;lt;u&amp;gt;SifJ&amp;lt;/u&amp;gt;, Trajanje, BrProgramera, SifP, SifZ)&lt;br /&gt;
 ANGAZMAN (&amp;lt;u&amp;gt;SifA&amp;lt;/u&amp;gt;, SifR, SifJ)&lt;br /&gt;
 KOD (&amp;lt;u&amp;gt;SifK&amp;lt;/u&amp;gt;, Kod)&lt;br /&gt;
 IMPLEMENTIRA (&amp;lt;u&amp;gt;SifK, SifZ&amp;lt;/u&amp;gt;)&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Навести по један пример сваког документа уколико би се за потребе наведене евиденције користила база података заснована на документима (mongoDB), али тако да модел искористи све предности нерелационог модела података.&lt;br /&gt;
# Саставити скрипт који користећи функцију за агрегацију (aggregation framework) враћа шифре и називе оних пројеката које имају вредност преко 1000, а при томе имају и више од 8 послова са трајањем преко 200.&lt;br /&gt;
# Саставити Map/Reduce посао који за сваки датум када је креиран бар један пројекат враћа информацију о просечном броју корисничких захтева.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Радник ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;_id&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;Ime&amp;quot;: &amp;quot;Pera&amp;quot;,&lt;br /&gt;
    // Menadzer&lt;br /&gt;
    &amp;quot;Iskustvo&amp;quot;: null,&lt;br /&gt;
    // Programer&lt;br /&gt;
    &amp;quot;Specijalnost&amp;quot;: &amp;quot;Docker&amp;quot;,&lt;br /&gt;
    // Indikator 1 - Programer, 2 - Menadzer, 3 - Oba&lt;br /&gt;
    &amp;quot;Ind&amp;quot;: 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пројекат ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;_id&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;Naziv&amp;quot;: &amp;quot;Softverska kompanija&amp;quot;,&lt;br /&gt;
    &amp;quot;Status&amp;quot;: &amp;quot;I&amp;quot;,&lt;br /&gt;
    &amp;quot;Vrednost&amp;quot;: 10000,&lt;br /&gt;
    &amp;quot;Datum&amp;quot;: &amp;quot;2022-03-03T20:00:00Z&amp;quot;,&lt;br /&gt;
    // Klijent&lt;br /&gt;
    &amp;quot;Klijent&amp;quot;: {&lt;br /&gt;
        &amp;quot;Naziv&amp;quot;: &amp;quot;Microsoft&amp;quot;,&lt;br /&gt;
        &amp;quot;Kontakt&amp;quot;: &amp;quot;kontakt@microsoft.rs&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Menadzer&amp;quot;: 4,&lt;br /&gt;
    // Posao&lt;br /&gt;
    &amp;quot;Poslovi&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Zahtev&amp;quot;: 1,&lt;br /&gt;
            &amp;quot;Trajanje&amp;quot;: 90,&lt;br /&gt;
            // Angazman&lt;br /&gt;
            &amp;quot;Programeri&amp;quot;: [1, 2, 3, 4, 5]&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Zahtevi&amp;quot;: [1, 2, 3, 4]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Захтев ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;_id&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;Opis&amp;quot;: &amp;quot;Tabela Implementira&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Код ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Kod&amp;quot;: &amp;quot;int main() {...}&amp;quot;,&lt;br /&gt;
    // Implementira&lt;br /&gt;
    &amp;quot;Zahtevi&amp;quot;: [1, 2, 3, 4]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
db.Projekat.aggregate([&lt;br /&gt;
    // Филтрирање пројеката са вредношћу мањом од 1000.&lt;br /&gt;
    {&lt;br /&gt;
        $match: {&lt;br /&gt;
            Vrednost: {&lt;br /&gt;
                $gt: 1000&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    // Дељење сваког пројекта тако да се сваки посао налази у одвојеном објекту.&lt;br /&gt;
    {&lt;br /&gt;
        $unwind: &amp;quot;$Poslovi&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    // Избацивање послова са мање од 200 трајања.&lt;br /&gt;
    {&lt;br /&gt;
        $match: {&lt;br /&gt;
            &amp;quot;Poslovi.Trajanje&amp;quot;: {&lt;br /&gt;
                $gt: 200&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    // Груписање пројеката назад са бројањем послова.&lt;br /&gt;
    {&lt;br /&gt;
        $group: {&lt;br /&gt;
            _id: &amp;quot;$_id&amp;quot;,&lt;br /&gt;
            BrojPoslova: {&lt;br /&gt;
                $count: {}&lt;br /&gt;
            },&lt;br /&gt;
            Naziv: {&lt;br /&gt;
                $first: &amp;quot;$Naziv&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    // Филтрирање пројеката са мање од 8 послова који имају преко 200 трајања.&lt;br /&gt;
    {&lt;br /&gt;
        $match: {&lt;br /&gt;
            BrojPoslova: {&lt;br /&gt;
                $gt: 8&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    // Враћање у траженом облику.&lt;br /&gt;
    {&lt;br /&gt;
        $project: {&lt;br /&gt;
            sifra: &amp;quot;$_id&amp;quot;,&lt;br /&gt;
            naziv: &amp;quot;$Naziv&amp;quot;&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;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function map() {&lt;br /&gt;
    emit(this.Datum, {&lt;br /&gt;
        sum: this.Zahtevi.length,&lt;br /&gt;
        count: 1,&lt;br /&gt;
        avg: 0&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function reduce(key, values) {&lt;br /&gt;
    return {&lt;br /&gt;
        sum: Array.sum(values.map(v =&amp;gt; v.sum)),&lt;br /&gt;
        count: Array.sum(values.map(v =&amp;gt; v.count)),&lt;br /&gt;
        avg: 0&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function finalize(key, value) {&lt;br /&gt;
    value.avg = value.sum / value.count;&lt;br /&gt;
    return value;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
db.Projekat.mapReduce(map, reduce, {out: &#039;k1_septembar_2021_c&#039;, finalize});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Тестирање ==&lt;br /&gt;
Решења изнад можете тестирати над следећом базом:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
db.createCollection(&#039;Radnik&#039;);&lt;br /&gt;
db.createCollection(&#039;Projekat&#039;);&lt;br /&gt;
db.createCollection(&#039;Zahtev&#039;);&lt;br /&gt;
db.createCollection(&#039;Kod&#039;);&lt;br /&gt;
db.Projekat.insertMany([&lt;br /&gt;
    {&lt;br /&gt;
        _id: 1,&lt;br /&gt;
        Naziv: &#039;Softverska kompanija&#039;,&lt;br /&gt;
        Status: &#039;I&#039;,&lt;br /&gt;
        Vrednost: 10000,&lt;br /&gt;
        Datum: &#039;2022-03-03T20:00:00Z&#039;,&lt;br /&gt;
        Klijent: {&lt;br /&gt;
            Naziv: &#039;Microsoft&#039;,&lt;br /&gt;
            Kontakt: &#039;kontakt@microsoft.rs&#039;&lt;br /&gt;
        },&lt;br /&gt;
        Menadzer: 4,&lt;br /&gt;
        Poslovi: [&lt;br /&gt;
            {&lt;br /&gt;
                Zahtev: 1,&lt;br /&gt;
                Trajanje: 201,&lt;br /&gt;
                Programeri: [1, 2, 3, 4, 5]&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                Zahtev: 2,&lt;br /&gt;
                Trajanje: 201,&lt;br /&gt;
                Programeri: [1, 2, 3, 4, 5]&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                Zahtev: 3,&lt;br /&gt;
                Trajanje: 201,&lt;br /&gt;
                Programeri: [1, 2, 3, 4, 5]&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                Zahtev: 4,&lt;br /&gt;
                Trajanje: 201,&lt;br /&gt;
                Programeri: [1, 2, 3, 4, 5]&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                Zahtev: 5,&lt;br /&gt;
                Trajanje: 201,&lt;br /&gt;
                Programeri: [1, 2, 3, 4, 5]&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                Zahtev: 6,&lt;br /&gt;
                Trajanje: 201,&lt;br /&gt;
                Programeri: [1, 2, 3, 4, 5]&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                Zahtev: 7,&lt;br /&gt;
                Trajanje: 201,&lt;br /&gt;
                Programeri: [1, 2, 3, 4, 5]&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                Zahtev: 8,&lt;br /&gt;
                Trajanje: 201,&lt;br /&gt;
                Programeri: [1, 2, 3, 4, 5]&lt;br /&gt;
            },&lt;br /&gt;
            {&lt;br /&gt;
                Zahtev: 9,&lt;br /&gt;
                Trajanje: 201,&lt;br /&gt;
                Programeri: [1, 2, 3, 4, 5]&lt;br /&gt;
            }&lt;br /&gt;
        ],&lt;br /&gt;
        Zahtevi: [1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;br /&gt;
    },&lt;br /&gt;
    // ...&lt;br /&gt;
]);&lt;br /&gt;
db.Radnik.insertMany([&lt;br /&gt;
    {_id: 1, Ime: &#039;Pera&#039;, Iskustvo: null, Specijalnost: &#039;Docker&#039;},&lt;br /&gt;
    {_id: 2, Ime: &#039;Mika&#039;, Iskustvo: 2, Specijalnost: null},&lt;br /&gt;
    {_id: 3, Ime: &#039;Žika&#039;, Iskustvo: null, Specijalnost: &#039;C#&#039;},&lt;br /&gt;
    {_id: 4, Ime: &#039;Miloš&#039;, Iskustvo: 10, Specijalnost: null},&lt;br /&gt;
    {_id: 5, Ime: &#039;Zaharije&#039;, Iskustvo: null, Specijalnost: &#039;Docker&#039;},&lt;br /&gt;
    {_id: 6, Ime: &#039;Jovan&#039;, Iskustvo: null, Specijalnost: &#039;Python&#039;}&lt;br /&gt;
]);&lt;br /&gt;
db.Zahtev.insertMany([&lt;br /&gt;
    {_id: 1, Opis: &#039;Tabela Klijent&#039;},&lt;br /&gt;
    {_id: 2, Opis: &#039;Tabela Radnik&#039;},&lt;br /&gt;
    {_id: 3, Opis: &#039;Tabela Menadzer&#039;},&lt;br /&gt;
    {_id: 4, Opis: &#039;Tabela Programer&#039;},&lt;br /&gt;
    {_id: 5, Opis: &#039;Tabela Projekat&#039;},&lt;br /&gt;
    {_id: 6, Opis: &#039;Tabela Zahtev&#039;},&lt;br /&gt;
    {_id: 7, Opis: &#039;Tabela Posao&#039;},&lt;br /&gt;
    {_id: 8, Opis: &#039;Tabela Angazman&#039;},&lt;br /&gt;
    {_id: 9, Opis: &#039;Tabela Kod&#039;},&lt;br /&gt;
    {_id: 10, Opis: &#039;Tabela Implementira&#039;}&lt;br /&gt;
]);&lt;br /&gt;
db.Kod.insertMany([&lt;br /&gt;
    {_id: 1, Kod: &#039;int main(void) {return 0;}&#039;, Zahtevi: [1, 2, 3, 4]},&lt;br /&gt;
    {_id: 2, Kod: &#039;def main():\n    print(&amp;quot;Hello world&amp;quot;)&#039;, Zahtevi: [5, 6, 7, 8]},&lt;br /&gt;
    {_id: 3, Kod: &#039;System.out.println(&amp;quot;Hello world&amp;quot;);&#039;, Zahtevi: [9, 10]}&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>Garca</name></author>
	</entry>
</feed>