Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2366.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
402.43 Кб
Скачать

Int getDigitByPosition(p_number V,int pos) {

if(pos >= strlen(v.number)) return -1;

switch(v.number[pos]) {

case '0' : return 0;

case '1' : return 1;

case '2' : return 2;

case '3' : return 3;

case '4' : return 4;

case '5' : return 5;

case '6' : return 6;

case '7' : return 7;

case '8' : return 8;

case '9' : return 9;

case 'A' : return 10;

case 'B' : return 11;

case 'C' : return 12;

case 'D' : return 13;

case 'E' : return 14;

case 'F' : return 15;

case 'a' : return 10;

case 'b' : return 11;

case 'c' : return 12;

case 'd' : return 13;

case 'e' : return 14;

case 'f' : return 15;

default : return -1;

}

}

Int transferTo10(p_number V) {

int result = 0;

int len = strlen(v.number);

for (int index = 0; index < len; index++) {

int digit = getDigitByPosition(v,index);

if(digit != -1) {

result = result+digit*Power(v.scale_of_notation,len-index-1);

}

}

return result;

}

char* transferFrom10(int numb,int scale_of_notation) {

int dividend = numb;

int index = 0;

char revers[200];

number[200];

// используется операция деления в столбик

while(dividend >= scale_of_notation) {

int rest = dividend%scale_of_notation;

revers[index] = getCharByDigit(rest);

index++;

dividend = dividend/scale_of_notation;

}

revers[index] = getCharByDigit(dividend);

index++;

revers[index] = '\0';

// переворачиваем результат

for (int ind = 0; ind < index; ind++) {

number[ind] = revers[index - ind - 1];

}

number[index] = '\0';

return number;

}

Класс. Так как любой метод класса имеет доступ к полям этого класса, то передавать в метод необходимо только дополнительную информацию.

char * P_number_class::getNumber()

{

return number;

}

unsigned int P_number_class::getScaleOfNotation()

{

return scale_of_notation;

}

void P_number_class::init(char *n,int s) // метод присвоения полям значений

{

int string_length = strlen(n);

strncpy(number,n,string_length);

number[string_length] = '\0';

scale_of_notation = s;

}

void P_number_class::display() // метод вывода полей на экран

{ cout << "\n number: " << number << "\n scale_of_notation: " << scale_of_notation; }

void P_number_class::read() // метод ввода полей с клавиатуры

{ cout << "number: "; cin >> number;

cout << " scale_of_notation: "; cin >> scale_of_notation;

}

char* P_number_class::toString() // метод преобразования в строку

{

char string[25];

return strcat(strcat(number," в системе счисления "), itoa(scale_of_notation,string,10));

}

void P_number_class::add(P_number_class &x) // метод сложения

{

int num10 = transferTo10() + x.transferTo10();

transferFrom10(num10);

}

void P_number_class::sub(P_number_class &x) // метод вычитания

{

int num10 = transferTo10() - x.transferTo10();

transferFrom10(num10);

}

void P_number_class::mul(P_number_class &x) // метод умножения

{

int num10 = transferTo10() * x.transferTo10();

transferFrom10(num10);

}

void P_number_class::div(P_number_class &x) // метод деления

{

int num10 = transferTo10()/x.transferTo10();

transferFrom10(num10);

}

bool P_number_class::equal(P_number_class &x) // метод проверки на равенство

{

return (transferTo10() == x.transferTo10());

}

bool P_number_class::greate(P_number_class &x) // метод проверки на то, что число больше

{

return (transferTo10() > x.transferTo10());

}

bool P_number_class::less(P_number_class &x) // метод проверки на то, что число меньше

{

return (transferTo10() < x.transferTo10());

}

char P_number_class::getCharByDigit(int digit) {

switch(digit) {

case 0 : return '0';

case 1 : return '1';

case 2 : return '2';

case 3 : return '3';

case 4 : return '4';

case 5 : return '5';

case 6 : return '6';

case 7 : return '7';

case 8 : return '8';

case 9 : return '9';

case 10 : return 'A';

case 11 : return 'B';

case 12 : return 'C';

case 13 : return 'D';

case 14 : return 'E';

case 15 : return 'F';

default : return '\0';

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]