04-21-giugno-2011-DomandeConSoluzione.doc 1/12 22/06/2011 15:07:59 Esame di Informatica Generale 9 CFU 21 Giugno 2011 Professori: Carulli, Fiorino, Mazzei Docente Risultati Scritto Orali Carulli Venerdì 24/6 Fiorino Mercoledì sera Venerdì 24/6 Mazzei 26/06/2011 su digilander.libero.it/lm azzei con i risultati Cognome: Nome: Nro di Matricola: Docente: Lab + Nro PC: D1 D2 D3 D4 D5 D6 D7 D8 D9 Dom Es TOT 2 1 1 1 1 1 1 1 1 10 20 30 D1 Scrivere in base 4 e in base 10 il seguente numero binario: 0011001111 2. base 4: 00 11 00 11 11 2 =03033 (Poiché in ogni numero in base b x ogni cifra corrisponde ad x cifre della base b e viceversa e 4=2 2 ) base 10: 2 7 +2 6 +2 3 +2 2 +2 1 +2 0 =128+64+8+4+2+1=207 D2 Dato l'assegnamento C x.a[1] = a.x; indicare i tipi, se esistono, che lo rendono possibile; altrimenti spiegare perché non esistono. typedef structint a[5]; R1; typedef structint x;r2; R1 x; R2 a;
04-21-giugno-2011-DomandeConSoluzione.doc 2/12 22/06/2011 15:07:59 D3 Definire la nozione di chiave primaria di una relazione. Data una relazione R con attributi A1,..., An si dice chiave primaria un sottoinsieme degli attributi di R non vuoto che identifica univocamente ogni tupla di R (condizione di unicità) ed è tale che, se si elimina un attributo della chiave, essa non identifica più univocamente la tupla (condizione di minimalità). D4 Definire le principali funzioni della ALU. Esegue le operazioni aritmetiche (se usa il complemento a due come rappresentazione per i dati comprende almeno i circuiti per la somma ed il complemento a due) e logiche sui dati presenti nel registro/i accumulatore. Il risultato delle operazioni modifica il registro di stato. Descrivere brevemente il gestore dei file (detto anche File System ) in un sistema operativo. D5 Permette la gestione della memoria di massa sia dal punto di vista fisico che logico. D6 Indicare i valori stampati dal seguente programma: void f(int *J, int X) *J = X - *J; int main() X=3; printf("%d ",X); f(&x,4); printf("%d",x); return 0; 3 1
04-21-giugno-2011-DomandeConSoluzione.doc 3/12 22/06/2011 15:07:59 D7 Indicare i valori stampati dal seguente programma: int fz(int a, int b[]) int i; for(i=0;i<3;i++) a = a + b[i]; return a - 1; int main() int v[3], a; v[0] = 3; v[1] = 4; v[2] = 5; a = fz(v[2], v); printf("%d %d\n",a, v[2]); return 0; 16 5 D8 Sintetizzare la funzione booleana descritta dalla seguente tabella di verità dove A, B e C sono le variabili e U1 e U2 le uscite: A B C U1 U2 0 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 1 1 0 0 1 0 0 0 0 1 0 1 1 0 1 1 0 0 0 1 1 1 0 1 U1 = -A-B-C + -A-BC + A-BC
04-21-giugno-2011-DomandeConSoluzione.doc 4/12 22/06/2011 15:07:59 U2 = -A-B-C + -A-BC + -AB-C + ABC D9 Dati i seguenti schemi di relazione con le rispettive istanze: Aziende(PIVA,Denominazione) PIVA Denominazione 111 Bayer 222 Angelini SPA 333 Menarini OTC Farmaci(PIVA,Nome, Prezzo, Qta) PIVA Nome Prezzo Qta 111 Aspirina 1 30 111 Fisiotens 2 20 222 Tachipirina 4 10 111 Tirocular 1 2 222 Lorazepam 5 25 stabilire il risultato della seguente interrogazione: SELECT Aziende.PIVA, SUM(Prezzo) FROM Aziende, Farmaci WHERE Qta > 20 GROUP BY Aziende.PIVA
04-21-giugno-2011-DomandeConSoluzione.doc 5/12 22/06/2011 15:08:00 Esame di Informatica Generale 9 CFU 21 Giugno 2011 Professori: Carulli, Fiorino, Mazzei Docente Risultati Scritto Orali Carulli Venerdì 24/6 Fiorino Mercoledì sera Venerdì 24/6 Mazzei 26/06/2011 su digilander.libero.it/lm azzei con i risultati Cognome: Nome: Nro di Matricola: Docente: Lab + Nro PC: D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 Dom Es TOT 1 1 1 1 1 1 1 1 1 1 10 20 30 D1 Indicare se l operazione di somma tra i seguenti numeri in complemento a due produce overflow motivando la risposta: 00000001+ 11111111= 00000000 Il risultato della somma in complemento a due è corretto (non genera overflow) poiché i due addendi sono discordi di segno. D2 Dati i seguenti numeri binari: A1 = 10000 A2 = 10011 in un aritmetica in complemento a due con 5 bit determinare il risultato della somma A1+A2 in un aritmetica in complemento a due con 8 bit, indicando se il risultato è corretto. Si estendono in segno A1 e A2 e quindi:
04-21-giugno-2011-DomandeConSoluzione.doc 6/12 22/06/2011 15:08:00 1 1 1 1 0 0 0 0 + 1 1 1 1 0 0 1 1 = 1 1 1 0 0 0 1 1 Il risultato della somma in complemento a due è corretto poiché i due addendi sono concordi di segno ed il risultato ad n cifre è dello stesso segno dei due addendi. D3 Dato l'assegnamento C x.a = a.x; indicare i tipi, se esistono, che lo rendono possibile; altrimenti spiegare perché non esistono. struct int a; x; struct int x; a; D4 Data la relazione R con schema R(CodiceEsame, Nome, Cognome, Voto) e la sua istanza: CodiceEsame Nome Cognome Voto 01 Giuseppe Verdi 18 03 Arturo Toscanini 21 01 GioacchinoRossini 25 02 GioacchinoRossini 25 03 GioacchinoRossini 26 04 GioacchinoRossini 25 01 Arturo Toscanini 29 05 Giuseppe Verdi 20 03 Giuseppe Verdi 21 05 Arturo Toscanini 30 01 Antonio Vivaldi 24 03 Antonio Vivaldi 24 01 GioacchinoRossini 30 Scrivere il risultato della seguente query di selezione: SELECT Nome, Cognome, COUNT(*) FROM R WHERE Voto > 25 GROUP BY Cognome,Nome; Nome Cognome Count(*) Gioacchino Rossini 2 Arturo Toscanini 2 D5
04-21-giugno-2011-DomandeConSoluzione.doc 7/12 22/06/2011 15:08:00 Indicare i valori stampati dal seguente programma: 2 12 #include <stdio.h> void f(int *J, int K) *J = K * (*J); int main() K=2; printf("%d\n",k); f(&k, 6); printf("%d\n",k); D6 Indicare i valori stampati dal seguente programma: int fz(int a[], int b) int i; for(i=0;i<3;i++) b = b + a[i]; return b + 1; int main() int w[3], a; w[0] = 3; w[1] = 4; w[2] = 5; a = fz(w,w[1]); printf("%d %d\n",a, w[2]); return 0; 17 5 D7
04-21-giugno-2011-DomandeConSoluzione.doc 8/12 22/06/2011 15:08:00 Sintetizzare la funzione booleana descritta dalla seguente tabella di verità dove A, B e C sono le variabili e U1 e U2 le uscite: A B C U1 U2 0 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 1 1 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 0 1 1 1 1 0 1 U1 = -A-B-C + -ABC + A-BC U2 = -A-B-C + -AB-C + AB-C + ABC D8 Descrivere brevemente le principali differenze tra le memorie RAM e le memorie ROM. La RAM è una memoria volatile leggibile e scrivibile mentre la ROM è una memoria persistente ma solo leggibile D9 Definire la nozione di sistema transazionale. D10 Indicare i registri coinvolti nel ciclo di fetch-decodeexecute di una istruzione (detto anche ciclo macchina).
Esame di Informatica Generale 9 CFU 21 Giugno 2011 Professori: Carulli, Fiorino, Mazzei Docente Risultati Scritto Orali Carulli Venerdì 24/6 Fiorino Mercoledì sera Venerdì 24/6 Mazzei 26/06/2011 su digilander.libero.it/lm azzei con i risultati Cognome: Nome: Nro di Matricola: Docente: Lab + Nro PC: Esercizio 1 (8 punti) Scrivere un programma che: 1- Definisce due vettori A e B di dimensione 10 di tipo int; 2- Legge da input standard 20 numeri interi e li memorizza in A e B; 3- Se le sequenze di valori presenti in A e B possono essere interpretati come due numeri binari da 10 bit, allora il programma ne deve fare la somma e mettere il risultato in un vettore C di 11 elementi (11 e non 10 perché potrebbe esserci un riporto). Altrimenti, il programma segnala che la somma in base 2 non può essere eseguita causa errore di inserimento. #include<stdio.h> int main(void) int A[10], B[10],C[11],i,r; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) scanf("%d",&b[i]); r=0; for(i=9;i>=0;i ) C[i+1]=(A[i]+B[i]+r)%2; if (A[i]+B[i]+r >=2) r=1; else r=0; C[0]=r; for(i=0;i<11;i++) printf("%d",c[i]); return 0;
Esercizio 2 (6 punti) Definire un tipo di dato ST, struct con un campo di nome A di tipo int. Definire un tipo di dato VT, vettore di 100 elementi di tipo int. Scrivere una funzione con due parametri: x di tipo VT; y di tipo puntatore (riferimento) ad un elemento di tipo ST. La funzione deve inserire nel campo A dell area di memoria puntata da y il più piccolo elemento di x. typedef structint a; ST; typedef int VT[100]; void f(vt x, ST *y) int i; y >a=x[0]; for(i=1;i<100;i++) if (x[i]<y >a) y >a=x[i]; Esercizio 3 (6 punti) Per registrare il numero di ore lavorate ogni giorno da ciascun dipendente, sono stati definiti i seguenti schemi di relazione: Dipendenti(CF,Nome,Cognome) Orario(CF,giorno, ore) dove: nella relazione Dipendenti, l attributo CF è la chiave primaria; nella relazione Orario, gli attributi CF e giorno formano la chiave primaria. L attributo CF è chiave esterna per le relazione Dipendenti; nella relazione Orario, l attributo giorno è di tipo Date e l attributo ore rappresenta il numero di ore lavorate nel giorno. Scrivere le interrogazioni SQL che permettono di: a) visualizzare il Nome ed il Cognome dei dipendenti che hanno almeno un giorno in cui lavorano più di 8 ore; b) visualizzare il CF di coloro i quali in totale hanno lavorato più di 1000 ore.
Esame di Informatica Generale 9 CFU 21 Giugno 2011 Professori: Carulli, Fiorino, Mazzei Docente Risultati Scritto Orali Carulli Venerdì 24/6 Fiorino Mercoledì sera Venerdì 24/6 Mazzei 26/06/2011 su digilander.libero.it/lm azzei con i risultati Cognome: Nome: Nro di Matricola: Docente: Lab + Nro PC: Esercizio 1 (8 punti) Scrivere un programma che: 1- legge da standard input un numero intero X tale che -1024 <= X <= +1023. Se il valore di X non ricade negli estremi specificati, allora il programma continua a richiedere un valore per X fino a che l utente non inserisce un valore corretto; 2- converte il numero in cpl2 e memorizza i bit in un vettore B opportunamente dimensionato; #include<stdio.h> int main(void) int X,B[11],i; do scanf("%d",&x); while (X< 1024 X>1023); if (X<0) X=2048+X; for(i=10;i>=0;i ) B[i]=X%2; X=X/2; for(i=0;i<11;i++) printf("%d",b[i]); return 0; Esercizio 2 (6 punti) Definire un tipo di dato ST, struct con due campi di nome A, B di tipo int. Definire un tipo di dato VT, vettore di 100 elementi di tipo int. Scrivere una funzione con due parametri: x di tipo VT; y di tipo puntatore (riferimento) ad un elemento di tipo ST.
La funzione deve inserire nel campo A dell area di memoria puntata da y la somma degli elementi di x, e nel campo B dell area di memoria puntata da y il prodotto degli elementi di x. typedef structint a,b; ST; typedef int VT[100]; void f(vt x, ST *y) int i; y >a=0; y >b=1; for(i=1;i<100;i++) y >a=y >a+x[i]; y >b=y >b*x[i]; Esercizio 3 (6 punti) Siano dati i seguenti schemi di relazione: Utenti(CF,Nome,Cognome) Contratti(CF,dataContratto, premio) dove: nella relazione Utenti, l attributo CF è la chiave primaria; nella relazione Contratti, gli attributi CF e datacontratto formano la chiave primaria. L attributo CF è chiave esterna per le relazione Utenti; nella relazione Contratti l attributo datacontratto è di tipo Date e rappresenta il giorno in cui è stato stipulato il contratto. Scrivere le interrogazioni SQL che permettono di: α) visualizzare il Nome ed il Cognome degli utenti che hanno un contratto con un premio superiore a 20000; β) per ogni giorno del 2011, visualizzare il numero di contratti stipulati.