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

First partial exam

Informatica A – a.a. 0 9/10 – Primo Appello – 25/2/20 10 Cognome ________________________________ Matricola _______________________ Nome ________________________________ _______ Istruzioni • Non separate questi fogli. Scri ve 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 eserc izi, 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 Bina ria, Codifica delle Informazioni (2 punti) (a) Si costruisca la tabella di verità della seguente espressione booleana, badando all a precedenz a tra gli operatori logici. Eventualmente si aggiungano le parentesi (1 punto). ( A or not ( B and C ) ) or ( ( A and ( not C ) ) and B ) (b) Si stabilisca il minimo numero di bit sufficiente a rappresentare in complemento a due i numeri A = 45 dec e B = –106 dec , li si converta , se ne calcolino la somma (A+B) e la differenza (A –B) in compleme nto a due e si indichi se si genera riporto sulla colonna dei bit più significativi e se si verifica overflow (1 punto). Esercizio 2 ( 4 punti ) Il seguente schema rappresenta le informazioni riguardo alla gestione del personale e delle trasferte : DIPENDENTE ( Matricola , Cognome , Nome , Bonus ) TRASFERTA ( Matricola , Data Partenza, DataRitorno, Destinazione, Costo ) 1. Scrivere in algebra l’interrogazione che estrae per ogni dipendente l a trasferta più costosa . 2. Scrivere in SQL l’interrogazione che es trae il dipendente con più trasferte iniziate nel gennaio 20 10 . 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.cognome, "____________"); 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 compleanno2. \n"); p2 = compleanno2(p1); stampaPersona(p1); stampaPersona(p2); //Punto D// printf("Esecuzione di compleanno3. \n"); compleann o3(&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 compleanno4(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 ) Un antivirus è un software che cerca sequenze speciali di byte che sono contenute nei virus. Il database dei virus è quindi una lista di strutture, ogni struttura contiene la sequenza di byte (di lunghezza massima 100), la lunghezza reale delle sequenza e una stringa contenente il nome del virus che contiene la sequenza. typedef struct v { char sequenza[100]; int lunghezza; char nome[50]; stru ct v * next; } Nodo; typedef Nodo * Lista; Implementare la seguente funzione che, ricevuta in ingresso una stringa che rappresenta un programma, verifica che non contenga virus: void verifica(char programma[] , int lunProg, Lista virusLis); Qualora dovesse contenere virus, la funzione stampa a video quali sono i virus da cui è affetto il programma. Se una sequenza è presente più di una volta, la funzione la notifica una sola volta. Implementare la seguente funzione che aggiorna il database delle d efinizioni dei virus. La funzione void aggiorna(Lista virusLis, Lista virusScaricati); riceve in input la lista dei virus già noti e una lista di virus recenti appena scaricato e verifica che questi virus non siano già catalogati nell’antivirus. Per i v irus già presenti nel database corrente, la funzione non deve fare niente, per quelli mancanti, deve aggiungerli in testa al database corrente. 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; Implementare una funzione che, ricevuto in ingresso un albero binario, restituisce 1 se tutti i nodi sono o nodi foglia o godono della prop rietà di avere tra i loro discendenti almeno un nodo divisibile per il valore che contengono. È possibile implementare funzioni di supporto.