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.