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

Full exam

Informatica A Cognome ________________________________ Matricola _______________________ Nome ________________________________ Firma _______________________ Istruzioni • Non separate questi fogli. Scrive te la soluzione solo sui fogli d istribuiti , utilizzando il retro delle pagine in caso di necessità . Cancella te le parti di brutta (o ripudiate) con un tratto di penna . • Ogni parte non cancellata a penna sarà considerata parte integrante della sol uzione. • È possibile scrivere a matita (e no n ricalcare al momento della consegna!). • È vietato utilizzare calcolatrici o telefoni . Chi tenti di farlo ved rà annullata la sua prova. • È ammessa la consulta zion e 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: 2 h 30 m Valore degli esercizi, voti parziali e voto finale : Esercizio 1 ( 2 punti ) __________ Esercizio 2 ( 6 punti ) __________ Esercizio 3 ( 5 punti ) __________ Esercizio 4 ( 6 punti ) __________ Esercizio 5 ( 6 punti ) __________ Esercizio 6 ( 5 punti ) __________ Totale: ( 30 punti ) _________ Informatica A5 Esercizio n. 0 -- pagina 2 di 12 Se si continua sul retro d i qualche foglio , indicare dove Esercizio 1 - Algebra di Boole, Aritmetica Binaria, C odifica delle Informazioni (2 punti) (a) Si costruisca la tabella di verità della seguente espressione booleana in quattro variabili , badando all a precedenz a tra gli operatori logici. Eventualmente si aggiungano le parentesi (1 punto). ( A && ( not A ) or no t ( ( not B ) and B ) ) or ( A and C ) (b) Si stabilisca il minimo numero di bit sufficiente a rappresentare in complemento a due i numeri A = 25 dec e B = –20 4dec , li si converta , se ne calcolino la somma (A+B) e la differenza (A –B) in com plemento a due e si indichi se si genera riporto sulla colonna dei bit più significativi e se si verifica overflow (1 punto). Informatica A5 Esercizio n. 0 -- pagina 3 di 12 Se si continua sul retro d i qualche foglio , indicare dove Esercizio 2 ( 6 punti ) Si consideri il seguente programma C, completando la definizione di MATR con la propria matricol a. #define MATR " ...... " void f oo( char * p arola ) { if ( parola == NULL ) return; else { printf("%c", *p arola ); parola =p arola +1; if( strlen(p arola) == 0 ) return; else { foo( parola -1); printf("%c", *p aro la ); return; } } } int main() { char m[7] = MATR; f(m+4 ); printf("SE ARRIVO QUI HO FINITO \n"); return 0; } Si spieghi brevemente il comportamento del programma ; per comprenderlo, si suggerisce di simula rne l’esecuzione (prest ando attenzione a “impilare” ed eventualmente “disimpilare” bene le chiamate ricorsive e a prestare attenzione a quali istruzioni sono eseguite e quali no). Indicare anche l’output stampato a video dal programma (attenzione alla posizione delle chiamate a p rintf). 4 Esercizio 3 ( 5 punti ) Il seguente schema descrive una base di dati relativa a d una catena di hotel che intende avviare un programma di fidelizzazione dei propri clienti. CLIENTE (COD CLI, NOME , CITTÀ ) HOTEL (LOCALITÀ , NUMERO CAMER E, DATA APERTURA , COSTO DOPPIA , COSTO SINGOLA ) PRENOTAZIONE (COD CLI, LOCALITÀ , DATA INIZIO , NUMERO GIORNI , SINGOLA OD OPPIA ) 1. Scrivere una query SQL che e strae il Nome dei clienti di Bergamo che non hanno mai prenotato una camera doppia . 2. Formulare in Algebra Relazionale, Calcol o Relazionale , Datalog e SQL l’interrogazione che restituisce gli hotel che hanno avuto almeno una prenotazione il primo giorno di apertura . 5 6 Esercizio 4 ( 6 punti ) Si progetti e codifichi una funzione C che riceve in ingresso un a list a definit a type def struct Node { int numero; struct Node * next; } Nodo; typedef Nodo * Lista; che contiene solo valori positivi. Definiamo linziana un a lista se ogni valore pari è seguito da un valore che è esattamente la sua metà. Ad esempio la l ista 4 2 1 36 18 9 23 87 34 17 64 32 16 8 4 2 1 è linziana, mentre la lista 4 2 36 18 9 23 87 34 17 64 32 16 8 4 2 1 Non lo è perché il 2 è seguito dal 36. Si progetti e codifichi una funzione C che riceve in ingresso un a list a definit a come sopra e r estituisce 1 se la lista è linziana, 0 altrimenti . 7 8 Esercizio 5 ( 6 punti ) Si consideri la seguente struttura dati : typedef struct Dat aT { int giorno; int mese ; int anno; } Data; typedef struct Interprete T { char * cognome; char * nome; char * cittadinanza ; } Interprete ; typedef Interpret e * ListaInterpreti ; typedef struct Concerto T { ListaInterpreti Lista, Data data, int prezzoBigliett o, struct Node * next; } Concerto ; typedef Concerto * Lista Concerti ; Si codifichi una funzione che , ricev uta in ingresso una lista di concerti restituisce una lista contenente tutti gli interpreti di concerti del febbraio 2009 con un prezzo inferiore o uguale ai 50 eur o. Si consiglia fortemente l’utilizzo di funzioni ausiliarie. 9 10 Esercizio 6 ( 5 punti ) Si consideri la seguente definizione di un albero binario (binario=con due rami in ogni nodo): typedef struct EL { int dato ; struct EL * left; struct EL * right; } node; typedef node * tree; Un albero si definisce lionese se tutti i figli destri di nodi sono pari e tutti i figli sinistri sono dispari. La radice dell’albero può contene re qualsiasi valore in quanto non è né figlio destro né sinistro. Si scriva una funzione che riceve in ingresso un albero e restituisce 1 se l’albero è lionese, 0 altrimenti. Si suggerisce l’uso di funzioni ausiliarie . 11 12