Ethan Frome

Transcript

Ethan Frome
Esame di Calcolatori Elettronici
Ingegneria Informatica ­Appello del 24/6/2008
Sia data la seguente dichiarazione, contenuta nel file cc.h:
struct st { int vv1[4]; double vv2[4]; int a; int b; double c; };
class cl
{
st s;
public:
cl(int j); cl(const cl& cc);
cl elab1(cl& cc);
cl elab2(cl& cc1, st stru);
void stampa()
{
int i;
for (i=0;i<4;i++) cout << s.vv1[i] << ' '; cout << '\t';
for (i=0;i<4;i++) cout << s.vv2[i] << ' '; cout << '\t';
cout << s.a << ' ' << s.b << ' ' << s.c; cout << endl; cout << endl;
}
};
Esercizio 1)
Realizzare in Assembler DJGPP le funzioni membro seguenti (scrivere sul file es1.s; tradurre, collegare
ed eseguire utilizzando i comandi indicati nelle avvertenze):
cl::cl(int j)
{
s.c = s.a = s.b = j;
for (int i=0; i<4; i++) s.vv2[i] = s.vv1[i] = i + j;
}
cl::cl(const cl& cc)
{
s = cc.s;
for (int i=0; i<4; i++) { s.vv1[i]+=cc.s.a + cc.s.b;
}
cl cl::elab1(cl& cc)
{
cl cla(cc);
return cla;
}
s.vv2[i]+=cc.s.c; }
Esercizio 2)
Realizzare in Assembler DJGPP la funzione membro seguente (scrivere sul file es2.s; tradurre,
collegare ed eseguire utilizzando i comandi indicati nelle avvertenze):
cl cl::elab2(cl& cc1, st stru)
{
int i; cl cla(2);
cla = elab1(cc1);
for (i=0;i<4;i++)
{
if (s.vv2[i]<4) cla.s.vv2[i]-=stru.vv2[i];
else cla.s.vv2[i]= stru.vv2[i]+=stru.c;
}
return cla;
}
Esercizio 3)
Definire in Java quanto richiesto (scrivere nel file Esa.java, tradurre, collegare ed eseguire utilizzando i
comandi indicati nelle avvertenze).
Il file contiene: 1) una classe Esa vuota. 2) Una classe Biblioteca, con costrutture Biblioteca(int
numlibri) e metodi (tutti void) prendi(int id), restituisci(int id), apri() e chiudi(). La biblioteca contiene
numlibri libri identificati dai numeri da 0 a numlibri-1 e può essere aperta o chiusa. Ogni libro può
essere in prestito o disponibile. Il metodo prendi() attende che la biblioteca sia aperta e che il libro id
sia disponibile, quindi lo prende in prestito e stampa “Prestato libro id”. Il metodo restituisci() attende
che la biblioteca sia aperta, quindi restituisce il libro id e stampa “Restituito libro id”. Il metodo apri()
apre la biblioteca e stampa “Apertura”, mentre il metodo chiudi() la chiude e stampa “Chiusura”. 3)
Una classe Lettore che estende Thread, con costruttore Lettore(Biblioteca b, int id), il cui corpo prende
in prestito il libro id dalla biblioteca b, si sospende per 10 millisecondi, quindi lo restituisce e termina.
4) Una classe Custode che estende Thread, con costruttore Custode(Biblioteca b, int giorni) che, per
giorni volte, apre la biblioteca b, si sospende per 1 secondo e poi la chiude. I thread sono avviati dai
rispettivi costruttori.