Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 14

Перевод из любой системы счисления в любую (от 2 и более. т.е. может перевести из 2й к примеру в 80ю)

04.10.2016, 19:51. Показов 4908. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Первый курс факультета информационных технологий, только только начали изучать c++, прошли лишь самые азы.. Но препод один требует от нас программу для перевода больших чисел из любой системы счисления в любую.. более того, он требует действительно из любой и в любую, из 80й в 100ю, из 175й в 70ю и т.д. Помогите пожалуйста, совершенно не знаю как такое написать
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.10.2016, 19:51
Ответы с готовыми решениями:

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

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

Переход из любой системы счисления в любую
!!!Целые числа!!! Необходимо организовать переход из любой системы счисления в любую через десятичную. Например перевести число XYZ из...

17
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 14
04.10.2016, 21:02  [ТС]
Создал программу переводящую из любой в любую, но только от 2й по 36ю, нужно же от 2й и более. Допустим из 177й в 80ю и т.д. и т.п. Помогите пожалуйста разобраться как такое сделать.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
04.10.2016, 21:11
А набор цифр какой?
0
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 14
04.10.2016, 21:20  [ТС]
Mr.X, Не оговорено. Какой удобней)

Добавлено через 6 минут
Mr.X, или же вы имели ввиду не ввод чисел в консоль?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
04.10.2016, 21:28
SlavaNub1999, Может, имелся ввиду алфавит, который нужно использовать? Потому что в 16-й системе используется 0123456789ABCDEF, в 36-й 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ. Какой алфавит использовать в, например, 177-й?
0
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 14
04.10.2016, 21:40  [ТС]
Mr.X, извините за недогадливость) если допустим 80 СС, то в ней используются цифры от 0 до 79. Просто выводятся через пробел. Аналогично и с другими СС
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
04.10.2016, 21:40
Цитата Сообщение от SlavaNub1999 Посмотреть сообщение
Допустим из 177й в 80ю
Всего в char печатных символов 94 штуки. Или предполагаете другой тип использовать?
0
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 14
04.10.2016, 21:42  [ТС]
GbaLog-, да, вы правы) просто у меня совсем голова не работает к концу дня)
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
04.10.2016, 23:05
SlavaNub1999, поглядите функции из этих сообщений
Перевод чисел в определённую систему
Перевод чисел в определённую систему

они умеют переводить 10-ое число в строковый формат любую СС вплоть до 36-ричной (если будет алфавит, больше, то может и 80-ричную и 100-ричную). Вам остается только понять как сделать обратное преобразование, т.е. из строки в 100-рично СС перевести в 10-тичную (т.е. получить бинарное представление числа). А вообще тема не раз и не два поднималась на форуме, может лучше воспользоваться поиском.
0
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 14
04.10.2016, 23:17  [ТС]
schdub, Здравствуйте. Спасибо за помощь) А прежде чем подымать тему загуглил во всех вариациях каких только возможно, и на данном форуме пользовался поиском) Сто процентов подобная тема где-то уже была поднята на этом форуме, но я к сожалению смог найти только до 36й) потому что считается что СС выше 36й не существует.. Однако преподаватель убеждён в обратном, поэтому есть некоторые сложности)
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.10.2016, 00:41
Лучший ответ Сообщение было отмечено SlavaNub1999 как решение

Решение

Цитата Сообщение от SlavaNub1999 Посмотреть сообщение
если допустим 80 СС, то в ней используются цифры от 0 до 79. Просто выводятся через пробел. Аналогично и с другими СС
А, понятно теперь.

