OII e Pseudocodice


30-11-2012 – 20

Per descrivere un algoritmo, possiamo utilizzare uno pseudo-linguaggio di programmazione, dove il simbolo ← rappresenta l’istruzione che impone di assegnare al nome simbolico che lo precede il valore calcolato dall’espressione che lo segue.

Per esempio: i ← i+1 significa incrementa di 1 il valore associato al nome simbolico i e associa a i il valore incrementato.
Se a i era associato il valore 5, dopo l’esecuzione dell’istruzione a i sarà associato il valore 6.

In questa ipotesi, scegliere la condizione e la istruzione mancanti nel seguente algoritmo in modo che scriva su video il quadrato s di un numero intero n ≥ 0 letto da tastiera:

leggi da tastiera n
s ← 0
i ← 0
x ← 1
finché condizione è vera esegui ripetutamente
   da qui
      s ← s+x
      istruzione
      i ← i+1
   a qui
scrivi su video s
  1. condizione: i < n; istruzione: x ← x+2
  2. condizione: i ≤ n; istruzione: x ← x*2
  3. condizione: x < n; istruzione: x ← x+2
  4. condizione: i ≤ n; istruzione: x ← i*2+1

21-11-2013 – 19

Per descrivere un algoritmo, possiamo utilizzare uno pseudo-linguaggio di programmazione, dove il simbolo ← rappresenta l’istruzione che impone di “assegnare al nome simbolico che lo precede il valore calcolato dall’espressione che lo segue” (per esempio: I ← I+1 significa “incrementa di 1 il valore associato al nome simbolico I e associa a I il valore incrementato”.
Se a I era associato il valore 5, dopo l’esecuzione 12 dell’istruzione a I sarà associato il valore 6).

In questa ipotesi, scegliere la condizione e la istruzione mancanti nel seguente algoritmo in modo che scriva su video il fattoriale s = n! di un numero intero n ≥ 0 letto da tastiera (si ricordi che n! = 1×2×3…×n e che 0! = 1):

leggi da tastiera n
s ← 1
i ← 0
x ← 1
finché condizione è vera esegui ripetutamente
   da qui
      s ← s×x
      istruzione
      i ← i+1
   a qui
scrivi su video s
  1. condizione: i < n; istruzione: x ← x+1
  2. condizione: i ≤ n; istruzione: x ← x+1
  3. condizione: i < n; istruzione: x ← x+i
  4. condizione: i ≤ n; istruzione: x ← x+i.


13-11-2014 – 14

Per descrivere un algoritmo, possiamo utilizzare uno pseudo-linguaggio di programmazione, dove il simbolo ← rappresenta l’istruzione che impone di “assegnare al nome simbolico che lo precede il valore calcolato dall’espressione che lo segue” (per esempio: x ← x + 1 significa “incrementa di 1 il valore associato al nome simbolico x e associa a x il valore incrementato”.
Se a x era associato il valore 5, dopo l’esecuzione dell’istruzione a x sarà associato il valore 6).

In questa ipotesi, scegliere la “condizione1” e la “condizione2” mancanti nel seguente algoritmo in modo che risolva nel minor tempo possibile la verifica del fatto che un numero intero n >= 0 letto da tastiera sia primo oppure no:

leggi da tastiera n
p ← VERO
i ← 2
finché "condizione1" AND "condizione2" è vera esegui ripetutamente
   da qui
      r ← resto di n diviso i
      se (r = 0) allora p ← FALSO
      i ← i + 1
   a qui
scrivi su video
   se (p è VERO) “Il numero n è primo” 
   altrimenti “Il numero n non è primo”
  1. condizione1: ; condizione 2: p FALSO
  2. condizione1: ; condizione 2: p VERO
  3. condizione1: ; condizione 2: p FALSO
  4. condizione1: ; condizione 2: p VERO


18-11-2015 – 16

Per descrivere un algoritmo, possiamo utilizzare uno pseudo-linguaggio di programmazione, dove il simbolo ← rappresenta l’istruzione che impone di “assegnare al nome simbolico che lo precede il valore calcolato dall’espressione che lo segue” (per esempio: i ← i + 1 significa “incrementa di 1 il valore associato al nome simbolico i e associa ad i il valore incrementato”.
Se ad i era associato il valore 5, dopo l’esecuzione dell’istruzione ad i sarà associato il valore 6).

