CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B, C Anno Accademico 2014-2015 Proff. Danilo ARDAGNA, Antonio MIELE Secondo appello – 15.9.2014 Cognome _____________________________________________________________________________ Nome ________________________________________________________________________________ Matricola ________________________ Firma _______________________________________________ Durata: 2h Valutazioni 1 (12) ____ 2 (7) ____ 3 (4) ____ 4 (3) ____ 5 (5) ____ Si ricorda che non è possibile consultare libri o appunti, o utilizzare la calcolatrice. - 1 - punti 12 Sia data la seguente definizione di tipo: typedef struct{ float reale; float immaginario; } numero_complesso; che rappresenta i numeri complessi. a Sia dato inoltre il seguente prototipo di funzione: numero_complesso somma(numero_complesso n1, numero_complesso n2); che effettua la somma di due numeri complessi n1 e n2 e ne restituisce il risultato. Fornire l’implementazione della funzione somma tra numeri complessi. Si ricorda che la somma di due numeri complessi n1=x1+y1*i e n2=x2+y2*i è pari a x1+x2 +(y1+y2)*i. numero_complesso somma(numero_complesso n1, numero_complesso n2){ numero_complesso risultato; risultato.reale=n1.reale+n2.reale; risultato.immaginario=n1.immaginario+n2.immaginario; return risultato; } b Sia dato il seguente prototipo di funzione: numero_complesso prodotto(numero_complesso n1, numero_complesso n2); che effettua il prodotto di due numeri complessi n1 e n2 e ne restituisce il risultato. 1 2 Fornire l’implementazione della funzione prodotto. Si ricorda che il prodotto di due numeri complessi n1=x1+y1*i e n2=x2+y2*i è pari a x1*x2 - y1*y2 + x1*y2*i + x2*y1*i. numero_complesso prodotto(numero_complesso n1, numero_complesso n2){ numero_complesso risultato; risultato.reale=n1.reale*n2.reale-n1.immaginario*n2.immaginario; risultato.immaginario= n1.immaginario*n2.reale+n1.reale*n2.immaginario; return risultato; } c Fornire il prototipo e l’implementazione della funzione quadrato che restituisce il quadrato di un numero complesso n passato come parametro. numero_complesso quadrato(numero_complesso n); numero_complesso quadrato(numero_complesso n){ numero_complesso risultato; risultato=prodotto(n,n); return risultato; } - 2 - punti 7 Descrivere le attività svolte dal seguente codice Matlab: 1 A = load('dati.txt'); 2 if length(A)==5 && A(1)<A(2) 3 step=(A(2)-A(1))/1000; 4 x=A(1):step:A(2); 5 y=x.*x.*A(3)+x.*A(4)+A(5); 6 plot(x,y); 7 else 8 disp('Errore nel file'); 9 end dove dati.txt è un file di testo che contiene su una sola riga il seguente testo: -100 100 -0.005 0.004 4 Inoltre modificare lo script (aggiungendo le apposite istruzioni) in modo tale che dopo l’istruzione 6 disegni solo la parte della curva sopra all’asse X. 2 3 Soluzione: 1- La funzione load carica nella variabile A un array riga di 5 elementi memorizzato nel file di testo ‘dati.txt’. 2- La condizione verifica che il vettore A contenga esattamente 5 valori e che il primo valore sia strettamente minore del secondo. Nel caso del file caricato la condizione è verificata. 3- La variabile step contiene il valore 0.2 4- X contiene una successione di numeri compresi tra –100 e 100 con passo 0.2. 5- La formula riportata è quella di una parabola che utilizza come parametri a, b, c gli ultimi tre valori contenuti in A. Quindi l’istruzione calcola i valori Y corrispondenti ai valori contenuti in X 6- La funzione disegna su un grafico bidimensionale una parabola, approssimandola congiungendo mediante segmenti di retta i punti definiti dalle coppie cartesiane (x(i), y(i)). 7- Ramo else dell’if alla riga 2 8- Mostra il messaggio “errore nel file” Le istruzioni da aggiungere dopo la riga 7 sono newy=y(y>0); newx=x(y>0); plot(newx,newy); - 3 - punti 4 Descrivere brevemente le fasi di fetch, decode ed execute eseguite dalla macchina di Von Neumann. - 4 - punti 3 Dire quanti bit sono necessari per rappresentare i numeri nell’intervallo [-11,+120]. Con il numero di bit individuato, codificare in complemento a 2 i valori A=-11 e B=+120. Effettuare poi le operazioni di somma A+B e sottrazione A-B indicando se si è verificato o meno overflow. Commentare e motivate tutti i passaggi. 8 bit consentono di rappresentare l’intervallo [-128, 127] e sono quindi sufficienti a rappresentare l’intervallo richiesto. -A=11dec=00001011C2 00001011 (inversione di ciascun bit) 11110100+ 00000001= 11110101 A=11110101 C2 B=120dec=01111000C2 01111000 (inversione di ciascun bit) 10000111+ 00000001= 10001000 -B= 10001000C2 3 4 A+B: 111 11110101+ 01111000= 01101101 Non si verifica overflow, poiché gli operandi sono opposti. A-B: 11110101+ 10001000= 01111101 Si verifica overflow, poiché da due operandi negativi si è ottenuto un numero positivo (come si evince analizzando il bit più significativo degli addendi e del risultato). - 5 - punti 5 Dato il seguente schema relazionale, relativo al sistema di gestione dei dati di uno zoo: Animale(Codice, Nome, Famiglia, Età, Peso) Gabbia (Codice, Dimensione, Tipo, Zona) Assegnamento(CodiceAnimale, CodiceGabbia) Indicare le chiavi primarie e i vincoli di integrità referenziale. Formulare inoltre in SQL le seguenti query: a. Elencare (eliminando i duplicati) le famiglie di animali per cui almeno un esemplare ha peso maggiore di 30kg b. Fornire i nomi degli animali, che appartengono alla famiglia dei mammiferi e sono esposti in gabbie della zona Sud c. Elencare gli animali (codice e nome) collocati in gabbie di dimensioni maggiori di 5 m3 Soluzione: Animale(Codice, Nome, Famiglia, età, peso) Gabbia (Codice, Dimensione, Tipo, Zona) Assegnamento(CodiceAnimale, CodiceGabbia) VIR: CodiceAnimale->Animale.Codice VIR: CodiceGabbia->Gabbia.Codice a SELECT DISTINCT Famiglia FROM Animale WHERE peso>30 b SELECT Nome FROM Animale,Gabbia,Assegnamento 4 WHERE Animale.Codice=CodiceAnimale AND Gabbia.Codice=CodiceGabbia AND Famiglia=mammiferi AND Zona=Sud 5 c SELECT Animale.Codice, Nome FROM Animale,Gabbia,Assegnamento WHERE Animale.Codice=CodiceAnimale AND Gabbia.Codice=CodiceGabbia AND Dimensioni>5 5