4. Dire cosa calcola la funzione nell'ipotesi che a e b siano sempre positivi e che il programma non generi mai un “overflow” durante le operazioni aritmetiche. Risposte: a) a*b b) a*(b+1) c) (a+1)*(b-1) d) nessuna delle precedenti
5.
6. Ci sono due iterazioni una interna all’altra. La while interna esegue il suo blocco di istruzioni un numero di volte pari a b. Infatti parte da j=0, e arriva a b-1. (j<b) L’istruzione che viene ripetuta per b volte è p=p+j, siccome ad ogni giro j è incrementata di 1, la somma p è del tipo 0+1+2+…+b. Pertanto riconosciamo che si tratta di una serie aritmetica e precisamente è la somma dei primi b numeri interi e la formula è b(b+1)/2. Di conseguenza, ogni qual volta l’iterazione interna termina, calcola un numero pari a b(b+1)/2
7. L’iterazione esterna La while esterna esegue il suo blocco di istruzioni un numero di volte pari ad a; infatti parte da k=1 fino ad k=a (k<=a). Ad ogni giro viene azzerato j, ma non p, e viene eseguita la while interna. Di conseguenza la iterazione interna è eseguita un numero di volte pari ad a. Dal momento che p non viene mai riazzerato, p continua ad accumulare la sua somma parziale. Quindi il valore finale di p è a*b(b+1)/2
8. Il risultato della funzione è : p=a*(b+1)/2 return 2*p/b =2*a(b+1)/2*b=a*(b+1) Quindi la soluzione è la b) a*(b+1)