Si consideri il seguente algoritmo

testa ← 0
croce ← 1
t_consecutivi ← 0
c_consecutivi ← 0
i ← 0
mentre "condizione" è vera esegui ripetutamente
   da qui
      x ← esito_lancio_moneta
      se x=testa esegui
         da qui
            t_consecutivi ← t_consecutivi + 1
            c_consecutivi ← 0
         a qui
     altrimenti esegui
         da qui
            t_consecutivi ← 0
            c_consecutivi ← c_consecutivi + 1
         a qui
     "istruzione"
   a qui
scrivi su video i

Scegliere la “condizione” e l’“istruzione” mancanti nell’algoritmo in modo che restituisca il minimo numero di lanci di moneta che sono stati necessari per ottenere una sequenza di almeno cinque esiti consecutivi uguali.

  1. condizione: t_consecutivi < 5 AND c_consecutivi < 5; istruzione: i ← i + 1
  2. condizione: t_consecutivi < 5 AND c_consecutivi < 5; istruzione: testa ← testa + 1
  3. condizione: t_consecutivi ≤ 5 AND c_consecutivi ≤ 5; istruzione: i ← i + 1
  4. condizione: t_consecutivi < 5 AND c_consecutivi ≤ 5; istruzione: i ← i + 1


17-11-2016 – 16

Per descrivere un algoritmo, possiamo utilizzare uno pseudo-linguaggio di programmazione, dove il simbolo ← rappresenta l’istruzione che impone di “assegnare al nome simbolico che lo precede il valore calcolato dall’espressione che lo segue” (per esempio: i ← i + 1 significa “incrementa di 1 il valore associato al nome simbolico i e associa a i il valore incrementato”.
Se a i era associato il valore 5, dopo l’esecuzione dell’istruzione a i sarà associato il valore 6).

Si consideri il seguente algoritmo

a ← 0
b ← 0
finché a ‹ 10 esegui ripetutamente
da qui
   a ← intero letto da input
   b ← intero letto da input
   se a=b esegui a ← 0
   scrivi su video a
   scrivi su video b
a qui
scrivi su video a + b

Supponiamo che un utente scriva a video i seguenti numeri 1 1 2 2 9 9 10 10 12 13 quale di queste alternative descrive correttamente cosa fa il programma?

  1. 0 1 0 2 0 9 0 10 12 13 25
  2. 1 1 2 2 9 9 10 10 12 13
  3. 0 1 0 2 0 9 0 10 12 13
  4. 0 1 0 2 0 9 0 10 10


16-11-2017 – 6

function FUN(p: integer) → integer
   output p, " -› "
   if p MOD 2 = 0 then
      output "condizione 1"
   end if
   if p = 7 then
      output "condizione 2"
   else
      if (p-5) MOD 2 = 0 then
         output "condizione 3"
      end if
   end if
   return p
end function

Quale delle seguenti affermazioni è errata?

  1. La funzione, se p è pari, scrive a video il valore di p seguito dalla stringa -> condizione 1 e restituisce p
  2. La funzione, se p non è dispari, scrive a video il valore di p seguito dalla stringa -> condizione 2 e restituisce p
  3. La funzione, se p è 7, scrive a video il valore di p seguito dalla stringa -> condizione 2 e restituisce p
  4. La funzione, se p è dispari, scrive a video p seguito dalla stringa -> condizione 2 o -> condizione 3 e restituisce p

Tradotto nel nuovo pseudocodice


16-11-2017 – 7

variable x: integer
variable y: integer
variable a: integer
variable p: integer
variable l: float
variable d: float
x ← 20
y ← 10
a ← x × y
p ← 2 × x + 2 × y
l ← p/4
d ← RADICEQUADRATA(2) × l
output d, " cm"
if d × 2 - 720 = 0 then
   d ← 2
else
   d ← 1
end if

Cosa viene visualizzato a video dalla esecuzione del programma qui sopra?

  1. 2.000000 cm
  2. 3.000000 cm
  3. 21.213203 cm
  4. 36.243204 cm

Tradotto nel nuovo pseudocodice


16-11-2017 – 8

