Esame di Calcolatori Elettronici Appello del 13/2/'02 (Telecomunicazioni) Esercizio 1) Realizzare in Assembler GNU la seguente funzione (scrivere sul file es1.s ed eseguire): struct ss {char ca; int v; char cb[5]; }; extern "C" ss f(ss ss1, ss& ss2) { ss ss3; int i; ss2.v = ss1.v+(int)ss1.cb[3]; ss3.v = ss2.v+(int)ss1.cb[1]; for (i = 0; i < 5; i++) { ss2.cb[i] = ss1.cb[i]+ss1.ca; ss3.cb[i] = ss2.cb[i]++;} ss3.ca=ss3.cb[2]; ss2.ca=ss3.cb[0]; return ss3; } Esercizio 2) Realizzare quanto richiesto in C++ (scrivere sul file es2.cc ed eseguire). Siano date le seguenti dichiarazioni, contenute nel file cc.h: class matrice { struct elem {char* nome; int num; }; elem** mat; int righe, colonne; public: matrice(int rig, int col) { righe=rig; colonne=col; mat=new elem* [rig]; for (int r=0; r void matrice::stampa() { for (int r=0; r #include #include void matrice::build(const char nome[]) { ifstream in(nome); if (!in) { cerr << "Errore nell'apertura del file " << nome << endl; exit(1); } if (mat!=0) { for (int r=0; r> righe >> colonne)) { cerr << "Errore nella lettura del file " << endl; exit(1); } char leggi[20]; mat=new elem* [righe]; for (int r=0; r> leggi >> mat[r][c].num)) { cerr << "Errore nella lettura del file " << endl; exit(1); } mat[r][c].nome=new char [strlen(leggi)+1]; strcpy(mat[r][c].nome,leggi); } } void matrice::saltras(const char nome[]) { ofstream out(nome); if (!out) { cerr << "Errore nell'apertura del file " << nome << endl; exit(1); } out << colonne << '\t' << righe << endl; for (int c=0; c #include "cc.h" struct ss { char ca; int v; char cb[5]; }; extern "C" ss f(ss ss1, ss& ss2); void stampa(const ss& s) { cout << "ca= " << s.ca << endl; cout << "v= " << s.v << endl; cout << "cb[]= "; for (int i=0; i<5; i++) cout << s.cb[i] << ' '; cout << endl << endl; } void main() { ss ss1={'0', 0, {'1','2','3','4','5'}}, ss2, ss3; ss3=f(ss1,ss2); cout << "Stampa della struttura ss2 " << endl; stampa(ss2); cout << "Stampa della struttura ss3 " << endl; stampa(ss3); matrice mat1, mat2, mat3, mat4; mat1.build("ingr"); cout << "Stampa della matrice mat1 " << endl; mat1.stampa(); mat2.build("ingr"); mat3=mat1+mat2; cout << "Stampa della matrice mat3 " << endl; mat3.stampa(); mat3.saltras("temp"); mat4.build("temp"); cout << "Stampa della matrice mat4 " << endl; mat4.stampa(); }