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

1 Informatica A Cognome ________________________________ Matricola _______________________ Nome ________________________________ Firma _______________________ Istruzioni Non separate questi fogli. Scrivete la soluzione solo sui fogli distribuiti , utilizzando 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 part e integrante della soluzione. È possibile scrivere a matita (e non occorre ricalcare al momento della consegna!). È vietato utilizzare calcolatrici, telefoni o pc . Chi tenti di farlo vedrà annullata la sua prova. È ammessa la consultazione di libri e appun ti, 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 30min Valore indicativo degli esercizi, voti parziali e voto finale: Esercizio 1 ( 2 punti ) __________ Esercizio 2 ( 4 punti ) __________ Esercizio 3 ( 4 punti ) __________ Esercizio 4 ( 4 punti ) __________ Totale: ( 14 punti ) _________ 2 Esercizio 1 (2 punti) Si costruisca la tabella di verità della seguente espressione booleana. not ( (not A) or ( B and C ) ) or ( A and (C or B) ) Si stabilisca il minimo numero di bit sufficiente a rappresentare in complemento a due i numeri A = 77 dec e B = –123 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 sulla colonna dei bit più significativi e se si verifica overflow . 3 Esercizio 2 (4 punti) Si dica cosa stampa il seguente codice: #include #define N 8 void t(int n, int p, int*i, int*f) { if( i>=f ) printf(" NON TROVATO \n"); else if( n == *i ) printf(" : dispari[%d] \n",p); else t( n, p+1, i+1, f ); } void d( int n, int *v ) { if( n%2 ) t( n, 0, v, v+N ); else { printf(" -> %d", n/2); d(n/2, v); } } int main(){ int dispari[4*N]={1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47}, x[N]={7,18,24,17,88}, i=0; while( x[i] > 0 ) { printf("[%d]", x[i]); d( x[i++], di spari ); } return 0; } 4 Esercizio 3 (4 punti) Si considerino le seguenti dichiarazioni di tipi che definiscono le strutture dati per gestire le visite di un dentista . typedef struct { int giorno, mese, anno; } data; typedef struct { int ora, minuto; } orario; typedef struct { char codiceFiscale[100], cognome[100], nome[100]; data DataNascita; } persona; typedef struct { persona pazienti[1000]; int numPazienti; //dice quante caselle dell’array contengono dati validi } listaPazienti; typedef struct { char CFPaziente[100] ; data d; orario o; } visita typedef struct { visita visite[1000]; int numVisite; //dice quante caselle dell’array co ntengono dati validi } listaVisite; Si definisca una funzione di prototipo listaPazienti f(listaPazienti P, listaVisite V ); che restituisce la lista dei pazienti che hanno avuto una visita medica il giorno del loro compleanno. listaPazienti f(listaPazienti P, listaVisite V) { listaPazienti PF; int i,k; PF.numPazienti=0; for(i=0;i< P.numPazienti ;i++ ){ if(pazienteFortunello(P. pazient i[i],….,….)) { PF. pazient i[PF.numPazienti]= P.pazient i[i]; PF.numPazienti++; } } return PF; } pazienteFortunello(Paziente p,….,….) int DataCompl (Data vis, Data dn) { if(vis.giorno==dn.giorno && vis.mese==dn.mese) return 1; else return 0; } { 5 } 6 7 Esercizio 4 (4 punti) Una matrice si definisce “riempita a scacchiera” se in essa sono presenti zeri e numeri diversi da zero di modo da formare una scacchiera. Delle tre matrici sotto 0 5 0 21 0 7 6 0 4 0 2 0 0 4 0 11 0 8 55 0 33 0 55 0 0 5 0 21 0 9 22 0 1 0 32 0 22 0 1 0 32 0 0 5 0 21 0 7 6 0 4 0 2 0 0 4 0 11 0 8 55 0 33 0 55 0 0 5 0 21 0 9 0 5 0 21 0 7 0 4 0 2 0 4 0 4 0 11 0 8 55 0 33 0 55 0 0 5 0 21 0 9 22 0 1 0 32 0 Le prime due sono a scacchiera mentre la terza non lo è. Definire una funzione int f(int M[][N]) che riceve in input una matrice di dimensione N xN (con N costante definita globalmente con una define) e restituisce 1 se la matrice è a scacchiera, 0 altrimenti. 8