Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/114: Рейтинг темы: голосов - 114, средняя оценка - 4.74
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
1

Перевод в 9-чную систему счисления

02.01.2012, 13:23. Показов 22424. Ответов 122
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть задача, что бы решить ее до конца мне надо сделать перевод из 10-тичной(можно любой другой) в девятиричную систему счисления
я бы это сделал сам, если бы не странность системы.
В задание звучит так: Рассмотрим девятеричную позиционную систему счисления с цифрами { B, A, 0, 1, 2, 3, 4, 5, 6 }, где цифра A имеет значение -1, а цифра B – значение -2.

подскажите как сделать этот перевод(функцию или алгоритм)

Добавлено через 49 минут
up
есть идеи?

 Комментарий модератора 
По просьбе одного из авторов, в связи с тем, что тема растянулась, ссылки на решения в этой теме:
Решение 1
Решение 2
Решение 3
Решение 4
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2012, 13:23
Ответы с готовыми решениями:

"Перевести натуральное число из 8-ричной в 10-чную систему счисления"
Добрый вечер) Друзья помогите пожалуйста составить программку) Условие задачи: Целое длинное...

Рекурсия: перевод целого числа из десятичной системы счисления в 9 систему счисления
Написать рекурсивную функцию перевода целого числа из десятичной системы счисления в 9-чную...

Перевод числа из 8-ичной системы счисления в 16-ричную систему счисления и обратно.
Написать программу на С++. Перевод из 8 системы счисления в 16 систему счисления и обратно из 16...

Перевод натурального числа из десятичной системы счисления в систему счисления по основанию
Здравствуйте. Я хотела бы попросить у вас помощи. Я понимаю, что это не очень красиво, но вдруг...

122
Заблокирован
04.01.2012, 10:32 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от greeezz Посмотреть сообщение
а вот обратно перевести.. вот это уже интереснее.
не просто интереснее, а жуткий гемор . Сказать дальше? перевод из десятичной сс в исходную требует наличия функций сложения, умножения и возведения в степень чисел этой сс. А когда они есть то и переводить ничего никуда не надо.
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
04.01.2012, 12:05  [ТС] 22
Цитата Сообщение от greeezz Посмотреть сообщение
Все же теоретически меня не оставляет мысль попробовать сделать перевод в десятичную.
это я реализовал(там есть мой код несколько постов выше)

а вот переводить обратно как рас я запнулся и запостил на форум
0
Заблокирован
04.01.2012, 12:21 23
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
а вот переводить обратно как рас я запнулся и запостил на форум
вы еще не поняли? надо программно реализовать АЛУ для чисел, в которых один разряд имеет 9 состояний.
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
04.01.2012, 13:23  [ТС] 24
я понял
я ответил greeezz
0
278 / 173 / 21
Регистрация: 10.07.2011
Сообщений: 441
05.01.2012, 07:25 25
........................
Добавлено через 5 часов 50 минут
Вобщем доработал конвертацию.
Из 9СС отрицательные и положительные целые числа переводятся в десятичную и обратно.
Текущая версия:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include <iostream>
using std::cout;
 
#include <cstring>
using std::string;
 
#include <cmath>
 
int toDec(string); //convert to dec
string toN(int);   //convert from dec positive numbers to 9-system.
string toMinusN(int); //convert from dec negative numbers to 9-system.
string calcul(int); //perform calculation
 
int main() {
 
    int inDec;
 
    cout << "24 + 5A = ";
    inDec = toDec("24") + toDec("5A");
    cout << calcul(inDec) << "\n";
 
    cout << "B5 + 61 = ";
    inDec = (toDec("B5") + toDec("61"));
    cout << calcul(inDec) << "\n";
 
    cout << "52 * A6 = ";
    inDec = (toDec("52") * toDec("A6"));
    cout << calcul(inDec) << "\n";
 
    cout << "312 * 41B= ";
    inDec = (toDec("312") + toDec("41B"));
    cout << calcul(inDec) << "\n";
 
    cout << "A1A * B2B = ";
    inDec = (toDec("A1A") * toDec("B2B"));
    cout << calcul(inDec) << "\n";
 
    return 0;
}
 
