#include #include #include using namespace std; template class Matrica { public: Matrica() {} //Konstriktor koji postavlja matricu na odredjenu sirinu i visinu Matrica(unsigned s, unsigned v) { PromeniVelicinu(s,v); } //Konstruktor koji inicajlicuje matricu nekim elementom x Matrica(unsigned s, unsigned v, const T& x) { PromeniVelicinu(s,v); for (unsigned i = 0; i& operator [] (unsigned i) { return Elementi[i]; } const vector& operator [] (unsigned i) const { return Elementi[i]; } private: vector > Elementi; }; class IgraZivot { public: IgraZivot() { TekucaGeneracija = &Generacija1; NovaGeneracija = &Generacija2; } IgraZivot( const IgraZivot& i ) : Generacija1( *i.TekucaGeneracija), Generacija2( *i.NovaGeneracija) { TekucaGeneracija = &Generacija1; NovaGeneracija = &Generacija2; } IgraZivot& operator = (const IgraZivot& i) { if( this != &i ) { Generacija1 = *i.TekucaGeneracija; Generacija2 = *i.NovaGeneracija; TekucaGeneracija = &Generacija1; NovaGeneracija = &Generacija2; } return *this; } void IzracunajSledecuGeneraciju() { unsigned s = TekucaGeneracija->Sirina(); unsigned v = TekucaGeneracija->Visina(); for (unsigned i = 0; i* t = TekucaGeneracija; TekucaGeneracija = NovaGeneracija; NovaGeneracija = t; } void Citaj( istream& istr ) { unsigned s,v; istr >> s >> v; Generacija1.PromeniVelicinu(s,v); Generacija2.PromeniVelicinu(s,v); for( unsigned i=0; i> c; (*TekucaGeneracija)[j][i] = c=='X'; } } } void Prikazi( ostream& ostr ) { ostr << TekucaGeneracija->Sirina() << ' ' << TekucaGeneracija->Visina() << endl; ostr << (' '); for ( unsigned i = 0; i < TekucaGeneracija->Sirina(); i++) ostr << ('-'); ostr << ('\n'); for( unsigned i=0; iVisina(); i++ ) { ostr << ('|'); for( unsigned j=0; jSirina(); j++ ) ostr << ((*TekucaGeneracija)[j][i] ? 'O' : ' '); ostr << ('|'); ostr << endl; } ostr << (' '); for ( unsigned i = 0; i < TekucaGeneracija->Sirina(); i++) ostr << ('-'); ostr << ('\n'); } private: Matrica Generacija1; Matrica Generacija2; Matrica* TekucaGeneracija; Matrica* NovaGeneracija; }; main() { // pravimo pocetnu konfiguraciju IgraZivot igra; ifstream dat("zivot.dat"); igra.Citaj(dat); dat.close(); // ponavljamo: char c = ' '; while( c!='k' ){ // 1. prikazivanje igra.Prikazi( cout ); // 2. unosenje komande cout << "Upisi i (naredna iteracija), c (citanje), s (snimanje) ili k (kraj): "; cin >> c; // 3. postupanje po komandi switch( c ){ case 'i': igra.IzracunajSledecuGeneraciju(); break; case 's': { // snimanje u datoteku string s; cout << "Upisi ime datoteke: "; cin >> s; ofstream dat(s.c_str()); igra.Prikazi(dat); break; } case 'c': { // citanje iz datoteke string s; cout << "Upisi ime datoteke: "; cin >> s; ifstream dat(s.c_str()); igra.Citaj(dat); break; } }; } return 0; }