Appello 24 Luglio 2014 Fila A

Esame di Fondamenti di Informatica, CdL Ing. Meccanica A.A. 2013/2014
Docente: Prof. Ivan Bruno
Appello: 24 Luglio 2014
N. compito _A _
Matricola
Cognome:
Nome:
.
Nota: negli esercizi 1, 2, 3 cerchiare la risposta Rn che si ritiene corretta; la risposta errata
comporta 0 punti per l’esercizio. Viene richiesto espressamente lo svolgimento di tutti i passaggi e
non solo il risultato. Nel testo degli esercizi i valori C,N,M corrispondono rispettivamente ai
seguenti valori: codifica ASCII delle prime lettere di Cognome e Nome (maiuscole) e prima cifra
≠0 della Matricola a partire da destra. La codifica ASCII è ottenibile in decimale sommando 64
alla posizione della lettera nell’alfabeto di 26 lettere (A=65,Z=90).
1. (Punti 3) Quanti bit di indirizzo servono per accedere ad uno spazio di memoria di 1Gbyte dove
la cella di memoria è di 8 bit?
Soluz: L’indirizzamento complessivo deve numerare 2Gbyte/8bit, ovvero con 1byte=8bit un
numero di celle pari a 1G, quindi per un totale di 1*230 = 20*230 = 230. In totale occorrono 30bit.
Risposta:
R1)
12 bit
R2)
21 bit
R3)
28 bit
R4)
30 bit
R5)
31 bit
R6)
32 bit
R7)
Nessuna risposta valida
2. (Punti 3) Si consideri il seguente frammento di codice:
char* p = myFunction(“funzione”);
Quale fra i seguenti è il prototipo più adatto per la funzione myFunction:
Risposta:
R1) int myFunction ( char& );
R2) char *myFunction ( char& );
R3) char myFunction ( char );
R4) char *myFunction ( char* );
R5) void myFunction ( char* );
R6) Nessuna risposta valida
3. (Punti 3) A quale classe appartiene la complessità asintotica dell’algoritmo Merge Sort:
Risposta:
R1) Θ(n2)
R2) Θ(log2 n)
R3) Θ(n log2 n)
R4) Θ(1)
R5) Nessuna risposta valida
1
4. (Punti 6) Rappresentare in virgola mobile a 16 bit [S C M], usando un bit di segno, 5 bit per la
caratteristica e 10 bit per la mantissa, i seguenti numeri decimali: X=(40*M)/N e Y=(N*20)/C.
Effettuare quindi l’operazione di somma X+Y in virgola mobile e codificare tutta la
rappresentazione in una stringa esadecimale. Valutare l’errore assoluto e percentuale rispetto al
valore ottenuto dalla somma. (si veda file delle soluzioni)
Risposte:
X=
([…]s [……………]c [………………………………]m)2
Y=
([…]s [……………]c [………………………………]m)2
X+Y = ([…]s [……………]c [………………………………]m)2 = (…………)16
EAX+Y = …………. E%X+Y = …………%
5. (Punti 6) Effettuare l’operazione (A-B) AND X con A=(C+2*M), B=(2*N-M) e X=(0x00F0)16
utilizzando la forma complemento a 2 a 16 bit. Scrivere i valori binari di A e B, il risultato (AB) binario e la codifica in base 16, e il valore in base 16 dell’operazione data. (Nota: C e N sono
la codifica ASCII delle prime lettere di Cognome e Nome maiuscole, M prima cifra da destra
!=0 della matricola) ((si veda file delle soluzioni)
si veda file delle soluzioni)
Risposte:
A = (……….........……......………)2
B = (……….........……......………)2
A-B = (……….........……......………)2 = ( __ __ __ __ )16
(A-B) AND X = ( __ __ __ __ )16
6. (Punti 5) Valutare il comportamento della seguente funzione in linguaggio C assumendo i
vettori V e W di dimensione N=5 e di numeri interi così definiti:
V = {2, 4M, 1, 8M, 2} e W={2M, 1, M, 1, 2M }
Scrivere il vettore V e il valore della variabile s al termine di questo algoritmo. (Nota: M prima
cifra da destra !=0 della matricola) (si veda file delle soluzioni)
int funz(
int
int
for
int* V, int* W, int N ){
i, tmp;
s = *V;
(i=0; i<N; i++){
tmp = *(V+i)* W[i];
s = s + tmp;
if(s%3!=0)
V[i]=s;
else
V[i]=W[i];
}
return s;
}
2
Risposta:
V={______________________}
s=_____
7. (Punti 5) Si valuti il comportamento del seguente frammento di codice assembly:
loop:
addi
mul
lw
mul
sw
addi
bne
add
$1,
$9,
$4,
$6,
$6,
$7,
$7,
$8,
$0, $10
$19, $7
1024($9)
$4, $1
1024($9)
$7, 1
$5, loop
$0, $7
Si assuma il seguente stato dei registri e della memoria prima dell’esecuzione del blocco di
istruzioni:
a. Registri:
$19  4
$10  2*M $5  10
$4  0
$6  0
$7 0
b. Memoria: a partire alla locazione di memoria 1024, espressa in base dieci, sono
memorizzati a 32 bit i seguenti valori espressi in esadecimale a 2 byte (la parte superiore
è nulla):
0.
1.
2.
3.
4.
5.
6.
7.
8.
9.
0x0008 0x0010 0x0011 0x0012 0x0013 0x0014 0x0015 0x0016 0x0017 0x0018
Si calcolino le modifiche effettuate in memoria a partire alla locazione di memoria, riportando
in base 16 i valori scritti durante l’esecuzione. (Nota: M prima cifra da destra !=0 della matricola)
(si veda file delle soluzioni)
Risposta:
0.
1.
2.
3.
4.
5.
6.
7.
8.
9.
0x0008 0x0010 0x0011 0x0012 0x0013 0x0014 0x0015 0x0016 0x0017 0x0018
3