Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Domanda 1 (2 punti ). Quali tra le seguenti codifiche per numeri interi consente, a parità di bit, di rappresentare un
intervallo più ampio di valori?
Modulo e segno;
complemento a uno;
complemento a due;
le tre codifiche consentono di rappresentare lo stesso intervallo.
Domanda 3 (2 punti ). Per una lista concatenata con collegamento singolo, quale operazione di inserimento ha comples-
sità inferiore?
Inserimento in testa;
inserimento in una posizione centrale;
inserimento in coda;
la complessità è la stessa per le tre operazioni elencate.
Domanda 4 (3 punti ). Effetturare le seguenti conversioni tra rappresentazioni binarie in modulo e segno (·)M S e
complemento a due (·)C2 . In tutti i casi si usino esattamente 6 bit.
(101101)M S =
C2
(010011)M S =
C2
= 101101)C2
MS
= 001101)C2
MS
Domanda 5 (4 punti ). Progettare una rete logica con ingressi x, y, z che calcoli il risultato F della seguente espressione
booleana:
+ → OR,
· → AN D,
F = (x + z) + x · z + x · y · z,
⊕ → XOR,
x → N OT x.
Prima di procedere con la progettazione della rete, si semplifichi l’espressione in modo che richieda il minor numero
possibile di porte logiche.
Espressione semplificata : F =
(i)
(ii)
(iii)
Domanda 7 (6 punti ). Determinare i valori stampati nel corso dell’esecuzione del programma seguente:
# include < stdio .h >
int g ( int u )
{
int v = 2;
f (& u , & v );
v = 2;
f (& u , & v );
return u + v ;
}
int main ()
{
int a = 1;
int b = 3;
int * c ;
c = &a;
f (& b , c );
printf ( " % d % d % d \ n " , a , b , * c ); /* (i) */
a = g ( b );
printf ( " % d % d % d \ n " , a , b , * c ); /* ( ii ) */
return 0;
}
(i)
(ii)
Domanda 8 (7 punti ). Senza fare uso di funzioni di libreria, scrivere una funzione C che, dato un array di numeri interi
con valori tra 1 e 100, restituisca l’ampiezza del più grande intervallo di valori (sempre tra 1 e 100) in cui non compare
nessuno degli elementi.
Ad esempio, nel caso dell’array
int v [9] = {42 , 21 , 87 , 96 , 29 , 73 , 76 , 87 , 50};
la funzione dovrà restituire il valore 22. Infatti l’intervallo 51–72 contiene esattamente 22 elementi, nessuno dei quali
appare in v. Tutti gli altri intervalli vuoti sono più piccoli, inclusi quegli agli estremi, che vanno comunque considerati
(1–20 e 97-100 per l’array di esempio).
L’intestazione della funzione dovrà essere la seguente:
int in te rv al lo_ ma ss im o ( int *v , int n )
{
/* ... */
}
dove n rappresenta il numero di elementi dell’array v.
Dopo aver scritto la funzione, se ne determini la complessità asintotica in tempo nel caso peggiore, espressa come numero
di operazioni sugli elementi di v e in funzione della sua lunghezza.
Note
• Non è consentito l’uso di calcolatrici, appunti o testi di alcun genere;
• alle domande a risposta multipla corrisponde una e una sola risposta esatta;
• le risposte vanno riportate nello spazio predisposto in coda alla rispettive domande;
• oltre a questo documento non verranno ritirati altri fogli.