КДП/Јул-1 2025 — разлика између измена
м (Ispravka kategorija) |
(Ispravka resenja) |
||
| (Једна међуизмена истог корисника није приказана) | |||
| Ред 1: | Ред 1: | ||
{{tocright}} | {{tocright}} | ||
Испит из КДП-а у року '''Јул-1 2025. године''' одржан је 20. августа. Поставка рока тренутно није доступна онлајн. | |||
Испит из КДП-а у року '''Јул-1 2025. године''' одржан је 20. августа. Поставка рока није доступна онлајн. | |||
== {{категорија|1. задатак|Штафетна_палица}} == | == {{категорија|1. задатак|Штафетна_палица}} == | ||
{{ | {{делимично решено}} | ||
=== Поставка === | === Поставка === | ||
Потребно је реализовати семафор који поред стандардних атомских операција <code>signal()</code> и <code>wait()</code> има и атомске операције <code>signal(n)</code> и <code>wait(n)</code> које интерну семафорску променљиву атомски увећава односно умањује за n уколико је то могуће, уколико није чека док не буде било могуће. Потребно је решити проблем користећи расподељене бинарне семафоре и технику предаје штафетне палице. Процес који је раније упутио <code>wait</code> захтев треба раније да обави своју операцију. Претпоставити да у било ком тренутку максимално N процеса може упутити захтев за приступ семафору. | Потребно је реализовати семафор који поред стандардних атомских операција <code>signal()</code> и <code>wait()</code> има и атомске операције <code>signal(n)</code> и <code>wait(n)</code> које интерну семафорску променљиву атомски увећава односно умањује за n уколико је то могуће, уколико није чека док не буде било могуће. Потребно је решити проблем користећи расподељене бинарне семафоре и технику предаје штафетне палице. Процес који је раније упутио <code>wait</code> захтев треба раније да обави своју операцију. Претпоставити да у било ком тренутку максимално N процеса може упутити захтев за приступ семафору. | ||
| Ред 11: | Ред 10: | ||
== {{категорија|2. задатак|Монитори}} == | == {{категорија|2. задатак|Монитори}} == | ||
{{ | {{делимично решено}} | ||
=== Поставка === | === Поставка === | ||
Аутомобили који долазе са севера и југа морају да пређу реку преко моста (''One lane bridge problem''). На мосту постоји само једна возна трака. Значи, у било ком тренутку мостом може да прође један или више аутомобила који долазе из истог смера (али не и из супротног смера). Обезбедити да се смер саобраћаја мења сваки пут након што га пређе 10 аутомобила из истог смера, ако су за то време један или више аутомобила чекали да га пређу из супротног смера. Написати монитор са signal and wait дисциплином који решава дати проблем. | Аутомобили који долазе са севера и југа морају да пређу реку преко моста (''One lane bridge problem''). На мосту постоји само једна возна трака. Значи, у било ком тренутку мостом може да прође један или више аутомобила који долазе из истог смера (али не и из супротног смера). Обезбедити да се смер саобраћаја мења сваки пут након што га пређе 10 аутомобила из истог смера, ако су за то време један или више аутомобила чекали да га пређу из супротног смера. Написати монитор са signal and wait дисциплином који решава дати проблем. | ||
| Ред 18: | Ред 17: | ||
== {{категорија|3. задатак|Филтерски_процеси}} == | == {{категорија|3. задатак|Филтерски_процеси}} == | ||
{{ | {{делимично решено}} | ||
=== Поставка === | === Поставка === | ||
Филтерска мрежа за тражење минимума низа. Елемент мреже на своје улазе прима две<sup>[sic]</sup> низа целих бројева која се завршавају са вредношћу ''EOS''. Елемент на једном излазу треба да генерише вредност која одговара минималној вредности из примљених низова, и након тога вредност ''EOS''. Приказати филтерску мрежу која најбрже налази минимум 11 вредности. | Филтерска мрежа за тражење минимума низа. Елемент мреже на своје улазе прима две<sup>[sic]</sup> низа целих бројева која се завршавају са вредношћу ''EOS''. Елемент на једном излазу треба да генерише вредност која одговара минималној вредности из примљених низова, и након тога вредност ''EOS''. Приказати филтерску мрежу која најбрже налази минимум 11 вредности. | ||
| Ред 25: | Ред 24: | ||
== {{категорија|4. задатак|C-Linda}} == | == {{категорија|4. задатак|C-Linda}} == | ||
=== Поставка === | === Поставка === | ||
Претпоставити да постоји <math>N</math> путника и једно возило на тобогану (''The roller coaster problem''). Путници се наизменично шетају по луна парку и возе на тобогану. Тобоган може да прими највише <math>K</math> путника при чему је <math>K < N</math>. Вожња тобоганом може да почне само уколико се сакупило тачно <math>K</math> путника. Користећи ''C-Lindu'' написати програм који решава овај проблем. | Претпоставити да постоји <math>N</math> путника и једно возило на тобогану (''The roller coaster problem''). Путници се наизменично шетају по луна парку и возе на тобогану. Тобоган може да прими највише <math>K</math> путника при чему је <math>K < N</math>. Вожња тобоганом може да почне само уколико се сакупило тачно <math>K</math> путника. Користећи ''C-Lindu'' написати програм који решава овај проблем. | ||
=== Решење === | === Решење === | ||
<syntaxhighlight lang="c"> | |||
const int N, K; // K < N | |||
void putnik(int i) { | |||
while (true) { | |||
// setnja | |||
in("onboard"); | |||
out("onboarded"); | |||
// voznja | |||
in("disembark"); | |||
out("disembarked"); | |||
} | |||
} | |||
void tobogan() { | |||
while (true) { | |||
for (int i = 0; i < K; i++) out("onboard"); | |||
for (int i = 0; i < K; i++) in("onboarded"); | |||
// voznja | |||
for (int i = 0; i < K; i++) out("disembark"); | |||
for (int i = 0; i < K; i++) in("disembarked"); | |||
} | |||
} | |||
void init() { | |||
eval(tobogan); | |||
for (int i = 0; i < N; i++) { | |||
eval(putnik, i); | |||
} | |||
} | |||
</syntaxhighlight> | |||
[[Категорија:Рокови]] | [[Категорија:Рокови]] | ||
[[Категорија:КДП]] | [[Категорија:КДП]] | ||
Тренутна верзија на датум 14. септембар 2025. у 20:50
Испит из КДП-а у року Јул-1 2025. године одржан је 20. августа. Поставка рока тренутно није доступна онлајн.
1. задатак
- Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.
Поставка
Потребно је реализовати семафор који поред стандардних атомских операција signal() и wait() има и атомске операције signal(n) и wait(n) које интерну семафорску променљиву атомски увећава односно умањује за n уколико је то могуће, уколико није чека док не буде било могуће. Потребно је решити проблем користећи расподељене бинарне семафоре и технику предаје штафетне палице. Процес који је раније упутио wait захтев треба раније да обави своју операцију. Претпоставити да у било ком тренутку максимално N процеса може упутити захтев за приступ семафору.
Решење
2. задатак
- Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.
Поставка
Аутомобили који долазе са севера и југа морају да пређу реку преко моста (One lane bridge problem). На мосту постоји само једна возна трака. Значи, у било ком тренутку мостом може да прође један или више аутомобила који долазе из истог смера (али не и из супротног смера). Обезбедити да се смер саобраћаја мења сваки пут након што га пређе 10 аутомобила из истог смера, ако су за то време један или више аутомобила чекали да га пређу из супротног смера. Написати монитор са signal and wait дисциплином који решава дати проблем.
Решење
3. задатак
- Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.
Поставка
Филтерска мрежа за тражење минимума низа. Елемент мреже на своје улазе прима две[sic] низа целих бројева која се завршавају са вредношћу EOS. Елемент на једном излазу треба да генерише вредност која одговара минималној вредности из примљених низова, и након тога вредност EOS. Приказати филтерску мрежу која најбрже налази минимум 11 вредности.
Решење
4. задатак
Поставка
Претпоставити да постоји путника и једно возило на тобогану (The roller coaster problem). Путници се наизменично шетају по луна парку и возе на тобогану. Тобоган може да прими највише путника при чему је . Вожња тобоганом може да почне само уколико се сакупило тачно путника. Користећи C-Lindu написати програм који решава овај проблем.
Решење
const int N, K; // K < N
void putnik(int i) {
while (true) {
// setnja
in("onboard");
out("onboarded");
// voznja
in("disembark");
out("disembarked");
}
}
void tobogan() {
while (true) {
for (int i = 0; i < K; i++) out("onboard");
for (int i = 0; i < K; i++) in("onboarded");
// voznja
for (int i = 0; i < K; i++) out("disembark");
for (int i = 0; i < K; i++) in("disembarked");
}
}
void init() {
eval(tobogan);
for (int i = 0; i < N; i++) {
eval(putnik, i);
}
}