Compito di Programmazione∗
23/06/2011
1. (Punti 2) Convertire in binario ed esadecimale i seguenti numeri:
• 452 su 16 bit.
• -365 su 16 bit in complemento a 2.
• 0.45 in notazione IEEE 754
Si ricorda allo studente che la notazione IEEE 754 (in precisione semplice) prevede l’uso di 32 bit (dal più
significativo): 1 bit di segno, 8 bit per l’esponente in notazione in eccesso (a 127) e 23 bit di mantissa. In forma
normalizzata il valore 1.0 è rappresentato in forma implicita (non appare quindi nella rappresentazione), quindi
il bit 23 parte con valore pari a 1/2.
2. (Punti 5) La sequenza autodefinente di Solomon-Golomb è l’unica sequenza monotona non
decrescente di interi positivi a = ai tale che in a ci sono esattamente ai elementi di valore i con
i ≥ 1. Per chiarire questo è un segmento iniziale della sequenza:
1223344455566667777888899999 ...
quindi ad esempio vi sono a9 = 5 elementi consecutivi pari a 9.
• Scrivere una funzione con prototipo: void generate(int v[], int n) che dato un intero n ed un vettore v (con numero di elementi ≥ n) riempie v con i primi n elementi della
successione.
• Scrivere un programma completo che utilizzando la funzione generate e quante altre lo studente ritiene utili, legge dalla linea di comando la matricola del candidato m, calcola n =
la radice quadrata approssimata per difetto delle ultime 5 cifre della matricola aumentata
di 16, costruisce una matrice 4x4 con i valori:
an
an−4
an−8
an−12
an−1
an−5
an−9
an−13
an−2
an−6
an−10
an−14
an−3
an−7
an−11
an−15
e stampa: la matrice e la somma dei quadrati degli elementi diagonali.
∗
Lo studente ha 3 ore per completare tutti gli esercizi, il voto complessivo varia in [0,16] a cui andranno aggiunti
8+8 punti per il progetto+orale.
1
3. (Punti 5) Un grafo G = (V, E) è una rappresentazione semplice di una relazione binaria,
V = 1, ....n sono i nodi, e E ⊆ V × V sono gli archi, se (i, j) ∈ E i vertici i e j si dicono
adiacenti. Un file ”grafo.txt” contiene la rappresentazione di un grafo secondo questo formato:
n
...
i j1 j2 jk
...
dove la prima riga contiene n il numero di vertici del grafo, e per ogni vertice i vi è una riga con
i seguito dall’elenco dei vertici adiacenti ad i (nell’esempio gli archi (i, j1 ), (i, j2 ), . . . , (ik , jk )).
• Definire un’appropriata struttura dati per rappresentare il grafo.
• Scrivere una funzione ReadGraph che legge un file con il formato indicato nella struttura
dati da voi definita.
• Colora il grafo con due colori (bianco,nero), in modo che ogni nodo sia adiacente a nodi
di colore opposto. Per far questo, si può usare un metodo di questo tipo: consideriamo
un nodo qualunque, lo coloriamo di bianco, i suoi vicini devono allora essere colorati di
nero, i vicini dei vicini (non ancora colorati) di bianco..etc.etc. fin quando tutti i nodi
sono colorati.
4. (Punti 4) Considerate la seguente struttura:
typedef struct r {
char nome[20];
char cognome[20];
int matricola;
int voto;
} studente;
• Scrivere un tipo di dato lista bidirezionale, in cui ogni elemento della lista è uno
studente ed è collegato sia al successore che al predecessore.
• Dato un file binario che contiene una sequenza di strutture di tipo studente (non ordinate),
scrivere una funzione che legge i record dal file e li inserisce in una lista bidirezionale
ordinata per il campo matricola (crescente o decrescente non importa).
• Scrivere un programma che prende un nome di file tra gli argomenti in linea di comando,
legge il file, costruisce la lista ordinata, e chiede ripetutamente all’utente di indicare uno
studente per matricola, lo cerca nella lista e se lo trova stampa il voto attuale e chiede
all’utente di inserire un nuovo voto, se il nuovo voto è diverso dal precedente, aggiorna
la lista e aggiorna il file. Potete inserire nella lista altre informazioni se necessario per
svolgere in modo efficiente quest’ultima operazione.
• Qual’è la complessità dell’operazione precedente? Esistono strutture dati che consentono
di risolvere lo stesso problema con complessità asintotica migliore?
Gli studenti, possono se lo desiderano, inviare entro le 24:00 di oggi, solo per gli esercizi 2,3,4, una
versione elettronica con eventuali correzioni rispetto all’elaborato presentato. Tali versioni DEVNO
essere perfettamente compilabili, e saranno valutate insieme alla versione cartacea.
2