function MYSTER(c: integer, d: integer) → integer
   if c = d then
      return c
   end if
   if c › d then
      return MYSTER(c-d, d)
   end if
   return MYSTER(c, d-c)
end function

function MCM(a: integer, b: integer) → integer
   return MYSTER(b, a)
end function

Quale delle seguenti modifiche fa sì che la funzione mcm ritorni il minimo comune multiplo tra a e b?

  1. sostituire MYSTER(b, a) con MYSTER(a, b)
  2. sostituire MYSTER(b, a) con (a × b)/MYSTER(b, a)
  3. sostituire MYSTER(b, a) con MYSTER(a-b, b)
  4. sostituire MYSTER(b, a) con MYSTER(a, b-a)

Tradotto nel nuovo pseudocodice


15-11-2018 – 6

Dato il seguente pseudocodice

variable conta: integer
variable alfa: integer
variable beta: integer
conta ← 0
alfa ← 0
beta ← 0
while conta ‹ 29 do
   if conta MOD 3 = 1 then
      alfa ← alfa+2
   else
      beta ← beta–1
   end if
   conta ← conta+2
end while

calcolare il numero di volte per cui viene eseguito il ciclo while.

15


15-11-2018 – 7

Data la seguente funzione, dove N è la dimensione dell’array a:

function F(a: integer[N], N: integer) → integer
   variable palo: integer
   variable dado: integer
   palo ← -1
   dado ← -1
   i ← 1
   while i ≤ N do
      if a[i] MOD 2 = 0 then
         if a[i] › palo then
            palo ← a[i]
         else
            if a[i] › dado then
               dado ← a[i]
            end if
         end if
      end if
      i ← i+1
   end while
   return palo+dado
end function

indicare quale tra le seguenti affermazioni è FALSA:

  1. La funzione F restituisce 21 se riceve in ingresso l’array {1, 2, 6, 10, 22}
  2. La funzione F restituisce la massima somma di due elementi dell’array
  3. La funzione F restituisce numeri sia pari sia dispari
  4. La funzione F non può restituire valori inferiori a -2


15-11-2018 – 9

Date le seguenti due funzioni:

function MISTERY(a: integer, b: integer) → integer
   if 2×a › b then
      return b
   else
      return a
   end if
end function

function SECRET(a: integer, b: integer) → integer
   if a+b › MISTERY(a, b) then
      return a
   else
      return MISTERY(a, b)
   end if
end function

indicare quale valore viene restituito dalla chiamata SECRET(24, 3).

24


15-11-2018 – 10

Dato il seguente pseudocodice:

function FUN(fiore: integer, farfalla: integer) → integer
   if fiore = farfalla then
      return farfalla
   else
      if farfalla › fiore then
         return FUN(farfalla–fiore, fiore)
      else
         return FUN(farfalla, farfalla-fiore)
      end if
   end if   
end function

Cosa si può dire della funzione fun?

  1. Non termina per alcun valore della coppia: (fiore, farfalla)
  2. Non termina soltanto quando: fiore = farfalla
  3. Termina sicuramente quando: fiore = farfalla
  4. Termina per ogni valore in cui: farfalla > fiore


15-11-2018 – 11

Si considerino le seguenti due funzioni, che prendono in ingresso un numero intero maggiore o uguale a zero:

fuction EFFE(a: integer) → integer
   if a ‹ 2 then
      return 2×a
   else
      return GI(a–1)+GI(a–2)
   end if
end function

fuction GI(a: integer): integer
   if a ‹ 2 then
      return EFFE(a)
   else
      return EFFE(a–1)+EFFE(a-2)
   end if
end function

Indicare quale valore RES viene restituito dalla chiamata EFFE(10).

110


15-11-2018 – 12

Data la seguente funzione:

function CALC(n: integer) → integer
   if n = 1 then
      return 2
   else
      return 2×n–1+CALC(n–1)
   end if
end function

indicare quale tra le seguenti espressioni è il valore che viene restituito se n ≥ 1

  1. (n+1)²
  2. (n-1)²
  3. n²+1


20-11-2019 – 6

Data la seguente funzione

