#include "rzymskie.h" #include #include using namespace std; //___________________________________________________________________ int wartoscR(char a) { switch (a) { case 'M': return 1000; case 'D': return 500; case 'C': return 100; case 'L': return 50; case 'X': return 10; case 'V': return 5; case 'I': return 1; } return 0; } //___________________________________________________________________ void rzymskie::setWartL(int a) { wartoscL = a; convertLnaC(); } //___________________________________________________________________ void rzymskie::setWartC(char a[N]) { strcpy_s(wartoscC, a); convertCnaL(); } //___________________________________________________________________ rzymskie::rzymskie() { cout << endl << "KONSTRUKTOR1" << endl; } //___________________________________________________________________ rzymskie::rzymskie(int a):wartoscL(a) { cout << endl << "KONSTRUKTOR2" << endl; convertLnaC(); } //___________________________________________________________________ rzymskie::rzymskie(char a[N]) { cout << endl << "KONSTRUKTOR3" << endl; strcpy_s(wartoscC, a); convertCnaL(); } //___________________________________________________________________ rzymskie::~rzymskie() { cout << endl << "DESTRUKTOR" << endl; } //___________________________________________________________________ void rzymskie::convertCnaL() { int a=wartoscR(wartoscC[0]), i = 1, pom; while (wartoscC[i] != 0) { pom = wartoscR(wartoscC[i]); i++; if (wartoscC == 0) { a += pom; wartoscL = a; return; } else if(wartoscR(wartoscC[i]) > pom) { a -= pom; } else { a += pom; } } wartoscL = a; } //___________________________________________________________________ void rzymskie::convertLnaC() { int pom = wartoscL/1000, i; for (i = 0; i < pom; i++) wartoscC[i] = 'M'; pom = wartoscL % 1000 / 100; switch (pom) { case 9: wartoscC[i] = 'C'; wartoscC[i + 1] = 'M'; i += 2; break; case 8: wartoscC[i] = 'D'; wartoscC[i + 1] = 'C'; wartoscC[i + 2] = 'C'; wartoscC[i + 3] = 'C'; i += 4; break; case 7: wartoscC[i] = 'D'; wartoscC[i + 1] = 'C'; wartoscC[i + 2] = 'C'; i += 3; break; case 6: wartoscC[i] = 'D'; wartoscC[i + 1] = 'C'; i += 2; break; case 5: wartoscC[i] = 'D'; i++; break; case 4: wartoscC[i] = 'C'; wartoscC[i + 1] = 'D'; i += 2; break; case 3: wartoscC[i] = 'C'; wartoscC[i + 1] = 'C'; wartoscC[i + 2] = 'C'; i += 3; break; case 2: wartoscC[i] = 'C'; wartoscC[i + 1] = 'C'; i += 2; break; case 1: wartoscC[i] = 'C'; i++; break; } pom = wartoscL % 100 / 10; switch (pom) { case 9: wartoscC[i] = 'X'; wartoscC[i + 1] = 'C'; i += 2; break; case 8: wartoscC[i] = 'L'; wartoscC[i + 1] = 'X'; wartoscC[i + 2] = 'X'; wartoscC[i + 3] = 'X'; i += 4; break; case 7: wartoscC[i] = 'L'; wartoscC[i + 1] = 'X'; wartoscC[i + 2] = 'X'; i += 3; break; case 6: wartoscC[i] = 'L'; wartoscC[i + 1] = 'X'; i += 2; break; case 5: wartoscC[i] = 'L'; i++; break; case 4: wartoscC[i] = 'X'; wartoscC[i + 1] = 'L'; i += 2; break; case 3: wartoscC[i] = 'X'; wartoscC[i + 1] = 'X'; wartoscC[i + 2] = 'X'; i += 3; break; case 2: wartoscC[i] = 'X'; wartoscC[i + 1] = 'X'; i += 2; break; case 1: wartoscC[i] = 'X'; i++; break; } pom = wartoscL % 10; switch (pom) { case 9: wartoscC[i] = 'I'; wartoscC[i + 1] = 'X'; i += 2; break; case 8: wartoscC[i] = 'V'; wartoscC[i + 1] = 'I'; wartoscC[i + 2] = 'I'; wartoscC[i + 3] = 'I'; i += 4; break; case 7: wartoscC[i] = 'V'; wartoscC[i + 1] = 'I'; wartoscC[i + 2] = 'I'; i += 3; break; case 6: wartoscC[i] = 'V'; wartoscC[i + 1] = 'I'; i += 2; break; case 5: wartoscC[i] = 'V'; i++; break; case 4: wartoscC[i] = 'I'; wartoscC[i + 1] = 'V'; i += 2; break; case 3: wartoscC[i] = 'I'; wartoscC[i + 1] = 'I'; wartoscC[i + 2] = 'I'; i += 3; break; case 2: wartoscC[i] = 'I'; wartoscC[i + 1] = 'I'; i += 2; break; case 1: wartoscC[i] = 'I'; i++; break; } wartoscC[i] = 0; } //___________________________________________________________________ istream& operator>> (istream& in, rzymskie& a) { char z; cout << "1-int 2-char" << endl; cin >> z; if (z == '1') { cout << "Podaj int" << endl; int b; cin >> b; a.setWartL(b); } else { cout << "Podaj chary" << endl; char s[N]; cin >> s; a.setWartC(s); } return in; } //___________________________________________________________________ ostream& operator<< (ostream& out, const rzymskie& a) { out << endl << "Liczba " << a.wartoscL << " w rzymskim " << a.wartoscC << endl; return out; }