string calcul(int inDec) {
    if (inDec < 0) {
        return toMinusN(inDec);
    }
    return toN(inDec);
 
}
 
//convert to dec
int toDec(string number) {
    int result = 0;
    int numberSize;
 
    numberSize = number.size();
    for (int i = 0; i < numberSize; ++i) {
        if (number.at(i) == 'A') {
            result += -1 * pow(9, numberSize - 1 - i);
        } else if (number.at(i) == 'B') {
            result += -2 * pow(9, numberSize - 1 - i);
        } else {
            result = result + (pow(9, numberSize - 1 - i) * (number.at(i) - 48));
        }
    }
    return result;
}
 
//convert ppositiv numbers from dec
string toN(int number) {
    char digits[3] = { 'B', 'A', '0' };
    string result;
    size_t resultSize;
    char buf;
 
    while (number > 0) {
        result += number % 9 + '0';
        number /= 9;
    }
 
    resultSize = result.size();
 
    for (size_t i = 0; i < resultSize; ++i) {
        if ((int(result.at(i)) - 48) > 6) {
            if (i + 1 == resultSize) {
                result += "0";
            }
            if (result.at(i + 1) == 'A') {
                result.at(i + 1) = '0';
            } else if (result.at(i + 1) == 'B') {
                result.at(i + 1) = 'A';
            } else {
                result.at(i + 1) = ((int(result.at(i + 1)) - 48) + 1) + '0';
            }
            result.at(i) = digits[(int(result.at(i)) - 48) - 6 - 1];
        }
    }
 
    resultSize = result.size();
 
    for (size_t i = 0; i < resultSize / 2; ++i) {
        buf = result.at(i);
        result.at(i) = result.at((resultSize - 1) - i);
        result.at((resultSize - 1) - i) = buf;
    }
    return result;
}
 
//convert negative numbers from dec
string toMinusN(int number) {
    string result, buf;
    size_t resultSize;
    bool shift = false;
    number *= -1;
 
    if (number == 0) {
        result = '0';
    } else {
        while (number > 0) {
            result += number % 9 + '0';
            number /= 9;
        }
 
        resultSize = result.size();
 
        for (size_t i = 0; i < resultSize; ++i) {
            if ((int(result.at(i)) - 48) == 2 && shift == false) {
                buf += 'B';
            } else if ((int(result.at(i)) - 48) == 2 && shift == true) {
                buf += "6";
                shift = true;
            } else {
                if ((int(result.at(i)) - 48) == 1) {
                    if (shift == true) {
                        buf += 'B';
                        shift = false;
                    } else {
                        buf += 'A';
                    }
                } else {
                    if ((int(result.at(i)) - 48) == 0) {
                        if (shift == true) {
                            buf += 'A';
                            shift = false;
                        } else {
                            buf += '0';
                        }
                    } else {
                        if (shift == true) {
                            buf += (8 - ((int(result.at(i)) - 48))) + '0';
                        } else {
                            buf += (9 - ((int(result.at(i)) - 48))) + '0';
                            shift = true;
                        }
                    }
                }
            }
        }
        if (shift == true) {
            buf += 'A';
            shift = false;
        }
 
        resultSize = buf.size();
        result.clear();
 
        for (size_t i = 0; i < resultSize; ++i) {
            result += buf.at(resultSize - 1 - i);
        }
    }
    return result;
 
}
по большому счету теперь можно вообще любые операция выполнять.

ВЫВОД ПРИМЕРОВ ЗАДАЧИ

24 + 5A = 1B3
B5 + 61 = 46
52 * A6 = B23
312 * 41B= 1B20
A1A * B2B = 15552


ТЕСТЫ ОТРИЦАТЕЛЬНЫХ ЧИСЕЛ

