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

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

02.01.2012, 13:23. Показов 22420. Ответов 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
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
02.01.2012, 14:09 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 минуту
Т.е. в итоге получается всё то же самое, что и для "обычной" системы счисления, но вот таким вот извращённым способом
1
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
02.01.2012, 14:28  [ТС] 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;
}
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
02.01.2012, 14:56 4
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
помогите мне теоритечески или кусочками кода
Как ты делаешь сложение столбиком в десятичной системе? Грубо говоря, сначала складываешь два правых разряда. Если получается двузначное число, то старший разряд (единицу) переносишь в следующий разряд. Тут, вроде бы как, будет то же самое. Берёшь разряды в строковой форме, переводишь их в число, делаешь сложение в виде чисел, результат переводишь в строковую форму. Если строка будет состоять из одного символа, то сложение разрядов будет без переноса, если из двух символов - то с переносом. Причём старший символ вроде бы как только единицей может быть
1
Заблокирован
02.01.2012, 19:44 5
много писал, потом правил, потом переписывал в итоге скажу коротко. сс = 9 значит положительных чисел должно быть ровно 9. Дальше - знака в сс нету. Отрицательные числа представлены символами А и В в левом разряде. т.е. числа -6 нет, это число будет таким: А3, а число -3 = А6. Это важно. Вот почему: число An и цифра nA корректны в обоих случаях (я в этом убедился на примере A1A*B2B ). Что может следовать из этого? то что перевод из\в другие сс крайне затруднен по причине высокой вероятности просто перепутать связки n и A, B. Как, например, трактовать такое число AB5BA? А вот из этого уже следует что переводить числа в другую сс не имеет смысла, это очень затратно. Вычисления должны быть построены по правилам машинной арифметики в прямых и обратных\дополнительных кодах. Моё имхо.
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
03.01.2012, 10:39 6
Цитата Сообщение от Evg Посмотреть сообщение
Как ты делаешь сложение столбиком в десятичной системе? Грубо говоря, сначала складываешь два правых разряда. Если получается двузначное число, то старший разряд (единицу) переносишь в следующий разряд. Тут, вроде бы как, будет то же самое. Берёшь разряды в строковой форме, переводишь их в число, делаешь сложение в виде чисел, результат переводишь в строковую форму. Если строка будет состоять из одного символа, то сложение разрядов будет без переноса, если из двух символов - то с переносом. Причём старший символ вроде бы как только единицей может быть
На самом деле не так всё просто. Хз как правильно сложить B+B
1
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
03.01.2012, 11:55  [ТС] 7
насколько я понял мне надо писать сложение и умножение столбиком?
или это все равно работать так как надо не будет
0
Заблокирован
03.01.2012, 12:36 8
дополни алфавит до 1A справа и A1 слева и у тебя появится 17 "одноразрядных" элементов + нуль. Для них сделай таблицу сложения и умножения (просто в тетради для наглядности). А поскольку все "одноразрядные" комбинации у тебя уже есть, то вроде как несложно становится разбить число на разряды, остальное дело техники. Интуиция мне все таки подсказывает что в отрицательных числах n привязано к А или В справа (приоритет выше) а после уже слева, но на интуицию полагаться... Поправлюсь - положительных должно быть 8 + нуль.
Цитата Сообщение от Evg Посмотреть сообщение
Хз как правильно сложить B+B
имхо, только по заранее составленной таблице.

Добавлено через 16 минут
нет. ерунду написал. 1А и А1 это уже двуразрядные числа, также как и 2А, 5А и т.д.
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
03.01.2012, 12:44  [ТС] 9
глупыя я)
не понимаю что от меня хотите
можно примеры кода?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
03.01.2012, 16:57 10
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
насколько я понял мне надо писать сложение и умножение столбиком?
Я не знаю, ты уточни у своего преподавателя. Но если делать НЕ столбиком, то смысл задания вроде бы как теряется. Для подстраховки ты у преподавателя выясни всё-таки. Однако моё мнение, что человек, дающий такие задания, совсем не является идиотом, а потому логичным было бы ожидать именно такую постановку задачи

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

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

...а что тебя не устраивает в твоем алгоритме?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
03.01.2012, 23:11 15
Цитата Сообщение от asm Посмотреть сообщение
честно говоря, листая Wiki, я не натолкнулся ни на одну систему счисления, которая бы начиналась с отрицательных чисел
А таких систем счисления нет. Это всего лишь задача (и как выяснилось - олимпиадная). Задаче скорее математическая, чем программерская
0
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
03.01.2012, 23:14 16
B + B = B
Я так понял, местный ноль равен десятичной двойке. Цифра сама по себе не может быть отрицательной ну никак
0
Заблокирован
03.01.2012, 23:26 17
https://www.cyberforum.ru/cgi-bin/latex.cgi?A1_{9} == -8_{10}or-10_{10}? ответа так и не поступило иопты пошел йа виску уничтожать иопт
1
278 / 173 / 21
Регистрация: 10.07.2011
Сообщений: 441
04.01.2012, 00:01 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. Т.е. как я вижу в толбик считать не так уж и сложно
0
Заблокирован
04.01.2012, 09:31 19
Цитата Сообщение от greeezz Посмотреть сообщение
A+B = -6
B+B = -5
в этой сс нету знаков, отрицательные представлены символами в старшем разряде
A + B = A6
B + B = A5
функцию сложения написать не сложно, хотя она и не простая. Сложно реализовать умножение, возведение в степень. Мы привыкли что 10 и -10 отличаются только знаком, а в этой сс всё иначе (как в эвм)-> это ключ к решению
Об отрицательности или положительности числа сигнализирует старший разряд, поэтому я бы не говорил что задача чисто математическая. По любому вычисления должны быть в исходной сс.
0
278 / 173 / 21
Регистрация: 10.07.2011
Сообщений: 441
04.01.2012, 10:22 20
Цитата Сообщение от alkagolik Посмотреть сообщение
в этой сс нету знаков,
Я понял. Подумал, что если представить именно в таком виде что если результат менше В (-2) то просто отнимать 1 от следующего разряда при сложении.
Цитата Сообщение от alkagolik Посмотреть сообщение
По любому вычисления должны быть в исходной сс
Возможно вы правы. Задача интересная буду тоже принимать участие. Все же теоретически меня не оставляет мысль попробовать сделать перевод в десятичную. Нет ничего сложно перевести число из данной СС в десятичную используя суммы произведений степеней основания системы счисления на соответствующие цифры.
Например :
B2B = -2*9^2+2*9^1+(-2)*9^0 = -81+18-2 = - 65
а вот обратно перевести.. вот это уже интереснее.
0
04.01.2012, 10:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2012, 10:22
Помогаю со студенческими работами здесь

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

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

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

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


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

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