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 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 ( 4 punti ) __________ Esercizio 3 ( 4 punti ) __________ Esercizio 4 ( 6 punti ) __________ Esercizio 5 ( 7 punti ) __________ Esercizio 6 ( 4 punti ) __________ Totale: ( 29 punti ) _________ 2 Esercizio 1 - Algebra di Boole, Aritmetica Binaria, C odifica delle Informazioni (2 punti) (a) Si costruisca la tabella di verità della seguente espressione booleana, badando all a precedenz a tra gli operatori logici. (1 punto). ( A or ( B or (not A) ) ) or ( ( A and ( not B ) ) and C ) (b) Si s tabilisca il minimo numero di bit sufficiente a rappresentare in complemento a due i numeri A = 16dec e B = –11 dec , li si converta , se ne calcolino la somma (A+B) e la differenza (A –B) in complemento a due e si indichi se si genera riporto sul la colonna dei bit più significativi e se si verifica overflow (1 punto). 3 Esercizio 2 ( 4 punti ) Sia data la seguente base di dati, che descrive gli atleti e le loro prestazioni (posizione finale) a maratone a cui hanno partecipato. ATLETA ( No me , Nazionalità, RecordPersonale ) MARATONA ( Sigla , Citta, Data ) POSIZIONAMENTO ( SiglaMaratona , NomeAtleta , Posizione, Tempo ) Scrivere in SQL l'interrogazione che estrae per ogni atleta il numero di maratone vinte (il vincitore ha nel campo posizione il valore “1”). 4 Sia data la seguente base di dati, che descrive gli atleti e le loro prestazioni (posizione finale) a maratone a cui hanno partecipato. ATLETA ( Nome , Nazionalità, RecordPersonale ) MARATONA ( Sigla , Citta, Data ) POSIZIONAMENTO ( SiglaM aratona, NomeAtleta , Posizione, Tempo ) Esprimere in SQL l’interrogazione che estrae il nome e la nazionalità degli atleti che hanno stabilito il loro record personale in una gara che non hanno vinto (il vincitore ha nel campo posizione il valore “1”). 5 Esercizio 3 ( 4 punti ) Si dica cosa stampa il seguente codice #define N 4 #include #include int f(int a, int b); int main(){ int i,v[N]={1,2,3,4}; for(i=0; i R1), 0 altrimenti. 7 8 Esercizio 5 ( 7 punti ) Si consideri la seguente struttura dati usata da una società di catering per gestire dei matrimoni : typedef struct Date { int giorno; int mese; int anno; } Data; typedef struct { char * cognome, * nome; int eta; /* età della persona */ } Persona; typedef struct Item { Persona p ; char * gradoParentela; struct Item * next } Invitato ; typedef Invitato * ListaDi Invitati ; typedef struct Node { Data d ; Persona sposo,sposa; ListaDiInvitati L; struct Node * next; } Matrimonio ; typedef Matrimonio * Lista Di Matrimoni ; Si codifichi una funzione che, ricevuta in ingresso una lista di matrimoni e una data , restituisca il numero di coperti che la società di catering deve preparare a quella da ta calcolato come il numero di persone di più di tre anni che parteciperanno ai matrimoni gestiti quel giorno (contando anche gli sposi) . int conta(ListaDiMatrimoni lis, Data d at) { int cont=0; ListaDiMatrimoni tmp; for(tmp=lis;tmp! =NULL;tmp= tmp ->next) { if(dataGiusta(tmp ->d,d at )) cont=cont+contaMat(tmp ->L); } return cont; } Int dataGiusta(Data dm, Data d) { return (dm.anno==d.anno && d.mese=dm.mese && d.giorno==dm.giorno) } int contaMat(ListaDiInvitati lis) { int cont=2; ListaDiInvitati temp=lis; for( ;temp!=NULL;temp=temp ->next ){ if(mangia(temp ->p)) cont++; } Return cont; } int mangia{Persona p) { return p.eta>=2 } { } 9 10 Si codifichi una funzione che, ricevuta i n ingresso una lista di invitati e il nome di un file, aggiunga alla lista (in fondo) gli invitati elencati nel file . Si supponga il file nel formato cognome nome età gp cognome nome età gp cognome nome età gp cognome nome età gp cognome nome età gp … Si supponga il file non contenga errori. ListaDiInvitati aggiungi(ListaDiInvitati lis,char * nome) { FILE * fp; Persona p; char * str ; fp=fopen( nome,”r”); while(feof(fp)) { p.cognome=malloc(2000); p.nome=malloc(200 0); str = malloc(2000); fscanf(fp,”%s%s%d%s”,p ->cognome,p ->nome,&(p ->d),str) ; lis=InsInFondo(lis,p,str); } fclose(fp); Return lis; } ListaDiInvitati InsInFondo( ListaDiInvitati lista, Persona p, char * g ) { ListaDiInvitati punt, cur = lista; punt = (ListaDiInvitati) malloc( sizeof(Invitato ) ); punt –>next = NULL; punt –>p = p ; /* Crea il nuovo nodo */ punt –>gradoDiParentela = g ; /* Crea il nuovo nodo */ if ( lista==NULL ) return punt; /* => punt è la nuova lista */ else { while(cur –>next != NULL ) /* Trova l’ultimo nodo */ cur = cur –>next ; cur –>next = punt; /* A ggancio all’ultimo nodo */ } return lista; } { } { } 11 12 Esercizio 6 ( 4 punti ) Si consideri la seguente definizione di un albero tern ario typedef struct EL { int dato; struct EL * left, * center, * right; } node; typedef node * tree; Si scriva una funzione che riceve in ingresso tre alberi T1, T2 e T3, verifica se tutti e tre gli alberi hanno la stessa struttura, in caso positivo copia nei nodi di T3 la somma degli elementi contenuti nei corrispond enti elementi di T1 e T2 e restituisce 1, in caso negativo assegna il valore 0 a tutti i nodi di T3 e restituisce 0. 13 14