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

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

04.10.2016, 19:51. Показов 4942. Ответов 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,894
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
18147 / 10731 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru