Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 111, средняя оценка - 4.69
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
02.01.2012, 13:23     Перевод в 9-чную систему счисления #1
есть задача, что бы решить ее до конца мне надо сделать перевод из 10-тичной(можно любой другой) в девятиричную систему счисления
я бы это сделал сам, если бы не странность системы.
В задание звучит так: Рассмотрим девятеричную позиционную систему счисления с цифрами { B, A, 0, 1, 2, 3, 4, 5, 6 }, где цифра A имеет значение -1, а цифра B – значение -2.

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

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

 Комментарий модератора 
По просьбе одного из авторов, в связи с тем, что тема растянулась, ссылки на решения в этой теме:
Решение 1
Решение 2
Решение 3
Решение 4
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
02.01.2012, 14:09     Перевод в 9-чную систему счисления #2
Интересная задача. Математически ничем от обычной 9-ричной системы не отличается, но технически мозг ломается уже на уровне подсознания, чтобы это воспринять. Математически алгоритм написать пока затрудняюсь, но на пальцах получается так. Пишем в ряд несколько разрядов и все их зануляем. Далее увеличиваем значения на единичку с правой стороны циклическим образом. При переходе через границу увеличиваем на единичку левый разряд (как на счётчике от магнитофона, если ещё застал таковое):

0000
0001
0002
0003
0004
0005
0006
001B = 1 * 9 + B = 7
001A = 1 * 9 + A = 8
0010 = 1 * 9 + 0 = 9
...
0016 = 1 * 9 + 6 = 15
002B = 2 * 9 + B = 16
002A = 2 * 9 + A = 17
...

Добавлено через 1 минуту
Т.е. в итоге получается всё то же самое, что и для "обычной" системы счисления, но вот таким вот извращённым способом
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
02.01.2012, 14:28  [ТС]     Перевод в 9-чную систему счисления #3
большое спасибо) сам бы не догадался посмотреть так

я говорил что решил, но думаю у меня неправильный код

помогите мне теоритечески или кусочками кода
вся задача такая:Задание 4. Рассмотрим девятеричную позиционную систему счисления с цифрами { B, A, 0,
1, 2, 3, 4, 5, 6 }, где цифра A имеет значение -1, а цифра B – значение -2. Выполните
следующие операции и представьте результат в этой же самой системе счисления:
24+5A
B5+61
52*A6
312+41B
A 1A*B2B


а вот код который пока есть у меня
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
#include <iostream>
#include <sstream>
 
using namespace std;
 
const int MAX_SIM=3;
 
int to10(string &sourse);
string &to9(int sourse);
int n_s(char a);
 
 
 
int main()
{
    string z1="24";
    string z2="5A";
    //string otv=to9( (to10(z1)+to10(z2)) );   эта строка должна выдовать ответ... но функция еще не реализованна
    //cout<<otv;
    cout<<to10(z2);
    int a;cin>>a;
    return 0;
}
 
