#include "rzymskie.h"
#include <string>
#include <iostream>
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;
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}