fino alla edizione 2017/18 gli esercizi di programmazione erano presentati in linguaggio C/C++ e Pascal; dalla edizione 2018/19 gli esercizi di programmazione sono scritti in pseudocodice, al fine di valutare la capacità di comprendere codice a prescindere dalla conoscenza di uno specifico linguaggio; le forme sintattiche sono intuitive, ma in ogni caso è possibile consultare la guida allegata.
esempio 1
1: funzione mystery(a:intero, b: intero): intero
2: se (2*a) > b allora
3: restituisci b;
4: altrimenti
5: restituisci a;
6: fine se
7: fine funzione
8:
9: funzione secret(a: intero, b: intero): intero
10: se (a+b) > mystery(a.b) allora
11: restituisci a;
12: altrimenti
13: restituisci mystery(a,b);
14: fine se
15:fine funzione
indicare quale valore viene restituito dalla chiamata secret(24,3)
risposta 24
spiegazione:
si tratta della chiamata di una funzione che parametri in ingresso interi e che ritorna un intero, che a sua volta chiama un'altra funzione, con parametri interi e che ritorna un intero.
alla chiamata secret(24,3) vengono assegnati a=24 e b=3- riga 9
inizia l'esecuzione di secret e all'interno viene eseguito il confronto se (24+3) > mystery(24,3) -riga 10
per completare il confronto viene chiamata la funzione mystery assegnando a=24 e b=3- riga 1
inizia l'esecuzione di mystery con il confronto (2*24)>3 che dà valore vero e quindi la funzione restituisce 3- righe 2 e 3
a questo punto possibile completare l'esecuzione del confronto in secret: (24+3)>3 che dà valore vero e quindi restituisce 24- riga 10
esempio 2
dato il seguente pseudocodice:
1: funzione fun(fiore: intero, farfalla: intero): intero
2: se fiore=farfalla allora
3: restituisci farfalla;
4: altrimenti
5: se farfalla>fiore allora
6: restituisci fun(farfalla-fiore, fiore);
7: altrimenti
8: restituisci fun(farfalla, farfalla - fiore);
9: fine se
10: fine se
11: fine funzione
cosa si può dire della funzione fun?
a) non termina per alcun valore della coppia: (fiore, farfalla)
b) non termina soltanto quando: fiore= farfalla
c) termina sicuramente quando: fiore=farfalla
d) termina per ogni valore in cui: farfalla > fiore
risposta corretta: c
spiegazione:
si tratta di una funzione ricorsiva; una funzione ricorsiva termina quando c'è un condizione di terminazione.
nella funzione fun, la riga 2 (se fiore=farfalla) è il controllo che, quando vero, fa terminare l'esecuzione perché fa uscire il valore di farfalla (ricorda: "restituisci" blocca l'esecuzione di una funzione, rimandando il controllo al "chiamante"), quindi l'unica scelta possibile è la c!
N.B. normalmente per comprendere l'esecuzione di una funzione ricorsiva è bene costruire un albero delle chiamate con i valori assegnati ai parametri, ma qui è del tutto inutile! è sufficiente soffermarsi un attimo sulla lettura del codice confrontandolo con le alternative delle risposte