• Non ci sono risultati.

[ ] il risultato è indefinito [ ] i = 6 [ ] i = 8 [ ] i = 10

N/A
N/A
Protected

Academic year: 2021

Condividi "[ ] il risultato è indefinito [ ] i = 6 [ ] i = 8 [ ] i = 10"

Copied!
2
0
0

Testo completo

(1)

Università degli Studi di Udine

Corsi di laurea in Ing. Elettronica Gestionale Fondamenti di programmazione

13 novembre 2015 - Prova intermedia

Matricola ____________________________

Nome ____________________________

Cognome ____________________________

Aula ____ Fila (dalla cattedra) ____ Posto (dalla porta) ___

Esercizio 1 (3 punti)

La funzione riempi_sottocubo legge da tastiera i valori con cui inizializzare una porzione cubica di un vettore tridimensionale di interi di dimensioni 10x10x10. La fuzione restituisce le coordinate del vertice e la lunghezza del lato del sottocubo inizializzato.

Si scriva il prototipo di tale funzione e un esempio di chiamata completando il codice seguente.

/* prototipo */

_________ riempi_sottocubo (__________

_________________________________);

/* chiamata */

int x_vertice, y_vertice, z_vertice, lato;

int c[10][10][10];

lato=__________________________________

___________________________________);

Esercizio 2 (1 punto)

Dovete chiamare la funzione swap per scambiare gli elementi v[i] e v[i+1] del vettore v. Indicare la o le istruzioni corrette:

[ ] swap (v[i], v[i+1]);

[ ] swap (&(v+i), &(v+1));

[ ] swap (&v[i], &v[i+1]);

[ ] swap (*v[i], *v[i+1]);

[ ] swap (*(v+i), *(v+1));

Esercizio 3 (1 punto)

Che risultato si ottiene al termine dell’esecuzione del seguente frammento

di codice?

i = 2;

i += i*++i;

Esercizio 4 (4 punti)

Un vettore contiene i valori delle monete utilizzate in una data valuta (per esempio, per l’euro, espressi in centesimi:

int valore[]={1,2,5,10,20,50,100,200}). Si assuma che i valori in tale vettore siano già ordinati in ordine crescente.

La funzione componi_importo stampa la quantità di ciascuna moneta necessaria per comporre un certo importo, utilizzando monete i cui valori disponibili sono passati in un vettore del tipo sopra descritto, insieme alla sua dimensione.

L’algoritmo utilizzato riduce l’importo residuo da comporre utilizzando i valori delle monete disponibili a partire dal massimo e passando alle monete di valore inferiore quando l’importo residuo risulta minore della moneta attualmente considerata.

Si completi la funzione componi_importo e si risponda alle domande riportate nel seguito.

void componi_importo

(int importo, int valore[], int n) {

int i, importo_residuo, conta_monete;

importo_residuo = importo;

conta_monete = 0;

i = n-1;

while (_________________ > 0 && i >= 0) {

if (______________________ >= valore[i]) {

___________________ -= ____________;

_______________++;

} else {

printf ("%d da %d\n",

conta_monete, valore[i]);

______--;

___________________ = 0;

} }

printf ("%d da %d\n",

conta_monete, valore[i]);

if (importo_residuo > 0)

printf ("resto %d\n", importo_residuo);

return;

}

La condizione valore[0] > 1 è necessaria o sufficiente affinché venga stampato un resto? ________________

La condizione valore[0] == 1 è necessaria o sufficiente affinché non venga stampato un resto?

_________________

Esercizio 5 (3 punti)

La funzione ricorsiva int fibonacci_r (int n) restituisce Fn, cioè il

termine n-esimo della successione di Fibonacci (la cui definizione è riportata nel riqudro). La si completi.

int fibonacci_r (int n) {

if ___________

____________

if ____________

_____________

return _____________________________;

}

 

 

2 1

1 0

1 0

n n n n

F F F F F f [ ] il risultato è indefinito

[ ] i = 6

[ ] i = 8

[ ] i = 10

(2)

Esercizio 6 (2 punti)

Cosa stampa la seguente funzione?

void fC (void) {

int i = 4;

char s[16] = "testodiprova";

s[i++] = s[7];

s[2 * --i] = '\0';

printf ("%s", s);

return;

}

