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 – Secondo Appello – 09 /07 /20 10 Cognome ________________________________ Matricola _______________________ Nome ________________________________ _______ Istruzioni • Non separate questi fogli. Scrive te la soluzione solo sui fogli distribuiti , 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 non 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: 2h:15m Valore degli es ercizi, voti parziali e voto finale: Esercizio 1 ( 2 punti ) __________ Esercizio 2 ( 4 punti ) __________ Esercizio 3 ( 7 punti ) __________ Esercizio 4 ( 9 punti ) __________ Esercizio 5 ( 8 punti ) __________ Totale: ( 30 punti ) _________ Esercizio 1 - Algebra di Boole, Aritmetica B inaria, Codifica delle Informazioni (2 punti) (a) Si costruisca la tabella di verità della seguente espressione booleana, badando alla precedenza tra gli operatori logici. Eventualmente si aggiungano le parentesi (1 punto). ( ( A or ( not B ) ) and C ) or ( A or C or B ) (b) Si stabilisca il minimo numero di bit sufficiente a rappresentare in complemento a due i numeri A = 145 dec e B = –26dec , li si converta , se ne calcolino la somma (A+B) e la differenza (A –B) in complemento a du e e si indichi se si genera riporto sulla colonna dei bit più significativi e se si verifica overflow (1 punto). Esercizio 2 ( 4 punti ) La seguente base di dati descrive i voli di una compagnia internazionale. Si assuma che: un passeggero sia presente su un volo se e solo se ha una prenotazione per quel volo ed ha successivamente fatto check -in; i ritardi siano espressi in minuti; sommando un orario ad un ritardo si ottenga un nuovo orario; la differenza tra due orari restituisca come risultato u n intervallo in minuti; un passeggero arrivi e parta una sola volta in un determinato giorno da un determinato aeroporto. VOLO( NUMERO, DATA , COMPAGNIA , LOC -PARTENZA , LOC -ARRIVO , ORA -PARTENZA , ORA -ARRIVO , RITARDO -PARTENZA , RITARDO -ARRIVO , FLAG NOTTURNO ) PRE NOTAZIONE (ID -PASS, NUMERO -VOLO, DATA , NOMINATIVO , RECAPITO , CITTA ’, NAZIONALITA ’) CHECK -IN( ID -PASS, NUMERO -VOLO, DATA , POSTO ASSEGNATO ) 1. Estrarre la compagnia che ha accumulato il maggior ritardo medio in arrivo a Linate nel mese di maggio 2010. 2. Calcolare i l tempo medio di permanenza in aeroporto, tenendo conto dei ritardi, dei passeggeri che hanno transitato il 3/5/2010 da Linate (erano su un aereo che è arrivato a Linate e sono successivamente ripartiti nella medesima giornata). Esercizio 3 ( 7 punti ) Completare il seguente codice con il proprio nome, cognome ed età. Spiegare poi il funzionamento del codice mostrando chiaramente cosa stampa. typedef struct { char nome[20],cognome[20]; int eta; } persona; typedef persona *ptrPersona; void compleanno (persona p); persona compleanno2(persona p); void compleanno3(ptrPersona ptr); void compleanno4(ptrPersona *ptr); void stampaPersona(persona p); int main () { persona p1,p2; ptrPersona ptr; strcpy(p1.nome, "___________"); strcpy(p1.cognom e, "____________"); p1.eta=____; //Punto A// printf("Stampa di p1. \n"); stampaPersona(p1); //Punto B// printf("Esecuzione di compleanno. \n"); compleanno(p1); stampaPersona(p1); //Punto C// printf("Esecuzione di c ompleanno2. \n"); p2 = compleanno2(p1); stampaPersona(p1); stampaPersona(p2); //Punto D// printf("Esecuzione di compleanno3. \n"); compleanno3(&p2); stampaPersona(p2); //Punto E// printf("Esecuzione di compleanno4. \n") ; ptr = &p2; compleanno4(&ptr); stampaPersona(p2); return 0; } void compleanno(persona p) { p.eta++; } persona compleanno2(persona p) { p.eta++; return p; } void compleanno3(ptrPersona ptr) { (*ptr).eta++; } void complea nno4(ptrPersona *ptr){ persona p; strcpy(p.nome, (*(*ptr)).cognome); strcpy(p.cognome, (*(*ptr)).nome); p.eta = (*(*ptr)).eta+1; *ptr = &p; } void stampaPersona(persona p){ printf("Nome: %s \n", p.nome); printf("Cognome: %s \n", p.cognome); printf("Eta: %d \n", p.eta); printf(" \n"); } Punto A: Punto B: Punto C: Punto D: Punto E: Esercizio 4 ( 9 punti ) Si consideri la seguente definizione di una lista : typ edef struct EL { int dato; struct EL * next , } nodo; typedef nodo * lista; Implementare una funzione che, ricevuto in ingresso un a lista e una matrice NxN di interi (si supponga N una costante predefinita) , restituisce 1 se la matric e contiene tutti gli elementi della lista e se in tutte le righe della matrice ci sono almeno due degli elementi contenuti nei nodi della lista (non è necessario controllare se lo stesso elemento è contenuto più di una volta ). Si consiglia di implementare funzioni di supporto. Esercizio 5 ( 8 punti ) Si consideri la seguente definizione di un albero binario: typedef struct EL { int dato; struct EL * left; struct EL * right; } node; typedef node * tree; Imple mentare una funzione che, ricevut i in ingresso due alber i binari TA e TB , restituisce 1 se tutti i nodi foglia di TA sono nodi interni di TB e se tutti i nodi foglia di TB sono nodi interni di TA. È possibile implementare funzioni di supporto.