• Non ci sono risultati.

Dato un intero N > 0,

N/A
N/A
Protected

Academic year: 2021

Condividi "Dato un intero N > 0,"

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)

Quanto byte occupano i seguenti dati?

char dato; _____________

char dato[2]; _____________

"" _____________

"\n" _____________

"0" _____________

"ciao" _____________

'0' _____________

'\0' _____________

'\n' _____________

Esercizio 2 (4 punti)

Si scriva la funzione ultimo_anno_bisestile che restituisce l’ultimo anno bisestile precedente 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 3 (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 4 (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;

}

Dato un intero N > 0,

 

 

 

 

altrimenti F

N n se i

F

n

N n i

n N

i

n 1

1

0

(2)

Esercizio 5 (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 6 (2 punti)

Cosa stampa la seguente funzione?

void fD (void) {

int i = 5;

char s[16] = "testodiprova";

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

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

printf ("%s", s);

return;

}

_________________________

Esercizio 7 (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 _____________________________;

}

Esercizio 8 (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+1));

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

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

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

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

Esercizio 9 (1 punto)

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

codice?

i = 3;

i += i*--i;

Esercizio 10 (5 punti)

Si scriva la funzione prima_zeri_poi_altri che riceve come argomenti un vettore di interi e la sua dimensione e sposta nel vettore tutti i valori nulli 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 è diverso da zero e quello successivo è zero. 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} → { 0, 0, 0, 5, 3, -8, 1, 6, 7, 9, -1, -7, -4 }

(svolgere sul retro)

 

 

2 1

1 0

1 0

n n n n

F F F F F f

[ ] il risultato è indefinito [ ] i = 5

[ ] i = 7

[ ] i = 9

Riferimenti

Documenti correlati

parità di energia termica fornita i consumi elettrici rispetto alle normali pompe di calore aria/acqua, ma è in grado di funzionare come macchina termica e frigorifera in

MICROECONOMIA -- Prova intermedia del 12.1.16 DOCENTE: ZAPPIA Tempo a disposizione: 50 minuti - Per le risposte alle domande di tipo A (aperte) utilizzare unicamente lo spazio

Esercizio 11 Utilizzando il teorema dei valori intermedi dimostrare che, se n `e un numero intero positivo, la funzione f (x) = x n definita in [0, +∞) assume tutti i valori

Una dimostrazione si trova, per esempio, nel libro (Teorema 49.3) T. K¨ orner: Fourier Analysis, Cambridge University Press, 1988.. Allora per il punto

Calcolare quindi l'errore relativo nel punto x = 1/2 e determinare il valore di a anchè questo sia

1. Quattro rilevazioni di una certa variabile danno i seguenti risultati: 0, −3, 1, x, dove x ` e un valore incognito.. Si vuole capire quale di due farmaci sia pi` u efficace

• Sia B[k, w] il massimo valore della soluzione ottima S k con peso w (quindi, per i primi k elementi). • L’obiettivo è determinare B[n, W], con n il numero totale di elementi, e

Lo scopo dell’interpolazione CUBIC SPLINE e’ ottenere un formula che abbia derivate prime monotone e derivate seconde continue.. Questa si ottiene sostituendo la precedente