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