Операційні системи Зербіно Д.Д. / Slavikg
.docx10.Створити клас – ціле число. У закритій частині визначити поля – система числення і рядок символів, що відповідає числу. Визначити конструктор, деструктор, функції зміни значень полів і отримання їхніх значень, функції переведення числа у десяткову систему, переведення введеного десяткового числа у задану систему числення.
#include<iostream>//підключаємбібліотеку
/////////////////////////////////
usingnamespacestd;//підключаємпростірімен
/////////////////////////////////
#define MAX 10//максимальна довжина числа
/////////////////////////////////
classcile
{//закритачастина
private:
int s;//система числення
char c[MAX];//число
public://відкрита частина
cile();//кноструктор без параметрів
cile(int, char[]);//конструктор з параметрами
~cile();//деструктор
intgetS();//берем систему числення
char* getC();//берем речення
voidsetS();//зміна поля системичислення
voidsetC();//зміна поля числа
voiddesyatkova();//перевід числа в десяткове
voidsustema();//перевід з десяткового в сисетмучислення
};
/////////////////////////////////
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()
{
//пустийбо не виділялидинамічноїпамя'ті
}
/////////////////////////////////
intcile::getS()
{
//вертаєм систему числення
return s;
}
/////////////////////////////////
char* cile::getC()
{
//вертаємчисло(в виглядіречення)
return c;
}
/////////////////////////////////
voidcile::setS()
{
//зчитуємсистемучислення
cout<< "Vveditsustemychuslennya: ";
cin>> s;
}
/////////////////////////////////
voidcile::setC()
{
//зчислюємчисло
cout<< "Vveditchuslo: ";
cin>> c;
}
/////////////////////////////////
voidcile::desyatkova()
{
inti, k, z;
double n;
i = k = 0;//онулюєм
while(c[i] != '\0')//поки не дойдем до кінцяречення
i++;//збільшуємлічильник
n = i;//запамятовуємкількість
i = 0;
while(c[i] != '\0')
{
z = c[i] - '0';//беремоелемент з цілого числа
if(z > 10)//якщовонобільше за 10
z -= 7;//віднімаєм 7 для правиельності
k += z * pow(s, n - 1);//множим на степіньсистемичислення
n--;//зменшуємступінь
i++;//йдем до наступногоелемента
}
cout<< "Decyatkoveznachennya = " << k <<endl<<endl;//виводим результат
}
/////////////////////////////////
voidcile::sustema()
{
inti = 0, k, z, n;
charmas[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';//в кінці ставим нуль символ
//виводим
cout<< "z 10 v " << s << " = " << c <<endl<<endl;
}
/////////////////////////////////
int main()
{
//оголошуємобєкткласу
cile a;
//викликаємфункції для заданнясистемичислення
//і числа
a.setC();
a.setS();
//виводим на екран результат претворення в десяткову
//систему числення
a.desyatkova();
//берем в іншійсистемічислення
a.sustema();
//виводим наше число
cout<<a.getC();
//очищуєм буфер
fflush(stdin);
//затримка
getchar();
//вертаєм 0
return 0;
}