-1 A -10 AA
-2 B -20 BB
-3 A6 -30 A56
-4 A5 -40 A45
-5 A4 -50 A34
-6 A3 -60 A23
-7 A2 -70 A12
-8 A1 -80 A01
-9 A0 -90 AA0
-10 AA -100 ABA
-11 AB -110 B6B
-12 B6 -120 B46
-13 B5 -130 B35
-14 B4 -140 B24
-15 B3 -150 B13
-16 B2 -160 B02
-17 B1 -170 BA1
-18 B0 -180 BB0
-19 BA -190 A66A
-20 BB -200 A65B
-21 A66 -210 A636
-22 A65 -220 A625
-23 A64 -230 A614
-24 A63 -240 A603
-25 A62 -250 A6A2
-26 A61 -260 A6B1
-27 A60 -270 A560
-28 A6A -280 A55A
-29 A6B -290 A54B
-30 A56 -300 A526
-31 A55 -310 A515
-32 A54 -320 A504
-33 A53 -330 A5A3
-34 A52 -340 A5B2
-35 A51 -350 A461
-36 A50 -360 A450
-37 A5A -370 A44A
-38 A5B -380 A43B
-39 A46 -390 A416
-40 A45 -400 A405
-41 A44 -410 A4A4
-42 A43 -420 A4B3
-43 A42 -430 A362
-44 A41 -440 A351
-45 A40 -450 A340
-46 A4A -460 A33A
-47 A4B -470 A32B
-48 A36 -480 A306
-49 A35 -490 A3A5
-50 A34 -500 A3B4
-51 A33 -510 A263
-52 A32 -520 A252
-53 A31 -530 A241
-54 A30 -540 A230
-55 A3A -550 A22A
-56 A3B -560 A21B
-57 A26 -570 A2A6
-58 A25 -580 A2B5
-59 A24 -590 A164
-60 A23 -600 A153
-61 A22 -610 A142
-62 A21 -620 A131
-63 A20 -630 A120
-64 A2A -640 A11A
-65 A2B -650 A10B
-66 A16 -660 A1B6
-67 A15 -670 A065
-68 A14 -680 A054
-69 A13 -690 A043
-70 A12 -700 A032
-71 A11 -710 A021
-72 A10 -720 A010
-73 A1A -730 A00A
-74 A1B -740 A0AB
-75 A06 -750 AA66
-76 A05 -760 AA55
-77 A04 -770 AA44
-78 A03 -780 AA33
-79 A02 -790 AA22
-80 A01 -800 AA11
-81 A00 -810 AA00
-82 A0A -820 AAAA
-83 A0B -830 AABB
-84 AA6 -840 AB56
-85 AA5 -850 AB45
-86 AA4 -860 AB34
-87 AA3 -870 AB23
-88 AA2 -880 AB12
-89 AA1 -890 AB01
-90 AA0 -900 ABA0
-91 AAA -910 ABBA
-92 AAB -920 B66B
-93 AB6 -930 B646
-94 AB5 -940 B635
-95 AB4 -950 B624
-96 AB3 -960 B613
-97 AB2 -970 B602
-98 AB1 -980 B6A1
-99 AB0 -990 B6B0
-100 ABA -1000 B56A

ТЕСТЫ ПОЛОЖИТЕЛЬНЫХ ЧИСЕЛ

