Операційні системи Зербіно Д.Д. / Slavikg (1)
.docx10. Створити клас – ціле число. У закритій частині визначити поля – система числення і рядок символів, що відповідає числу. Визначити необхідні конструктори, методи доступу, деструктор.Перевантажити потокові операції введення і виведення, вважаючи що слід вводити десяткові числа і систему числення, а виводити – число у обраній системі.
#include<iostream>//підключаєм бібліотеку
/////////////////////////////////
usingnamespacestd;//підключаєм простір імен
/////////////////////////////////
#define MAX 10//максимальна довжина числа
/////////////////////////////////
class cile
{//закрита частина
private:
int s;//система числення
char c[MAX];//число
public://відкрита частина
cile();//кноструктор без параметрів
cile(int, char[]);//конструктор з параметрами
~cile();//деструктор
void sustema();//перевід з десяткового в сисетму числення
//перевизначаєм потокове введення і виведення
friend istream& operator >> (istream&, cile&);
friend ostream& operator << (ostream&, cile&);
};
/////////////////////////////////
istream& operator >> (istream& is, cile& x)
{
//Виводим повідомлення користувачу
//і зчитуємо дані
cout << "Vvedit sustemy chuslennya: ";
is >> x.s;
cout << "Vvedit chuslo: ";
is >> x.c;
cout << endl;
return is;
}
/////////////////////////////////
ostream& operator << (ostream& os, cile& x)
{
//переводим число в задану систему координат
x.sustema();
//виводим на екран
os << "Chuslo v " << x.s << " sustemi chuslennya = " << x.c << endl;
return os;
}
/////////////////////////////////
cile::cile()
{
s = 0;//онулюєм
c[0] = '1';//робим число 1
c[1] = '\0';
}
/////////////////////////////////
cile::cile(int s, char c[MAX])
{
//переприсвоюєм значення параметрам
this->s = s;
//копіюєм рядок
strcpy(this->c, c);
}
/////////////////////////////////
cile::~cile()
{
//пустий бо не виділяли динамічної памя'ті
}
/////////////////////////////////
void cile::sustema()
{
int i = 0, k, z, n;
char mas[MAX * 2];//додаткровий масив для тимчасового збереження результату
k = atoi(c);//перетворюєм речення в число
while(k)//поки к недорівнює 0
{
z = k % s;//берем остачу від ділення
if(z < 10)//якщо вона менша за 10
mas[i++] = z + '0';//записуєм її СИМВОЛ в масив
else//якщо більша записуєм з деякою відмінністю
mas[i++] = z + 'A' - 10;
k /= s;//ділим число на систему числення
}
n = i;//запамятовуєм кількість
int j = 0;
while(i > 0)//поки не дойдем до початку додаткового масиву
{
c[j] = mas[i - 1];//копіюєм в дані класу
j++;//збільшуєм
i--;//зменшуєм
}
c[j] = '\0';//в кінці ставим нуль символ
}
/////////////////////////////////
int main()
{
//оголошуєм обєкт класу
cile a;
//зчитуємо дані
cin >> a;
//виводим результат
cout << a;
//очищуємбуфер
fflush(stdin);
//затримка
getchar();
//вертаєм 0
return 0;
}