int to10(string &sourse)
{
    int out=0;
    char stroka[MAX_SIM+1];
    strcpy(stroka,sourse.c_str());
    for(int i=0;i<sourse.length();i++)
    {
        out+=n_s(stroka[i]) * (int)pow( ((double) 9),(double)(sourse.length()-1));
    }
    return out;
}
int n_s(char a)
{
    int out=0;
    switch(a)
    {
    case 'A': out=-1; break;
    case 'B': out=-2; break;
    case '0': out=0; break;
    case '1': out=1; break;
    case '2': out=2; break;
    case '3': out=3; break;
    case '4': out=4; break;
    case '5': out=5; break;
    case '6': out=6; break;
    }
    return out;
}
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
02.01.2012, 14:56     Перевод в 9-чную систему счисления #4
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
помогите мне теоритечески или кусочками кода
Как ты делаешь сложение столбиком в десятичной системе? Грубо говоря, сначала складываешь два правых разряда. Если получается двузначное число, то старший разряд (единицу) переносишь в следующий разряд. Тут, вроде бы как, будет то же самое. Берёшь разряды в строковой форме, переводишь их в число, делаешь сложение в виде чисел, результат переводишь в строковую форму. Если строка будет состоять из одного символа, то сложение разрядов будет без переноса, если из двух символов - то с переносом. Причём старший символ вроде бы как только единицей может быть
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
02.01.2012, 19:44     Перевод в 9-чную систему счисления #5
много писал, потом правил, потом переписывал в итоге скажу коротко. сс = 9 значит положительных чисел должно быть ровно 9. Дальше - знака в сс нету. Отрицательные числа представлены символами А и В в левом разряде. т.е. числа -6 нет, это число будет таким: А3, а число -3 = А6. Это важно. Вот почему: число An и цифра nA корректны в обоих случаях (я в этом убедился на примере A1A*B2B ). Что может следовать из этого? то что перевод из\в другие сс крайне затруднен по причине высокой вероятности просто перепутать связки n и A, B. Как, например, трактовать такое число AB5BA? А вот из этого уже следует что переводить числа в другую сс не имеет смысла, это очень затратно. Вычисления должны быть построены по правилам машинной арифметики в прямых и обратных\дополнительных кодах. Моё имхо.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
03.01.2012, 10:39     Перевод в 9-чную систему счисления #6
Цитата Сообщение от Evg Посмотреть сообщение
Как ты делаешь сложение столбиком в десятичной системе? Грубо говоря, сначала складываешь два правых разряда. Если получается двузначное число, то старший разряд (единицу) переносишь в следующий разряд. Тут, вроде бы как, будет то же самое. Берёшь разряды в строковой форме, переводишь их в число, делаешь сложение в виде чисел, результат переводишь в строковую форму. Если строка будет состоять из одного символа, то сложение разрядов будет без переноса, если из двух символов - то с переносом. Причём старший символ вроде бы как только единицей может быть
На самом деле не так всё просто. Хз как правильно сложить B+B
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
03.01.2012, 11:55  [ТС]     Перевод в 9-чную систему счисления #7
насколько я понял мне надо писать сложение и умножение столбиком?
или это все равно работать так как надо не будет
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
03.01.2012, 12:36     Перевод в 9-чную систему счисления #8
дополни алфавит до 1A справа и A1 слева и у тебя появится 17 "одноразрядных" элементов + нуль. Для них сделай таблицу сложения и умножения (просто в тетради для наглядности). А поскольку все "одноразрядные" комбинации у тебя уже есть, то вроде как несложно становится разбить число на разряды, остальное дело техники. Интуиция мне все таки подсказывает что в отрицательных числах n привязано к А или В справа (приоритет выше) а после уже слева, но на интуицию полагаться... Поправлюсь - положительных должно быть 8 + нуль.
Цитата Сообщение от Evg Посмотреть сообщение
Хз как правильно сложить B+B
имхо, только по заранее составленной таблице.

Добавлено через 16 минут
нет. ерунду написал. 1А и А1 это уже двуразрядные числа, также как и 2А, 5А и т.д.
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
03.01.2012, 12:44  [ТС]     Перевод в 9-чную систему счисления #9
глупыя я)
не понимаю что от меня хотите
можно примеры кода?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
03.01.2012, 16:57     Перевод в 9-чную систему счисления #10
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
насколько я понял мне надо писать сложение и умножение столбиком?
Я не знаю, ты уточни у своего преподавателя. Но если делать НЕ столбиком, то смысл задания вроде бы как теряется. Для подстраховки ты у преподавателя выясни всё-таки. Однако моё мнение, что человек, дающий такие задания, совсем не является идиотом, а потому логичным было бы ожидать именно такую постановку задачи

Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
не понимаю что от меня хотите
От тебя пока никто ничего не хочет. Просто пытаемся вникнуть в смысл задания и высказываем мысли вслух.

Цитата Сообщение от alkagolik Посмотреть сообщение
имхо, только по заранее составленной таблице
Ну вот я и не понимаю, чему по заранее составленной таблице равно B+B. Ни о каких дополнительных кодах речь идти не может, поскольку они существуют лишь при хранении данных в машине. На бумаге отрицательные числа из разных систем счисления пишутся с обычным знаком минус. Но как оно будет в нашей шаманской системе - хз: 1B + B = 5. Т.е. если к двузначному числу добавить однозначное, то может в результате получиться однозначное. Т.е. при складывании столбиком в соседний (левый) разряд переносится не +1, а -1. Как это выразить обобщённым способом - не понимаю.
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
03.01.2012, 22:05  [ТС]     Перевод в 9-чную систему счисления #11
это задание вузовской олимпиады
я сначала думал что оно одно из простых, а оказалось с подвохом
у меня пока больше нет идей, как его решать
asm
 Аватар для asm