1 1 _____ 10 11
2 2 _____ 20 22
3 3 _____ 30 33
4 4 _____ 40 44
5 5 _____ 50 55
6 6 _____ 60 66
7 1B _____ 70 1AB
8 1A _____ 80 10A
9 10 _____ 90 110
10 11 _____ 100 121
11 12 _____ 110 132
12 13 _____ 120 143
13 14 _____ 130 154
14 15 _____ 140 165
15 16 _____ 150 2B6
16 2B _____ 160 20B
17 2A _____ 170 21A
18 20 _____ 180 220
19 21 _____ 190 231
20 22 _____ 200 242
21 23 _____ 210 253
22 24 _____ 220 264
23 25 _____ 230 3B5
24 26 _____ 240 3A6
25 3B _____ 250 31B
26 3A _____ 260 32A
27 30 _____ 270 330
28 31 _____ 280 341
29 32 _____ 290 352
30 33 _____ 300 363
31 34 _____ 310 4B4
32 35 _____ 320 4A5
33 36 _____ 330 406
34 4B _____ 340 42B
35 4A _____ 350 43A
36 40 _____ 360 440
37 41 _____ 370 451
38 42 _____ 380 462
39 43 _____ 390 5B3
40 44 _____ 400 5A4
41 45 _____ 410 505
42 46 _____ 420 516
43 5B _____ 430 53B
44 5A _____ 440 54A
45 50 _____ 450 550
46 51 _____ 460 561
47 52 _____ 470 6B2
48 53 _____ 480 6A3
49 54 _____ 490 604
50 55 _____ 500 615
51 56 _____ 510 626
52 6B _____ 520 64B
53 6A _____ 530 65A
54 60 _____ 540 660
55 61 _____ 550 1BB1
56 62 _____ 560 1BA2
57 63 _____ 570 1B03
58 64 _____ 580 1B14
59 65 _____ 590 1B25
60 66 _____ 600 1B36
61 1BB _____ 610 1B5B
62 1BA _____ 620 1B6A
63 1B0 _____ 630 1AB0
64 1B1 _____ 640 1AA1
65 1B2 _____ 650 1A02
66 1B3 _____ 660 1A13
67 1B4 _____ 670 1A24
68 1B5 _____ 680 1A35
69 1B6 _____ 690 1A46
70 1AB _____ 700 1A6B
71 1AA _____ 710 10BA
72 1A0 _____ 720 10A0
73 1A1 _____ 730 1001
74 1A2 _____ 740 1012
75 1A3 _____ 750 1023
76 1A4 _____ 760 1034
77 1A5 _____ 770 1045
78 1A6 _____ 780 1056
79 10B _____ 790 11BB
80 10A _____ 800 11AA
81 100 _____ 810 1100
82 101 _____ 820 1111
83 102 _____ 830 1122
84 103 _____ 840 1133
85 104 _____ 850 1144
86 105 _____ 860 1155
87 106 _____ 870 1166
88 11B _____ 880 12AB
89 11A _____ 890 120A
90 110 _____ 900 1210
91 111 _____ 910 1221
92 112 _____ 920 1232
93 113 _____ 930 1243
94 114 _____ 940 1254
95 115 _____ 950 1265
96 116 _____ 960 13B6
97 12B _____ 970 130B
98 12A _____ 980 131A
99 120 _____ 990 1320
100 121 _____ 1000 1331

2
Заблокирован
05.01.2012, 10:01 26
мужЫГ Все таки решил переводить числа. Сомнительно все это
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
05.01.2012, 13:03  [ТС] 27
greeezz, большущие спасибо
шас буду вникать в код
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
05.01.2012, 14:26 28
greeezz, идея с представлением отрицательных чисел интересная. Насколько она правильная - затрудняюсь ответить, тут нужен человек с математическим складом ума. Хотя чисто математически получается, что такая система счисления изначально неверная, потому что число -1 можно представить как "А" и как "-1", т.е. имеется неоднозначность в преставлении чисел
0
Заблокирован
05.01.2012, 14:51 29
Цитата Сообщение от Evg Посмотреть сообщение
имеется неоднозначность в преставлении чисел
все однозначно. Знаков в сс нету
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
05.01.2012, 14:53 30
Цитата Сообщение от alkagolik Посмотреть сообщение
Знаков в сс нету
Кто это тебе сказал?
0
Заблокирован
05.01.2012, 14:54 31
ну я говорю об этой сс, просто не знаю как ее назвать. отрицательные представлены символами в старшем разряде.

Добавлено через 45 секунд
AA == -10
A0 == -9
A1 == -8
и т.д.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
05.01.2012, 15:10 32
Я тоже говорю про данную сс. В условии ничего не сказано про отсутствие знака для представления отрицательных чисел, равно как вообще ничего не сказано про представление отрицательных чисел. Может ты что-то ещё знаешь об этой задаче, но ТС об этом не говорил

