CORSO DI LAUREA IN INGEGNERIA ELETTRICA

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