indicare l’affermazione vera tra le seguenti

  1. Questa funzione ritorna 1 solo se la coppia (par1,par2) si trova nel cerchio di raggio par3
  2. Questa funzione ritorna 1 se chiamata sulla terna (1,0,3)
  3. Questa funzione ritorna 0 per tutte le terne della forma (a,2*a,3*a)
  4. Questa funzione deve essere chiamata con par3 >= 0


20-11-2019 – 7

Dato il seguente programma

Come cambia il vettore v=(3.45, 5.67, 8.92, 2.12, 7.33, 8.21, 4.21, 9.03) quando viene dato in input alla procedura insieme all’intero n=8?

  1. [3.0, 6.0, 8.0, 3.0, 7.0, 9.0, 4.0, 10.0]
  2. [3.0, 6.0, 7.0, 3.0, 8.0, 9.0, 5.0, 10.0]
  3. [3.0, 6.0, 7.0, 3.0, 9.0, 9.0, 6.0, 10.0]
  4. [3.0, 6.0, 8.0, 3.0, 10.0, 9.0, 7.0, 10.0]


20-11-2019 – 8

Cosa scrive a video il seguente programma

  1. Lo array dopo l’esecuzione di pp vale 0 0 0 0 0 0 0 0 0 0
  2. Lo array dopo l’esecuzione di pp vale 6.25 6.25 6.25 6.25 6.25 6.25 6.25 0 0 0
  3. Lo array dopo l’esecuzione di pp vale 6.25 6.25 6.25 6.25 6.25 0 0 0 0 0
  4. Lo array dopo l’esecuzione di pp vale 0 0 0 0 0 6.25 6.25 6.25 6.25 6.25


20-11-2019 – 9

Si consideri la seguente procedura

Quale disposizione di asterischi viene stampata a schermo tra le seguenti?

  *
 ***
  *
 ***
  *
 *
* *
***
* *
 *
 *
***
***
***
 *
 *
* *
 *
* *
 *


20-11-2019 – 10

Dato il seguente programma

Scegliere quella corretta fra le seguenti opzioni:

  1. Il programma stampa p1 = 40.00, p2 = 35.71
  2. Il programma stampa il rapporto, in percentuale, degli elementi appartenenti all’intersezione dei due insiemi (v e w) sul totale degli elementi rispettivamente del primo e del secondo insieme
  3. Il programma stampa il rapporto, in percentuale, degli elementi appartenenti all’unione dei due insiemi sul totale degli elementi rispettivamente del primo (v) e del secondo insieme (w)
  4. Il programma stampa p1=200.00, p2=120.71


20-11-2019 – 11

Date le seguenti funzioni ricorsive

Si supponga di eseguire rec1(4,6).
Quante chiamate rispettivamente di REC1 (NUMREC1) e REC2 (NUMREC2) sono necessarie prima che una delle due funzioni restituisca il valore zero?
Nelle chiamate di rec1 contare anche la chiamata iniziale REC1(4,6).

NUMREC1=2
NUMREC2=2


20-11-2019 – 12

Un file di testo conteneva due diverse funzioni per il calcolo del numero di modi diversi in cui è possibile ordinare n oggetti.
Le linee dello pseudocodice sono state accidentalmente disordinate, come riportato qui sotto.

Per ricostruire l’ordinamento corretto delle linee di codice è necessario produrre una lista di coppie (LETT, NUM), in cui LETT corrisponde alla lettera che identifica una riga, come indicato sopra e NUM corrisponde al numero che tale riga avrebbe nell’ordinamento corretto (nota: i numeri di riga partono da 1), come indicato nella seguente griglia, in cui alcuni numeri sono già stati inseriti:

A  B  C  D  E  F  G  H  I  L  M  N  O  P  Q  R  S  T  U  V
   2  3  4     6        9 12 11    13    16       18    20

Si chiede quindi di riportare i numeri corretti associati alle lettere A, E, G, H, N, P, R, S e U che completino correttamente la suddetta griglia.

A=10 E=7 G=1 H=5 N=8 P=15 R=14 S=17 U=19
A=10 E=1 G=7 H=5 N=8 P=15 R=14 S=17 U=19


23-02-2021 – 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?


23-02-2021 – 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?


23-02-2021 – 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?


23-02-2021 – 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?


23-02-2021 – 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?

Soluzione: 3


23-02-2021 – 7