Добавлено через 11 минут
Хотя какая-то логичность в этом есть....
0
Заблокирован
05.01.2012, 15:18 33
Ну и что что не сказано, это вытекает из самой сс, а она хоть и кривая, но полна (самодостаточна). На тритных БИС она не составила бы особой проблемы.
0
Заблокирован
05.01.2012, 18:30 34
Цитата Сообщение от alkagolik Посмотреть сообщение
все однозначно. Знаков в сс нету
Эта кривая система неоднозначна и с положительными числами.
Например, любое число вида 2^n, где n - число четно можно представить и в виде 2^n и в виде B^n.
Единственно, что может более-менее придать форму некоей корректностиь этой задачи. - это на само деле простой счет, то есть правило посредством которого оссуществляется переход от записи предыдущего числа к записи последующего числа.
А правило это очень простое, если текущий разряд меньше 6, то все проиходит, как с обычной числовой системой, а если больше 6, то происходит его ззамена на B с переносом 1 в более высокий разряд. Ну и разряд, равный B заменяется на A.
1
Заблокирован
05.01.2012, 18:40 35
thick_int, свежая и актуальная мысль. Однако будет ли верным "примерять" соглашения десятичной арифметики на арифметику "этой сс"? и почему бы и нет
Цитата Сообщение от thick_int
n - число четно можно представить и в виде 2^n и в виде B^n.
в конце концов в привычной сс все аналогично: https://www.cyberforum.ru/cgi-bin/latex.cgi?(-2==B_{9})^{2}=(2==2_{9})^{2}=4. Почему-то лень моделировать троичную логику на двоичных векторах.
0
Заблокирован
05.01.2012, 18:55 36
Да и еще, те кто считает, что отрицательных знаков в этой системе быть не должно, очень ошибаются.
Поробуйте для начала представить в этой системе -3 и убедитесь в том, что без знака минуса это никак нельзя.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
05.01.2012, 18:56 37
Цитата Сообщение от thick_int Посмотреть сообщение
Поробуйте для начала представить в этой системе -3 и убедитесь в том, что без знака минуса это никак нельзя.
A6 = -1 * 9 + 6 = -3
1
Заблокирован
05.01.2012, 19:02 38
Цитата Сообщение от thick_int Посмотреть сообщение
без знака минуса это никак нельзя.
уже evg показал что можно... А разве в регистрах компьютеров есть знаки + и -?
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
05.01.2012, 19:14 39
Цитата Сообщение от alkagolik Посмотреть сообщение
А разве в регистрах компьютеров есть знаки + и -?
У плавающих есть. У целочисленных - на основной массе процессоров нет, потому как используется система представления целых чисел в дополнительном коде. Но есть и такие процессоры (сигнальные), где используется и система хранения с знаком

Добавлено через 55 секунд
thick_int, ты не мне плюсик ставь, а alkagolik'у, это он прочухал про такое хранение отрицательных чисел
0
Заблокирован
05.01.2012, 19:20 40
Да я тоже почитал только то про такие системы и действительно в таких системах знак минус отсутствует.
0
05.01.2012, 19:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2012, 19:20
Помогаю со студенческими работами здесь

Перевод строки из 2-ной системы счисления в 8-ную систему счисления
помогите пожалуйста как сделать перевод строки из 2 системы счисления на 8 систему счисления через...

Перевод из любой системы счисления в любую другую систему счисления (2-36)
Привет. 1 курс факультета ИВТ, изучаю С++ только один месяц. Из основного прошли строки, массивы,...

Перевод числа из восьмеричной системы счисления в шестнадцатеричную систему счисления
Вот пример числа: 754 = 1EC 1000 = 200

Перевод чисел из двоичной системы счисления в систему счисления кратной степеням двойки и обратно
Нужно две программы, одна реализует перевод чисел из двоичной системы счисления в систему счисления...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru