OII 2021-02-23

6

Data la seguente funzione

function F(x: integer) → integer
    variable i: integer
    i ← 0
    while x > 0 do
        if x MOD 2 = 0 then
            x ← x/2
        else
            x ← x-1
        end if
        i ← i+1
    end while
    return i
end function

Qual è il valore minimo da passare ad F perché questa ritorni 5?

7

Dato il seguente programma

variable i: integer
variable v: integer
variable w: integer
v ← [4,9,6,0,3,5,8,7,2,1]
w ← [0,0,0,0,0,0,0,0,0,0]
i ← 0
while i < 10 do
    w[v[i]] ← i
    i ← i+1
end while
i ← 0
while i < 10 do 
    output w[i]
    i ← i+1
end while

Qual è il valore dell’ultimo intero che viene stampato durante l’esecuzione di questo programma?

8

Dato il seguente programma

variable i: integer
variable s: integer
variable t: integer
i ← 0
s ← 2
t ← 0
while i < 8 do
    i ← i+1
    s ← s×2
    t ← t+s+i
end while
output t

Cosa viene stampato al termine dell’esecuzione?

9

Date le seguenti funzioni:

function F(x: integer) → integer
    if x MOD 2 = 0 then
        return 0
    else
        return 1+F((x-1)/2)
    end if
end function
function G(x: integer) → integer
    if x > 250 or x ≤ 0 then 
        return 0 
    else 
        return MAX(F(x), G(x/2))
    end if
end function

Tenendo conto che la divisione restituisce un risultato intero (quindi, ad esempio, sia 4/2 che 5/2 restituiscono 2), qual è il massimo x tale per cui G(x)=2?

10

11

Dato il seguente programma:

function F(h: integer; i: integer) → integer
    if i=0 or i=h-1 then
        return 1 
    end if
    if i < 0 or i ≥ h then
        return 0
    end if
    return F(h-1, i-1)+F(h-1, i)
end function
variable i: integer
i ← 3
while i > 0 do
    output F(4,i)
    i ← i-1
end while

Qual è l’ultimo valore che viene stampato dal programma?