logo
  • userLoginStatus

Welcome

Our website is made possible by displaying online advertisements to our visitors.
Please disable your ad blocker to continue.

Current View

Mathematical Engineering - Informatica A

Second partial exam

Informatica A – a.a. 0 9/10 – Seconda Prova in Itinere – 09 /02 /20 10 Cognome ________________________________ Matricola _______________________ Nome ________________________________ _______ Istruzioni • Non separate questi fogli. Scr ivete la soluzione solo sui fogli distribuiti , utilizzando il retro delle pagine in caso di necessità. Cancellate le parti di brutta (o ripudiate) con un tratto di penna . • Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione. • È possibile scrivere a matita (e non ricalcare al momento della consegna!). • È vietato utilizzare calcolatrici o telefoni . Chi tenti di farlo vedrà annullata la sua prova. • È ammessa la consultazione di libri e appunti , purché con pacata discrezione e senza disturbare. • Qualsiasi tentativo di comunicare con altri studenti comporta l’espulsione dall’aula. • È possibile ritirarsi senza penalità . • Non è possibile lasciare l’aula conservando il tema della prova in corso. • Tempo a disposizione: 1h :15m per recupero prim a prova + 2 h per seconda prova RECUPERO PRIMA PROVA Esercizio 1.1 ( 6 punti ) __________ Esercizio 1.2 ( 6 punti ) __________ Esercizio 1.3 ( 2 punti ) __________ Totale: ( 14 punti ) __________ SECONDA PROVA Esercizio 2.1 ( 2 punti ) __________ Esercizio 2.2 ( 5 punti ) __________ Esercizio 2.3 ( 5 punti ) __________ Esercizio 2.4 ( 4 p unti ) __________ Totale: ( 16 punti ) __________ Voto finale: __________ Esercizio 1.1 ( 6 punti ) – RECUPERO PRIMA PROVA Si definisca una funzione che riceve in input due matrici m1 e m2 di NxN inte ri. La funzione calcola e restituisce il numero di elementi di m2 che so no pari alla somma di due qualsiasi elementi di m1 (se un dato elemento di m2 è somma di più coppie di elementi di m1 , viene contato comunque una volta sola ). La funzione abbia la seg uente intestazione: int numSomme (int m1[][N], int m2[][N]) 3 Esercizio 1. 2 ( 6 punti ) – RECUPERO PRIMA PROVA Si progetti e codifichi una funzione C int numSommaDiff (int a[]) che riceve in ingresso un array a di interi. La funzione restituisce 1 se esi ste almeno un elemento in a pari alla somma degli elementi che lo seguono diminuita del la somma degli elementi che lo precedono. Altrimenti restituisce 0. Ad esempio, nel vettore 1 2 1 20 -6 16 14 il 20 soddisfa la proprietà descritta. Quindi la funzione r estituisce 1. Se invece si considera il vettore 1 2 1 20 -14 20 14 nessun numero soddisfa la proprietà descritta. Quindi la funzione restituisce 0. 5 Esercizio 1.3 ( 2 punti ) – RECUPERO PRIMA PROVA Il seguente schema descrive i dati di una carrozz eria e consiste di due tabelle (chiavi in maiuscolo): Cliente(CODICEFISCALE, Nome, TargaVeicolo, Indirizzo) Riparazione(CODFISCLIENTE, DATAINIZIO, DataFine, Descrizione, Costo) Scrivere una query in algebra relazionale che estrae i clienti che hanno e ffettuato meno di due riparazioni nel 2009 (zero o una). R1=Riparazioni R2=Riparazioni Clienti – (Clienti SEMIJOIN R1 SEMIJOIN R1.CODFISCLIENTE=R2.CODFISCLIENTE AND R1.DATAINIZIO>R2.DATAINIZIO R2) 7 Esercizio 2.1 ( 2 punti ) - SECONDA PROVA Il seguente sc hema descrive i dati di una carrozzeria e consiste di due tabelle (chiavi in maiuscolo): Cliente(CODICEFISCALE, Nome, TargaVeicolo, Indirizzo) Riparazione(CODFISCLIENTE, DATAINIZIO, DataFine, Descrizione, Costo) Scrivere una query in SQL che determina il nome del cliente che complessivamente ha speso di più nell’officina. SELECT C.Nome FROM Cliente C JOIN Riparazione R ON C.CODICEFISCALE=R.CODFISCLIENTE GROUP BY C.CODICEFISCALE, C.Nome HAVING SUM(Costo) >= ( SELECT SUM(Costo) FROM Riparazione GROUP BY CODFISCLIENTE ) oppure SELECT Nome FROM Cliente WHERE CODICEFISCALE IN ( SELECT CODFISCLIENTE FROM Riparazione GROUP BY CODFISCLI EN TE HAVING SUM(Costo) >= ( SELECT SUM(Costo) FROM Riparazione GROUP BY CODFISCLIENTE ) ) Esercizio 2.2 ( 5 punti ) SECONDA PROVA Si consideri la seguente definizione di un albero binario (ovvero con due rami in ogni nodo): typedef struct EL { int dato; struct EL * left ; struct EL * right; } node; typedef node * tree; Codificare una funzione che riceve in input due alberi e restituisce 1 se tutti gli interi contenuti in un albero sono anche contenuti nell’altro e viceversa (anche più di una volta e in posi zioni qualsiasi), 0 altrimenti. Si faccia attenzione che gli alberi possono avere numeri duplicati e possono avere un numero complessivo di nodi differente. 9 Esercizio 2.3 ( 5 punti ) – SECONDA PROVA PoliTunes è un software che gestisce musica. PoliTune s gestisce una lista di canzoni, detta Libreria, di dimensione variabile e non limitata. Ogni canzone è caratterizzata dal titolo, dal nome dell’album di appartenenza, dal nome dell’artista, dal nome del compositore e dall’anno di produzione del disco. ty pedef struct canz { char titolo[100]; char album[100]; char artista[200]; char compositore[100]; int anno; } Canzone; typedef struct ncanz { Canzone c; ncanz * next; } NodoCanzone; typedef nodoCanzone * Libreria; Si scrivano due funzioni. La prima aggiunge una canzone alla lista. Libreria aggiungi(Canzone c, Libreria lib); La seconda restituisce una nuova lista di canzoni dei “Queen” (artista), scegliendo tutte le canzoni che sono state scritte tra il 1978 e il 1982 da “Roger Taylor” (Composi tore). Non viene modificata la lista di partenza. Libreria QueenAscoltabili(Libreria lib); Si ricorda che la funzione int strcmp(const char *s1, const char *s2) restituisce un intero minore, uguale o maggiore di 0 a seconda che s1 sia (o i primi n caratter i siano) rispettivamente alfabeticamente minore, uguale o maggiore di s2. 11 Esercizio 2.4 ( 4 punti ) SECONDA PROVA Indicare cosa stampa a video il seguente programma. Si ricorda che il C utilizza l’alfabeto inglese in cui le lettere son o 26 (ci sono in più j, k, w, x, y). Si assuma che la dimensione di un int sia 4 byte e che la dimensione di un char sia 1 byte. int main () { char c , arr['z' -'a' ], *pChar; int i, *pInt , int matr = __ ; // inserire qui le ultime due cifre della propria matricola //Inizio prima parte for ( c='a'; c