Добавлено через 2 часа 57 минут
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#include <iostream>
#include <deque>
#include <sstream>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                 T_str;
typedef long long                   T_int;
typedef std::deque  < T_int     >   T_digits;
///////////////////////////////////////////////////////////////////////////////
const   T_int   BASE_MIN    {2};
///////////////////////////////////////////////////////////////////////////////
class   T_num
{
    //-------------------------------------------------------------------------
    T_int   val_    =   0;
    //-------------------------------------------------------------------------
public:
    //-------------------------------------------------------------------------
    bool    successfully_set_digits_for_base
        (
            T_digits    const   &   digits,
            T_int                   base
        )
    {
        bool    bool_res{};
        val_    =   0;
 
        for( auto   dig     :   digits )
        {
            bool_res    =   dig_is_correct_for_base
                                (
                                    dig,
                                    base
                                );
 
            if( !bool_res )
            {
                break;
            }
 
            val_    *=  base;
            val_    +=  dig;
        }//for
 
        return  bool_res;
    }
    //-------------------------------------------------------------------------
    static
    bool    dig_is_correct_for_base
        (
            T_int   dig,
            T_int   base
        )
    {
        return      dig     >=  0
                &&  dig     <   base;
    }
    //-------------------------------------------------------------------------
    T_digits    digits_for_base( T_int  base )                              const
    {
        auto        val_cur     =   val_;
        T_digits    res;
 
        do
        {
            res.emplace_front   (
                                        val_cur
                                    %   base
                                );
 
            val_cur     /=  base;
        }
        while( val_cur );
 
        return  res;
    }
    //-------------------------------------------------------------------------
    static
    bool    successfully_convert_digits_from_base_to_base
        (
            T_digits    &   digits,
            T_int           base,
            T_int           base_new
        )
    {
        T_num   num;
 
        bool    bool_res    =   num.successfully_set_digits_for_base
                                    (
                                        digits,
                                        base
                                    );
 
        if( bool_res )
        {
            digits  =   num.digits_for_base( base_new );
        }//if
 
        return  bool_res;
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
void    input_and_set_correct_digits_for_base
    (
        T_int           base,
        T_digits    &   digits
    )
{
    bool    digits_are_correct{};
 
    do
    {
        digits_are_correct  =   true;
        std::cout   <<  "enter digits of number separated by space:\n";
        T_str   s;
 
        do
        {
            getline( std::cin,  s );
        }
        while   (
                    s.empty()
                );
 
        std::istringstream  istr(s);
 
        T_int   dig{};
        digits.clear();
 
        while( istr >> dig )
        {
            digits.emplace_back( dig );
 
            if  (
                    !T_num::dig_is_correct_for_base
                        (
                            dig,
                            base
                        )
                )
            {
                digits_are_correct  =   false;
            }
        }//while
    }
    while   (
                !digits_are_correct
            );
}
///////////////////////////////////////////////////////////////////////////////
void    with_prompt_input_and_set_base
    (
        T_str   const   &   prompt,
        T_int           &   base
    )
{
    do
    {
        std::cout   <<  prompt;
        std::cin    >>  base;
    }
    while( base     <   BASE_MIN );
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    T_int   base{};
    with_prompt_input_and_set_base
        (
            "base (>= " + std::to_string( BASE_MIN ) + ")\t= ",
            base
        );
 
    T_digits    digits;
    input_and_set_correct_digits_for_base
        (
            base,
            digits
        );
 
    T_int   base_new{};
    with_prompt_input_and_set_base
        (
            "base new(>= " + std::to_string( BASE_MIN ) + ")\t= ",
            base_new
        );
 
    T_num::successfully_convert_digits_from_base_to_base
        (
            digits,
            base,
            base_new
        );
 
    for( auto   dig     :   digits )
    {
        std::cout   <<  dig     <<  ' ';
    }
    std::cout   <<  std::endl;
}
1
05.10.2016, 07:41

Не по теме:

Цитата Сообщение от SlavaNub1999 Посмотреть сообщение
потому что считается что СС выше 36й не существует
Просто записывать числа в таких СС как-то не очень будет.
Цитата Сообщение от SlavaNub1999 Посмотреть сообщение
Однако преподаватель убеждён в обратном, поэтому есть некоторые сложности
Моему знакомому в универе приходилось работать с СС 232 :)

0
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 14
05.10.2016, 09:26  [ТС]
Mr.X, У меня выдает целый ряд ошибок, а так как я многого из того что вы делали в программе не понял, не знаю что с ними делать:
error C2470: BASE_MIN: выглядит как определение функции, но без списка параметров; пропускается вероятное тело функции
error C2864: T_num::val_: в пределах класса могут быть инициализированы только статические константные данные-члены целого типа
error C2601: bool_res: недопустимые локальные определения функций
fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
05.10.2016, 09:29
SlavaNub1999, для этого кода у Вас VS старовата.
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.10.2016, 10:18
Цитата Сообщение от SlavaNub1999 Посмотреть сообщение
У меня выдает целый ряд ошибок
С++11 надо подключить.
0
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 14
05.10.2016, 21:01  [ТС]
Croessmah, буквально на днях удалил 15) в универе проходили scanf и printf, до сих пор заставляют использовать в лабораторных, а 15я у меня почему-то яро ненавидит scanf, и чтобы он работал не взирая на то, что устаревший, нужно использовать ещё парочку команд) Вот и поставил 12ю вместо 15й.

