- userLoginStatus
Welcome
Our website is made possible by displaying online advertisements to our visitors.
Please disable your ad blocker to continue.
Mathematical Engineering - Informatica A
First partial exam
Informatica A Cognome ________________________________ Matricola _______________________ Nome ________________________________ _______ Istruzioni • Non separate questi fogli. Scrivete la soluzione solo sui fogli distribuiti , utiliz zando 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 mom ento 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 altr i 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: 2h3 0m Esercizio 1 ( 2 punti ) __________ Esercizio 2 ( 4 punti ) __________ Esercizio 3 ( 4 punti ) __________ Esercizio 4 ( 4 punti ) __________ Esercizio 5 ( 12 punti ) __________ Esercizio 6 ( 4 punti ) __________ Totale: ( 30 punti ) __________ Voto finale: __________ Esercizio 1 ( 2 punti ) Si costruisca la tabella di verità della seguente espressione boole ana. ( (not A) and (not C) ) or ( ( not A ) and (not B) ) 3 vere 5 false Si stabilisca il minimo numero di bit sufficiente a rappresentare in complemento a due i numeri A = -122 e B = 14, li si converta, se ne calcoli la somma (A -B) in complemento a due e si indichi se si genera riporto sulla colonna dei bit più significativi e se si verifica overflow . C’è riporto perduto e overflow 3 Esercizio 2 ( 4 punti ) Il seguente schema descrive la base di dati usata per gestir e le borse di studio di una università . DOMANDA BORSA (Matricola, DataDomanda , Stato) CORSO (CodCorso , NomeCorso, NumeroCrediti) GRADUATORIA (Matricola , Media, Cfu, Posizione) ESAME (CodCorso, Matricola , Data, Voto) Estrarre gli studenti che ha nno fatto domanda per una borsa di studio pur avendo una media inferiore a 27 . Estrarre lo studente più in alto nella graduatoria che ha superato l’esame del corso “Informatica A”. Esercizio 3 ( 4 punti ) Si scriva una funzione f che riceve i n ingresso una matrice m di NxN elementi, un intero len (che si supponga essere un intero positivo maggiore di 1) e restitui sce 1 se in m è presente almeno una sequenza orizzontale, verticale o diagonale, di lunghezza len, di elementi che crescono o diminu iscono linearmente (cio è in cui la differenza tra due elementi successivi è costante). Esempi di sequenze lineari: 1 2 3 4 (lunghezza 4, differenza costante 1) 4 3 2 1 (lunghezza 4, differenza constante -1) 2 5 8 11 14 (lunghezza 5, differe nza costante 3) 5 5 5 5 5 5 5 (lunghezza 7, differenza costante 0) Sono ammesse anche sequenze di lunghezza 0 e 1 (che sono considerate sempre lineari) Esempio (con matrice 5 per 5, per semplicit à): 3 6 7 5 3 5 6 2 9 1 2 7 0 9 3 6 0 6 2 6 1 8 7 9 2 se len è 4, la funzione deve restituire 0, perch é non c'è nessuna sequenza lineare di lunghezza 4 , se len è 3, la funzione restituisce 1, perch é è presente la sequenza orizzontale 7 5 3, con differenza costante -2 5 Esercizio 4 ( 4 punti ) Si dic a cosa stampa il seguente codice e si spieghi cosa fa la funzione f void f( int a, int b); int h( int a, int * b, int c ); int g( int *a, int b); int main() { char c;int i, v[4] = { 8, 21, 27, 4 }; for( i=0; i 1 ) printf("%d ", c); if( a > 1 ) f(a,b); } int h( int a, int * b, int c ) { if( *b % a != 0 ) return h( a+c, b, c ); *b = *b / a; return a ; } int g( int *a, int b) { if( *a voto * lista ->crediti ; tot = tot + lista ->crediti ; lista = lista ->next ; } return sum/tot; } void Calcola ( ListaStudenti lis){ while (lis != NULL ){ lis->Media = mediaPesata (lis->esami ); } } int noEsamidopo2007( ListaStudenti lista){ while (lista != NULL ){ if(lista ->esami ->d.anno >= 2007 ) return 0; else return 1; } return 0; } ListaStudenti Cancella( ListaStudenti lista){ ListaStudenti puntPrec, puntSucc; puntSucc = lista ->next ; puntPrec ->next = lista; free (lista); return puntPrec ->next = puntSucc; } ListaStudenti eliminaStudente( ListaStudenti lis){ while (lis != NULL ){ if (noEsamidopo2007 (lis)== 1) Cancella (lis); lis = lis ->next ; } return lis; } 9 Si codifichi in C la seguente funzione: ListaStudenti elimina Studente (ListaStudenti lis) che riceve in input la lista degli stude nti e elimina gli studenti (e i relativi esami) che non hanno superato nessun esame dal 1 gennaio 2007. Esercizio 6 ( 4 punti ) Si consideri la seguente definizione di un albero binario: typedef struct ET { char dato; struc t ET * left , * right; } treeNode; typedef treeNode * tree; Si codifichi in C l a seguent e funzion e: int contains (tree t, char word []) che restituisce 1 se concatenando le lettere trovate percorrendo uno dei cammini dalle foglie alla radice nell’albero si ottiene la parola contenuta nell’array word, 0 altrimenti. 11