_________________________

Esercizio 7 (5 punti)

Si scriva la funzione prima_mutipli_di_tre_poi_altri che riceve come argomenti un vettore di interi e la sua dimensione e sposta nel vettore tutti i numeri multipli di tre prima degli altri. Non è consentito utilizzare un vettore temporaneo.

Suggerimento: si utilizzi una versione modificata dell’algoritmo bubblesort in cui lo scambio avviene se l’elemento corrente del vettore è positivo o nullo e quello successivo è negativo. Si assuma già disponibile la funzione void swap (int *pa, int *pb).

Esempio: { 5, 3, -8, 0, 1, 6, 7, 9, 0, -1, -7, 0, -4} → { 3, 0, 6, 9, 0, 0, 5, -8, 1, 7, -1, -7, -4 }

(svolgere sul retro)

Esercizio 8 (4 punti)

Si scriva la funzione prossimo_anno_bisestile che restituisce il primo anno bisestile successivo a quello passato come argomento. Si ricorda che un anno è bisestile se divisibile per 4 ma non per 100, oppure per 400.

(svolgere sul retro)

Esercizio 9 (4 punti)

La funzione int fibo_plus_plus (int n) calcola il termine di indice n di una variante della successione di Fibonacci, definita come indicato nel riquadro. Si assuma che la funzione sia sempre

chiamata con n ≥ N.

In pratica, per i primi N valori è sufficiente memorizzare in un vettore di dimensione N gli indici degli elementi del vettore stesso, per i successivi è necessario

calcolare la somma del contenuto del vettore e, successivamente, scalarne gli elementi di una posizione rimpiazzando l’ultimo con il valore della successione appena calcolato.

Nell’implementazione riportata nel seguito alcune istruzioni sono presentate in più versioni. Si indichi quali sono quelle corrette.

#define N 20

int fibo_plus_plus (int n) {

int i, cnt, f, v[n];

/* inizializza il vettore */

for (i = 0; i <= N; i++) v[i]=i;

for (cnt = N; cnt <= n; cnt++) {

f = somma_vettore (v[], N);

scala_vettore (v[], N);

v[N-1] = f;

}

return f;

}

void scala_vettore (int v[], int n) {

int i;

for (i = 0; i <= n; i++) v[i-1] = v[i];

return;

}

int somma_vettore (int v[], int n) {

int i, somma = 0;

for (i = 0; i <= n; i++) somma =+ v[i];

return somma;

}

Esercizio 10 (3 punti)

Quanto byte occupano i seguenti dati?

char dato; _____________

char dato[2]; _____________

"ciao" _____________

"" _____________

"0" _____________

"\n" _____________

'0' _____________

'\n' _____________

'\0' _____________

Dato un intero N > 0,

 

 

 

 

altrimenti F

N n se i

F

n

N n i

n N

i

n 1

1

0

Riferimenti

Documenti correlati

L’Euro (€) utilizza le frazioni decimali per le monete di valore inferiore a 1 Euro (cioè meno di un Euro). Scomponi poi il numero decimale

Inoltre, il numero di sacchetti deve essere massimo (come è scritto nel testo…. vuole preparare il maggior numero possibile di sacchetti). Bisogna allora trovare

La funzione componi_importo stampa la quantità di ciascuna moneta necessaria per comporre un certo importo, utilizzando monete i cui valori disponibili sono

La funzione componi_importo stampa la quantità di ciascuna moneta necessaria per comporre un certo importo, utilizzando monete i cui valori disponibili sono

Basandosi su un altro campione con le stesse caratteristiche di quello del Literary Digest e intervistando 3.000 individui, predisse l’errore prima che la rivista pubblicasse i

On the other hand, when comparing the same climate scenario with and without the land cover evolution (i.e., SIM#4.5_D2015 vs. SIM#8.5_LC), we see a decrease in the mean soil

Using these common cell lines, MDP can query NCI60 pharmacological data and CCLE and NCI-60 genomic information to identify drugs correlated to gene mutations (from gene to drug)

The stela I am interested in belongs to a group of documents which are fun- damental ones to reconstruct the history of the national sanctuary of Osiris at Abydos during the