Добавлено через 2 минуты
Mr.X, в данный момент загружаются 15ю VS, вычитал что моя 12я не полностью поддерживает C++11. Надеюсь заработает) А потом буду по тиху изучать c++ и когда-нибудь пойму что вы использовали в своём коде и для чего)
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.10.2016, 21:20
Цитата Сообщение от SlavaNub1999 Посмотреть сообщение
буквально на днях удалил 15) в универе проходили scanf и printf, до сих пор заставляют использовать в лабораторных, а 15я у меня почему-то яро ненавидит scanf, и чтобы он работал не взирая на то, что устаревший, нужно использовать ещё парочку команд) Вот и поставил 12ю вместо 15й.
Таки заучили человека!

Добавлено через 5 минут
Цитата Сообщение от SlavaNub1999 Посмотреть сообщение
Mr.X, в данный момент загружаются 15ю VS, вычитал что моя 12я не полностью поддерживает C++11. Надеюсь заработает) А потом буду по тиху изучать c++ и когда-нибудь пойму что вы использовали в своём коде и для чего)
Ну, в этой-то программе ничего сложного, только некоторые синтаксические плюшки из нового стандарта, но они таки удобнее!
0
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 14
05.10.2016, 23:24  [ТС]
Mr.X, ага) основной предмет - одна пара на две недели) сейчас проходим структуру "... ? ... : ..." На втором курсе должны более плотно заняться программированием, а пока сам пытаюсь изучать c++, верхом моего гения является прога умножения произвольных матриц) не густо, но уже что-то полезное)

Добавлено через 45 минут
Mr.X, Запустил Всё работает идеально)) Как раз то, что я и искал Правда есть один нюанс, при переводе в 16ричную или ту же 36 должны использоваться буквы алфавита, для обозначения цифр идущих после 10ти)

Добавлено через 1 час 12 минут
Mr.X, программа гениальна!!!!!!)) побаловался с ней немножко) переводит в миллиардные системы без труда)) спасибо огромное)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2016, 23:24
Помогаю со студенческими работами здесь

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

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

Перевод числа из любой системы в любую
Здравствуйте, число поступает в виде строки. Допустим типа double. Не понимаю как его разделить на две части. И как провести преобразование...

Написать програмку перевода из любой системы счисления в любую вплоть до 16
Помогите написать програмку перевода из любой системы счисления в любую вплоть до 16. З.Ы заранее спасибо

Программа должна переводить из любой системы счисления в любую другую + в римскую
Здравствуйте! У меня такая проблема... Учусь в школе, задали написать проект по информатики...Я в этом не сильна и выбрала самую легкую...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru