АСП1/К1 2020 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (Formatiranje, dodata ilustracija na primeru u prvom zadatku)
Ред 4: Ред 4:
== 1. zadatak ==
== 1. zadatak ==
=== Postavka ===
=== Postavka ===
Neka je data funkcija random() 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%.
Neka je data funkcija ''random()'' 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%.


=== Rešenje ===
=== Rešenje ===
U okviru naše nove funkcije pozovemo funkciju random dva puta, i na primer samo u slučaju kada oba puta vrati nulu (00) tada 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%.
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%.
<syntaxhighlight lang="milo">
NEW RANDOM()
if (random() = 0) and (random() = 0) then
    return 0
else
    return 1
end_if
</syntaxhighlight>


== 2. zadatak ==
== 2. zadatak ==
=== Postavka ===
=== Postavka ===
Neka je dat stek s1 na kome se nalaze celi brojevi. Korišćenjem dodatnog steka s2, transformisati sadržaj steka s1 tako da on postane neopadajuće uređen niz. Smatrati da su operacije za rad sa stekom već implementirane.
Neka je dat stek ''s1'' na kome se nalaze celi brojevi. Korišćenjem dodatnog steka ''s2'', transformisati sadržaj steka ''s1'' tako da on postane neopadajuće uređen niz. Smatrati da su operacije za rad sa stekom već implementirane.


=== Rešenje ===
=== Rešenje ===
Ред 30: Ред 38:
     PUSH(s1, x)
     PUSH(s1, x)
end_while
end_while
while (cnt) do
while (cnt > 0) do
     num = cnt
     num = cnt
     tmp = 0
     tmp = 0
     while (num) do
     while (num > 0) do
         x = POP(s1)
         x = POP(s1)
         if (x < max) then
         if (x < max) then
Ред 47: Ред 55:
         i = i + 1
         i = i + 1
     end_for
     end_for
     if (cnt) then
     if (cnt > 0) then
         max = TOP(s2)
         max = TOP(s2)
         while (not STACK_IS_EMPTY(s2)) do
         while (not STACK_IS_EMPTY(s2)) do

Верзија на датум 26. август 2021. у 20:36

Zadaci na sajtu predmeta.

1. zadatak

Postavka

Neka je data funkcija random() 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%.

Rešenje

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%.

NEW RANDOM()
if (random() = 0) and (random() = 0) then
    return 0
else
    return 1
end_if

2. zadatak

Postavka

Neka je dat stek s1 na kome se nalaze celi brojevi. Korišćenjem dodatnog steka s2, transformisati sadržaj steka s1 tako da on postane neopadajuće uređen niz. Smatrati da su operacije za rad sa stekom već implementirane.

Rešenje

SORT STACK(s1)
max = TOP(s1)
cnt = 0
while (not STACK_IS_EMPTY(s1)) do
    x = POP(s1)
    if (x > max) then
        max = x
    end_if
    PUSH(s2, x)
    cnt = cnt + 1
end_while
while (not STACK_IS_EMPTY(s2)) do
    x = POP(s2)
    PUSH(s1, x)
end_while
while (cnt > 0) do
    num = cnt
    tmp = 0
    while (num > 0) do
        x = POP(s1)
        if (x < max) then
            PUSH(s2, x)
        else
            cnt = cnt - 1
            tmp = tmp + 1
        end_if
        num = num - 1
    end_while
    for i = 1 to tmp do
        PUSH(s1, max)
        i = i + 1
    end_for
    if (cnt > 0) then
        max = TOP(s2)
        while (not STACK_IS_EMPTY(s2)) do
            x = POP(s2)
            if (x > max) then
                max = x
            end_if
            PUSH(s1, x)
        end_while
    end_if
end_while