62 / 35 / 1
Регистрация: 05.10.2011
Сообщений: 137
03.01.2012, 22:35     Перевод в 9-чную систему счисления #12
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
Рассмотрим девятеричную позиционную систему счисления
честно говоря, листая Wiki, я не натолкнулся ни на одну систему счисления, которая бы начиналась с отрицательных чисел; позиционная система счисления рассматривается как система последовательного перебора чисел, начинающаяся с нуля, а не с -2.
Если принимать за B=0, A=1, 0=2, и т.д., то эта задача решается вроде просто...
ЛеЖиК)
 Аватар для ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 630
03.01.2012, 22:37  [ТС]     Перевод в 9-чную систему счисления #13
да но в условие сказана по другому
asm
 Аватар для asm
62 / 35 / 1
Регистрация: 05.10.2011
Сообщений: 137
03.01.2012, 23:06     Перевод в 9-чную систему счисления #14
Цитата Сообщение от Evg Посмотреть сообщение
Хз как правильно сложить B+B
0+1=1 (dec)
B+A=A (nov) B - основание данной сист. счисления.,
т.е. это эквивалентно если бы взять B=0, A=1, 0=2, и т.д., и сложить, а потом представить наоборот.
...но тогда B+B=0; беда...

...а что тебя не устраивает в твоем алгоритме?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
03.01.2012, 23:11     Перевод в 9-чную систему счисления #15
Цитата Сообщение от asm Посмотреть сообщение
честно говоря, листая Wiki, я не натолкнулся ни на одну систему счисления, которая бы начиналась с отрицательных чисел
А таких систем счисления нет. Это всего лишь задача (и как выяснилось - олимпиадная). Задаче скорее математическая, чем программерская
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
03.01.2012, 23:14     Перевод в 9-чную систему счисления #16
B + B = B
Я так понял, местный ноль равен десятичной двойке. Цифра сама по себе не может быть отрицательной ну никак
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
03.01.2012, 23:26     Перевод в 9-чную систему счисления #17
http://www.cyberforum.ru/cgi-bin/latex.cgi?A1_{9} == -8_{10}or-10_{10}? ответа так и не поступило иопты пошел йа виску уничтожать иопт
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
04.01.2012, 00:01     Перевод в 9-чную систему счисления #18
A+A = B
A+B = -6
B+B = -5

1A+1A = 2B
1A+1B = 2(-6) = 16
1B+1B = 2(-5) = 15
1A+10 = 2A
1A+11 = 20
1A+12 = 21
1B+11 = 2(-1) = 2A

т.е. если в результате сложения получается цифра меньшая чем B (т.e. -2) то от следующего десятка отнимает 1. Т.е. как я вижу в толбик считать не так уж и сложно
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
04.01.2012, 09:31     Перевод в 9-чную систему счисления #19
Цитата Сообщение от greeezz Посмотреть сообщение
A+B = -6
B+B = -5
в этой сс нету знаков, отрицательные представлены символами в старшем разряде
A + B = A6
B + B = A5
функцию сложения написать не сложно, хотя она и не простая. Сложно реализовать умножение, возведение в степень. Мы привыкли что 10 и -10 отличаются только знаком, а в этой сс всё иначе (как в эвм)-> это ключ к решению
Об отрицательности или положительности числа сигнализирует старший разряд, поэтому я бы не говорил что задача чисто математическая. По любому вычисления должны быть в исходной сс.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2012, 10:22     Перевод в 9-чную систему счисления
Еще ссылки по теме:

Перевод чисел из 10 в 15 систему счисления C++
C++ Перевод чисел из 10-й в 2-ю систему счисления
C++ Перевод строки из 2-ной системы счисления в 8-ную систему счисления

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

Или воспользуйтесь поиском по форуму:
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
04.01.2012, 10:22     Перевод в 9-чную систему счисления #20
Цитата Сообщение от alkagolik Посмотреть сообщение
в этой сс нету знаков,
Я понял. Подумал, что если представить именно в таком виде что если результат менше В (-2) то просто отнимать 1 от следующего разряда при сложении.
Цитата Сообщение от alkagolik Посмотреть сообщение
По любому вычисления должны быть в исходной сс
Возможно вы правы. Задача интересная буду тоже принимать участие. Все же теоретически меня не оставляет мысль попробовать сделать перевод в десятичную. Нет ничего сложно перевести число из данной СС в десятичную используя суммы произведений степеней основания системы счисления на соответствующие цифры.
Например :
B2B = -2*9^2+2*9^1+(-2)*9^0 = -81+18-2 = - 65
а вот обратно перевести.. вот это уже интереснее.
Yandex
Объявления
04.01.2012, 10:22     Перевод в 9-чную систему счисления
Ответ Создать тему
Опции темы

Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru