C++ - Examen Final I 2008 - Matrici

S-ar putea să vă placă și

Sunteți pe pagina 1din 2

Examen Programare Orientata Obiect

Sa se propuna 2 clase care sa gestioneze operatii cu vectori si matrici cu elemente siruri de caractere. Astfel, se va face citire elemente vector/matrice dintr-un fisier text; afisarea elementelor vectorului/matricii pe ecran; Pentru vector vor fi implementate si alte operatii (vezi in text ) ; Se va implementa o ierarhie de clase, avand ca baza, clasa CObiect. Din ea se vor deriva cele 2 clase de lucru: clasa CVector si CMatrice. Fiecare obiect (vector sau matrice) are un nume, sir de caractere care va fi transmis ca parametru in constructorul obiectului. Clasa CObiect va contine cel putin urmatoarele functii virtuale pure care vor fi implementate la nivelul claselor derivate: - void CObiect::loadFromFile (char *numefis) responsabila cu incarcarea datelor obiectului din fisier - void CObiect::print () responsabila cu afisarea datelor obiectului pe ecran Tratarea erorilor se va face prim mecanismul exceptiilor printr-o clasa speciala numita CExceptie. Clasele CObiect, CVector si CMatrice vor fi implementate astfel incat poata fi rulata corect urmatoarea secventa de program: int main () { CObiect *pV, *pM; try { pV = new CVector (Vector 1); // instantierea unui obiect vector; initial, toate elementele sale sunt NULLe (0.5p) pV->loadFromFile (vector.txt); // incarcarea elementelor vectorului din fis (0.5p) pV->print(); // afisare pe ecran a numelui si elementelor vectorului (0.5p) pM = new CMatrice (Matrice 1); //instantierea unui obiect matrice;initial, toate elementele sale sunt NULLe (0.5p) pM->loadFromFile (matrice.txt); // incarcarea elementelor matricii din fis (0.5p): pM->print (); // afisare pe ecran a numelui si elementelor matricii, in forma matriciala (pe linii si coloane) (0.5p) /* In clasa CVector, se defineste operatorul de translatare ( v ^ k ); Fiecare element al vectorului se va transforma din elemx in elemx_la_k (in functie de val lui k); (1p) */ int k = 2; CVector v2 (Vector 2); v2.loadFromFile (vector.txt); v2 ^ k; // dupa executie, elem vectorului vor fi: elem_1_la_2 elem_2_la_2 elem_3_la_2 v2 . print ();

etc...

/* Se defineste operatorul de inmultire cu un scalar (v * k); Acesta duce la obtinerea unui nou vector in care fiecare element al vectorului initial se exapandeaza de k ori (concatenarea sa cu el insusi de k ori); Atentie: spre deosebire de operatia de mai sus, prin aceasta operatie, se va obtine alt vector, adica nu se va altera vectorul initial (3p) */ CVector v3 (Vector 3); v3.loadFromFile (vector.txt); v3.print (); v 3 = v2 * 3; v3.print (); /* Dupa executie operatiei de inmultire cu scalar , de mai sus, elem vectorului v2 vor fi neschimbate, iar cele ale vectorului v3 vor fi: elem_1_la_2elem_1_la_2elem_1_la_2 elem_2_la_2elem_2_la_2elem_2_la_2 etc.... */ // distrugerea corecta a obiectelor (1p) delete pV; delete pM;

printf (\nSuccess...\n); return 0; } catch (CExceptie e) { // implementarea clasei de exceptii si tratarea corecta a erorilor (1p) printf (\nEroare de executie: \%s\ (%d) \n, e.getMsg(), e.getCode ()); return (e.getCode ()); //..... } } Observatii: 1) Fisierele de intrare pentru vectori contin pe prima linie nr de elemente, iar pe urmatoarea linie, elementele vectorului separate prin spatii; exemplu: 4 elem_1 elem_2 elem_3 elem_4 2) Fisierele de intrare pentru matrici contin pe prima linie nr de linii si nr de col separate prin spatiu iar pe urmatoarea linie, elementele matricii separate prin spatiu si organizate pe linie (mai intai elem primei linii, apoi elem liniei 2, etc.); exemplu: 34 elem_11 elem_12 elem_13 elem_14 elem_21 elem_22 elem_23 elem_24 elem_31 elem_32 elem_33 elem_34 3) Clasa CMatrice va fi de forma: class CMatrice : public CObiect { char * mValues[50][50]; //.... }; 4) Clasa CVector va fi de forma: class CVector: public CObiect { char * mValues[50]; //.... }; 6) Afisarea pe ecran a elementelor unui obiect vector (prin metoda print () ) se face sub forma: Elementele vectorului <numevector> sunt: elem1 elem2 elem3 5) Afisarea pe ecran a elementelor unui obiect matrice (prin metoda print () ) se face sub forma matriciala (pe linii si coloane), sub forma: Elementele matricii <numematrice> sunt: elem_11 elem_12 elem_13 elem_14 elem_21 elem_22 elem_23 elem_24 elem_31 elem_32 elem_33 elem_34 7) Alocarea de memorie, utilizata pentru stocarea elementelor obiectelor vectorilor si matricilor se va face dinamic, utilizand operatorul new. 8) Pentru tratarea exceptiilor, se va implementa o clasa speciala de execeptii CExeceptie care va avea un cod de exceptie (valoare intreaga !=0 ) si un mesaj de eroare (char *). Clasa va avea un constructor care primeste ca parametrii cele 2 valori. Se vor trata cel putin urmatoarele cazuri de eroare: deschiderea fisierelor (cod=1) si alocarea dinamica de memorie (cod=2) . 8) Ca indicatie, pentru operatia de translatare se poate folosi functia itoa (din stdlib.h), functie de conversie a unui intreg k la corespondentul sau ca sir; exemplu de utilizare: char buff[20]; itoa (k, buff, 10); //daca k= 32, atunci in buff se obtine sirul 32 10) Din oficiu, se acorda 1p

S-ar putea să vă placă și