#include #include "vector.h" // hodnoty rozmeru pole pro uvodni ladeni // pro dalsi ladeni zkuste matice ruznych rozmeru #define X 5 using std::cout; using std::cerr; using std::endl; /**\brief main function * \param argv argv - not used * \param argc argc - not used * \return Error code [0=OK; ... ] */ int main(int argv, char *argc[]) { cout << "Zacatek programu" << endl; #if 0 TVector i1 = { nullptr,0,0 }, i2 = { nullptr,0,0 }, i3; // i3 nulovano pomoci nastaveni implicitnich hodnot v definici struktury TVector d1; // d1 nulovano pomoci nastaveni implicitnich hodnot v definici struktury TVector<> d2 = { nullptr,0,0 }, d3 = { nullptr,0,0 }; // implicitne double try { cout << "\nAlokuju.........\n"; Allocate(d1, X); Allocate(d2, X, 2.); Allocate(d3, X); Allocate(i1, X); // nesmim naalokovat dvakrat try { Allocate(i1, X); } catch(enum TError &a) { if(a == EAlreadyAllocated) cout << "Osetreni vicenasobne alokace funguje spravne\n"; else if(a == ENoMemory) cout << "\nGenerovana vyjimka pro nedostatek pameti - overte spravnost \n"; else cerr << "Doslo k neocekavane chybe: " << ErrorStr[a] << endl; } // nelze pokracovat pokud nelze naalokovat size_t kl = lock_alloc(0); // blokovani alokaci pomoci funkce knihovny check TVector i4; try { Allocate(i4, X); } catch(enum TError &a) { if(a == EAlreadyAllocated) cout << "Generovana vyjimka pro osetreni vicenasobne alokace - overte spravnost\n"; else if(a == ENoMemory) cout << "\nOsetreni nedostatku pameti funguje spravne\n"; else cerr << "Doslo k neocekavane chybe: " << ErrorStr[a] << endl; } unlock_alloc(kl); // povoleni alokaci Print(d1); cout << endl; // tiskne double nulovany Print(d2); cout << endl; // tiskne double inicializovany na hodnotu Print(i1); cout << endl; // tiskne int Print(i4); cout << endl; // tisk pro nealokovanou proměnnou // Pristup do pole SetAt(d1, 2, 4.0); ///(vect,x,hodnota) double val = At(d1, 2); ///(vect,x) vraci hodnotu Print(d1); cout << "\nziskana hodnota : " << val << endl; Add(d3, d1, d2); Print(d3); cout << "\nDealokuju.........\n"; Deallocate(d1); Deallocate(d1); // nesmim odalokovat dvakrat Deallocate(d2); Deallocate(d3); Deallocate(i1); Deallocate(i2); Deallocate(i3); Deallocate(i4); // musim byt schopen opetovne pouzit prazdnou promennou Allocate(d1, X, 2.0); Print(d1); Deallocate(d1); // musi pracovat s prazdnymi (odalokovanymi) - tiskne nealokovano cout << "\n"; Print(i1); Print(d2); try { // zkuste osetrit v Add nasledujici pripady - doplnte tisk do sekce catch #if 0 // ukol 1 Add(d1, d2, d3); // scitani prazdnych vektoru - vrati chybu #endif #if 0 // ukol 2 Allocate(d1, X); Allocate(d2, X ); Add(d3, d1, d2); // vysledny vektor neni alokovan - alokovat ve funkci Add Deallocate(d1); Deallocate(d2); Deallocate(d3); #endif #if 0 // ukol 3 Allocate(d1, X); Allocate(d2, X+3 ); Add(d3,d1,d2); // chyba scitani vektoru ruznych delek #endif #if 0 // ukol 4 Allocate(d1, X); Allocate(d2, X ); Allocate(d3, X+3 ); Add(d3, d1, d2); // vystupni vektor alokovan na jiny rozmer - v Add prealokovat na spravny rozmer Deallocate(d1); Deallocate(d2); Deallocate(d3); #endif } catch(enum TError &a) { if(a == ENotAllocated) cout << "Osetreni souctu prazdnych mnozin funguje spravne\n"; else cerr << "Doslo k neocekavane chybe: " << ErrorStr[a] << endl; } } // veliko try catch(enum TError &a) { cerr << "Doslo k chybe : " << ErrorStr[a] << endl; return(1); } catch(...) { cerr << "Doslo k nezname neocekavane chybe!\n"; return(2); } #endif return 0; }